diff options
9 files changed, 51 insertions, 55 deletions
diff --git a/pki/base/common/src/com/netscape/certsrv/jobs/IJob.java b/pki/base/common/src/com/netscape/certsrv/jobs/IJob.java index 3683b1f09..5584d68ff 100644 --- a/pki/base/common/src/com/netscape/certsrv/jobs/IJob.java +++ b/pki/base/common/src/com/netscape/certsrv/jobs/IJob.java @@ -91,4 +91,16 @@ public interface IJob { * @return configuration store */ public IConfigStore getConfigStore(); + + /** + * Request the job to stop gracefully. The job may not stop immediately. + */ + public void stop(); + + /** + * Check whether the job has been asked to stop. Long running jobs should call + * this method occasionally inside the run() method and exit gracefully if it + * returns true. + */ + public boolean isStopped(); } diff --git a/pki/base/common/src/com/netscape/cms/jobs/AJobBase.java b/pki/base/common/src/com/netscape/cms/jobs/AJobBase.java index 4a70147de..0da5d2028 100644 --- a/pki/base/common/src/com/netscape/cms/jobs/AJobBase.java +++ b/pki/base/common/src/com/netscape/cms/jobs/AJobBase.java @@ -74,6 +74,8 @@ public abstract class AJobBase implements IJob, Runnable { protected Hashtable<String, Object> mContentParams = new Hashtable<String, Object>(); protected Hashtable<String, Object> mItemParams = new Hashtable<String, Object>(); + boolean stopped; + public AJobBase() { } @@ -209,17 +211,17 @@ public abstract class AJobBase implements IJob, Runnable { protected void buildItemParams(X509CertImpl cert) { mItemParams.put(IEmailFormProcessor.TOKEN_SERIAL_NUM, - (Object) cert.getSerialNumber().toString()); + cert.getSerialNumber().toString()); mItemParams.put(IEmailFormProcessor.TOKEN_HEX_SERIAL_NUM, - (Object) cert.getSerialNumber().toString(16)); + cert.getSerialNumber().toString(16)); mItemParams.put(IEmailFormProcessor.TOKEN_ISSUER_DN, - (Object) cert.getIssuerDN().toString()); + cert.getIssuerDN().toString()); mItemParams.put(IEmailFormProcessor.TOKEN_SUBJECT_DN, - (Object) cert.getSubjectDN().toString()); + cert.getSubjectDN().toString()); mItemParams.put(IEmailFormProcessor.TOKEN_NOT_AFTER, - (Object) cert.getNotAfter().toString()); + cert.getNotAfter().toString()); mItemParams.put(IEmailFormProcessor.TOKEN_NOT_BEFORE, - (Object) cert.getNotBefore().toString()); + cert.getNotBefore().toString()); // ... and more } @@ -288,4 +290,12 @@ public abstract class AJobBase implements IJob, Runnable { mLogger.log(ILogger.EV_SYSTEM, null, ILogger.S_OTHER, level, mId + ": " + msg, multiline); } + + public void stop() { + stopped = true; + } + + public boolean isStopped() { + return stopped; + } } diff --git a/pki/base/common/src/com/netscape/cms/jobs/PublishCertsJob.java b/pki/base/common/src/com/netscape/cms/jobs/PublishCertsJob.java index 903f83691..2289d7255 100644 --- a/pki/base/common/src/com/netscape/cms/jobs/PublishCertsJob.java +++ b/pki/base/common/src/com/netscape/cms/jobs/PublishCertsJob.java @@ -17,7 +17,6 @@ // --- END COPYRIGHT BLOCK --- package com.netscape.cms.jobs; -import java.security.cert.X509Certificate; import java.text.DateFormat; import java.util.Date; import java.util.Enumeration; @@ -135,7 +134,7 @@ public class PublishCertsJob extends AJobBase } mReqQ = mCa.getRequestQueue(); - mRepository = (ICertificateRepository) mCa.getCertificateRepository(); + mRepository = mCa.getCertificateRepository(); mPublisherProcessor = mCa.getPublisherProcessor(); // read from the configuration file @@ -299,7 +298,7 @@ public class PublishCertsJob extends AJobBase try { if ((mPublisherProcessor != null) && mPublisherProcessor.enabled()) { - mPublisherProcessor.publishCert((X509Certificate) cert, req); + mPublisherProcessor.publishCert(cert, req); if (mSummary == true) buildItemParams(IEmailFormProcessor.TOKEN_STATUS, STATUS_SUCCESS); @@ -322,7 +321,7 @@ public class PublishCertsJob extends AJobBase try { if ((mPublisherProcessor != null) && mPublisherProcessor.enabled()) { - mPublisherProcessor.publishCert((X509Certificate) cert, null); + mPublisherProcessor.publishCert(cert, null); if (mSummary == true) buildItemParams(IEmailFormProcessor.TOKEN_STATUS, @@ -396,6 +395,6 @@ public class PublishCertsJob extends AJobBase * @return String array of configuration parameter names. */ public String[] getConfigParams() { - return (mConfigParams); + return mConfigParams; } } diff --git a/pki/base/common/src/com/netscape/cms/jobs/RenewalNotificationJob.java b/pki/base/common/src/com/netscape/cms/jobs/RenewalNotificationJob.java index 621d987fe..5a14c6278 100644 --- a/pki/base/common/src/com/netscape/cms/jobs/RenewalNotificationJob.java +++ b/pki/base/common/src/com/netscape/cms/jobs/RenewalNotificationJob.java @@ -275,7 +275,7 @@ public class RenewalNotificationJob return; } - mCertDB = (ICertificateRepository) mCA.getCertificateRepository(); + mCertDB = mCA.getCertificateRepository(); mCron = mConfig.getString(IJobCron.PROP_CRON); if (mCron == null) { diff --git a/pki/base/common/src/com/netscape/cms/jobs/RequestInQueueJob.java b/pki/base/common/src/com/netscape/cms/jobs/RequestInQueueJob.java index adddc9755..775845ca7 100644 --- a/pki/base/common/src/com/netscape/cms/jobs/RequestInQueueJob.java +++ b/pki/base/common/src/com/netscape/cms/jobs/RequestInQueueJob.java @@ -213,6 +213,6 @@ public class RequestInQueueJob extends AJobBase * @return String array of configuration parameter names. */ public String[] getConfigParams() { - return (mConfigParams); + return mConfigParams; } } diff --git a/pki/base/common/src/com/netscape/cms/jobs/UnpublishExpiredJob.java b/pki/base/common/src/com/netscape/cms/jobs/UnpublishExpiredJob.java index c61d953eb..63cae7f30 100644 --- a/pki/base/common/src/com/netscape/cms/jobs/UnpublishExpiredJob.java +++ b/pki/base/common/src/com/netscape/cms/jobs/UnpublishExpiredJob.java @@ -135,7 +135,7 @@ public class UnpublishExpiredJob extends AJobBase } mReqQ = mCa.getRequestQueue(); - mRepository = (ICertificateRepository) mCa.getCertificateRepository(); + mRepository = mCa.getCertificateRepository(); mPublisherProcessor = mCa.getPublisherProcessor(); // read from the configuration file diff --git a/pki/base/common/src/com/netscape/cmscore/apps/CMSEngine.java b/pki/base/common/src/com/netscape/cmscore/apps/CMSEngine.java index 6ca1b6e7e..e1981132d 100644 --- a/pki/base/common/src/com/netscape/cmscore/apps/CMSEngine.java +++ b/pki/base/common/src/com/netscape/cmscore/apps/CMSEngine.java @@ -1621,8 +1621,6 @@ public class CMSEngine implements ICMSEngine { shutdownSubsystems(mFinalSubsystems); shutdownSubsystems(mDynSubsystems); shutdownSubsystems(mStaticSubsystems); - - System.exit(0); } /** diff --git a/pki/base/common/src/com/netscape/cmscore/dbs/CertificateRepository.java b/pki/base/common/src/com/netscape/cmscore/dbs/CertificateRepository.java index 0d004d335..c563a3a45 100644 --- a/pki/base/common/src/com/netscape/cmscore/dbs/CertificateRepository.java +++ b/pki/base/common/src/com/netscape/cmscore/dbs/CertificateRepository.java @@ -245,6 +245,7 @@ public class CertificateRepository extends Repository } if (mResults != null) { mRetrieveModificationsThread.setResults(mResults); + mRetrieveModificationsThread.setDaemon(true); mRetrieveModificationsThread.start(); } } @@ -254,6 +255,7 @@ public class CertificateRepository extends Repository CMS.debug("In setCertStatusUpdateInterval about to create CertStatusUpdateThread "); mCertStatusUpdateThread = new CertStatusUpdateThread(this, requestRepo, "CertStatusUpdateThread"); mCertStatusUpdateThread.setInterval(interval); + mCertStatusUpdateThread.setDaemon(true); mCertStatusUpdateThread.start(); } else { CMS.debug("In setCertStatusUpdateInterval it thinks the thread is up already "); @@ -1903,11 +1905,6 @@ public class CertificateRepository extends Repository } public void shutdown() { - //if (mCertStatusUpdateThread != null) - // mCertStatusUpdateThread.destroy(); - - //if (mRetrieveModificationsThread != null) - // mRetrieveModificationsThread.destroy(); } } diff --git a/pki/base/common/src/com/netscape/cmscore/jobs/JobsScheduler.java b/pki/base/common/src/com/netscape/cmscore/jobs/JobsScheduler.java index 79225a13f..b35f8c340 100644 --- a/pki/base/common/src/com/netscape/cmscore/jobs/JobsScheduler.java +++ b/pki/base/common/src/com/netscape/cmscore/jobs/JobsScheduler.java @@ -118,7 +118,7 @@ public class JobsScheduler implements Runnable, IJobsScheduler { // register all job plugins while (mImpls.hasMoreElements()) { - String id = (String) mImpls.nextElement(); + String id = mImpls.nextElement(); String pluginPath = c.getString(id + "." + PROP_CLASS); JobPlugin plugin = new JobPlugin(id, pluginPath); @@ -131,10 +131,9 @@ public class JobsScheduler implements Runnable, IJobsScheduler { Enumeration<String> jobs = c.getSubStoreNames(); while (jobs.hasMoreElements()) { - String jobName = (String) jobs.nextElement(); + String jobName = jobs.nextElement(); String implName = c.getString(jobName + "." + PROP_PLUGIN); - JobPlugin plugin = - (JobPlugin) mJobPlugins.get(implName); + JobPlugin plugin = mJobPlugins.get(implName); if (plugin == null) { log(ILogger.LL_FAILURE, @@ -145,10 +144,8 @@ public class JobsScheduler implements Runnable, IJobsScheduler { String classPath = plugin.getClassPath(); // instantiate and init the job - IJob job = null; - try { - job = (IJob) + IJob job = (IJob) Class.forName(classPath).newInstance(); IConfigStore jconfig = c.getSubStore(jobName); @@ -205,7 +202,7 @@ public class JobsScheduler implements Runnable, IJobsScheduler { // get time now Calendar cal = Calendar.getInstance(); long rightNow = cal.getTime().getTime(); - long duration = 0; + long duration; long second = cal.get(Calendar.SECOND); if (second != 1) { // scheduler needs adjustment @@ -238,6 +235,7 @@ public class JobsScheduler implements Runnable, IJobsScheduler { System.out.println(e); } } + // if (duration == 0), it's time // woke up... @@ -262,10 +260,8 @@ public class JobsScheduler implements Runnable, IJobsScheduler { */ wokeupTime = cal.getTime().getTime(); - IJob job = null; - - for (Enumeration<IJob> e = mJobs.elements(); e.hasMoreElements();) { - job = e.nextElement(); + for (Enumeration<IJob> e = mJobs.elements(); e.hasMoreElements(); ) { + IJob job = e.nextElement(); // is it enabled? IConfigStore cs = job.getConfigStore(); @@ -285,7 +281,7 @@ public class JobsScheduler implements Runnable, IJobsScheduler { // log(ILogger.LL_INFO, "show time for: "+job.getId()); // if previous thread still alive, skip - Thread jthread = (Thread) mJobThreads.get(job.getId()); + Thread jthread = mJobThreads.get(job.getId()); if ((jthread == null) || (!jthread.isAlive())) { Thread jobThread = new Thread((Runnable) job, job.getId()); @@ -381,7 +377,7 @@ public class JobsScheduler implements Runnable, IJobsScheduler { * @return name of the Jobs Scheduler subsystem */ public String getId() { - return (mId); + return mId; } /** @@ -419,24 +415,9 @@ public class JobsScheduler implements Runnable, IJobsScheduler { * <P> */ public void shutdown() { - mJobPlugins.clear(); - mJobPlugins = null; - mJobs.clear(); - mJobs = null; - - Enumeration<String> enums = mJobThreads.keys(); - while (enums.hasMoreElements()) { - String id = (String) enums.nextElement(); - Thread currthread = (Thread) mJobThreads.get(id); - //if (currthread != null) - // currthread.destroy(); + for (IJob job : mJobs.values()) { + job.stop(); } - - mJobThreads.clear(); - mJobThreads = null; - - //if (mScheduleThread != null) - // mScheduleThread.destroy(); } /** @@ -462,7 +443,7 @@ public class JobsScheduler implements Runnable, IJobsScheduler { Debug.trace("in getCofigParams()"); // is this a registered implname? - JobPlugin plugin = (JobPlugin) mJobPlugins.get(implName); + JobPlugin plugin = mJobPlugins.get(implName); if (plugin == null) { log(ILogger.LL_FAILURE, @@ -477,13 +458,12 @@ public class JobsScheduler implements Runnable, IJobsScheduler { // auth manager instantces to avoid instantiation just for this. // a temporary instance - IJob jobInst = null; String className = plugin.getClassPath(); if (Debug.ON) Debug.trace("className = " + className); try { - jobInst = (IJob) + IJob jobInst = (IJob) Class.forName(className).newInstance(); if (Debug.ON) Debug.trace("class instantiated"); |