|
Author: adrianc
Date: Sat Aug 18 17:43:03 2012 New Revision: 1374618 URL: http://svn.apache.org/viewvc?rev=1374618&view=rev Log: Moved JobInvoker.java code to AbstractJob.java, removed JobInvoker.java. Also worked on the Job API - the meaning of "runtime" was a little muddled, so I made "runtime" mean job execution elapsed time, and added a getStartTime method to the Job interface. This should make the distinction clearer. This commit completes the Job Scheduler overhaul. Removed: ofbiz/trunk/framework/service/src/org/ofbiz/service/job/JobInvoker.java Modified: ofbiz/trunk/framework/service/src/org/ofbiz/service/job/AbstractJob.java ofbiz/trunk/framework/service/src/org/ofbiz/service/job/GenericServiceJob.java ofbiz/trunk/framework/service/src/org/ofbiz/service/job/Job.java ofbiz/trunk/framework/service/src/org/ofbiz/service/job/JobPoller.java ofbiz/trunk/framework/service/src/org/ofbiz/service/job/PersistedServiceJob.java ofbiz/trunk/framework/service/src/org/ofbiz/service/job/PurgeJob.java Modified: ofbiz/trunk/framework/service/src/org/ofbiz/service/job/AbstractJob.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/service/src/org/ofbiz/service/job/AbstractJob.java?rev=1374618&r1=1374617&r2=1374618&view=diff ============================================================================== --- ofbiz/trunk/framework/service/src/org/ofbiz/service/job/AbstractJob.java (original) +++ ofbiz/trunk/framework/service/src/org/ofbiz/service/job/AbstractJob.java Sat Aug 18 17:43:03 2012 @@ -18,16 +18,25 @@ *******************************************************************************/ package org.ofbiz.service.job; +import java.util.Date; + import org.ofbiz.base.util.Assert; +import org.ofbiz.base.util.Debug; +import org.ofbiz.entity.transaction.GenericTransactionException; +import org.ofbiz.entity.transaction.TransactionUtil; /** * Abstract Job. */ public abstract class AbstractJob implements Job { + public static final String module = AbstractJob.class.getName(); + private final String jobId; private final String jobName; protected State currentState = State.CREATED; + private long elapsedTime = 0; + private final Date startTime = new Date(); protected AbstractJob(String jobId, String jobName) { Assert.notNull("jobId", jobId, "jobName", jobName); @@ -65,4 +74,45 @@ public abstract class AbstractJob implem } this.currentState = State.CREATED; } + + /** + * Executes this Job. The {@link #run()} method calls this method. + */ + public abstract void exec() throws InvalidJobException; + + @Override + public void run() { + long startMillis = System.currentTimeMillis(); + try { + exec(); + } catch (InvalidJobException e) { + Debug.logWarning(e.getMessage(), module); + } + // sanity check; make sure we don't have any transactions in place + try { + // roll back current TX first + if (TransactionUtil.isTransactionInPlace()) { + Debug.logWarning("*** NOTICE: JobInvoker finished w/ a transaction in place! Rolling back.", module); + TransactionUtil.rollback(); + } + // now resume/rollback any suspended txs + if (TransactionUtil.suspendedTransactionsHeld()) { + int suspended = TransactionUtil.cleanSuspendedTransactions(); + Debug.logWarning("Resumed/Rolled Back [" + suspended + "] transactions.", module); + } + } catch (GenericTransactionException e) { + Debug.logWarning(e, module); + } + elapsedTime = System.currentTimeMillis() - startMillis; + } + + @Override + public long getRuntime() { + return elapsedTime; + } + + @Override + public Date getStartTime() { + return startTime; + } } Modified: ofbiz/trunk/framework/service/src/org/ofbiz/service/job/GenericServiceJob.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/service/src/org/ofbiz/service/job/GenericServiceJob.java?rev=1374618&r1=1374617&r2=1374618&view=diff ============================================================================== --- ofbiz/trunk/framework/service/src/org/ofbiz/service/job/GenericServiceJob.java (original) +++ ofbiz/trunk/framework/service/src/org/ofbiz/service/job/GenericServiceJob.java Sat Aug 18 17:43:03 2012 @@ -29,7 +29,7 @@ import org.ofbiz.service.LocalDispatcher import org.ofbiz.service.ServiceUtil; /** - * Generic Service Job - A generic async-service Job. + * A generic async-service job. */ @SuppressWarnings("serial") public class GenericServiceJob extends AbstractJob implements Serializable { @@ -40,7 +40,6 @@ public class GenericServiceJob extends A protected final transient DispatchContext dctx; private final String service; private final Map<String, Object> context; - protected long runtime = System.currentTimeMillis(); public GenericServiceJob(DispatchContext dctx, String jobId, String jobName, String service, Map<String, Object> context, GenericRequester req) { super(jobId, jobName); @@ -131,16 +130,11 @@ public class GenericServiceJob extends A * Gets the name of the service as defined in the definition file. * @return The name of the service to be invoked. */ - protected String getServiceName() throws InvalidJobException { + protected String getServiceName() { return service; } @Override - public long getRuntime() { - return runtime; - } - - @Override public boolean isValid() { return currentState == State.CREATED; } Modified: ofbiz/trunk/framework/service/src/org/ofbiz/service/job/Job.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/service/src/org/ofbiz/service/job/Job.java?rev=1374618&r1=1374617&r2=1374618&view=diff ============================================================================== --- ofbiz/trunk/framework/service/src/org/ofbiz/service/job/Job.java (original) +++ ofbiz/trunk/framework/service/src/org/ofbiz/service/job/Job.java Sat Aug 18 17:43:03 2012 @@ -18,6 +18,8 @@ *******************************************************************************/ package org.ofbiz.service.job; +import java.util.Date; + /** * A scheduled job. * <p>A job starts out in the created state. When the job is queued for execution, it @@ -25,7 +27,7 @@ package org.ofbiz.service.job; * When the job execution ends, it transitions to the finished or failed state - depending * on the outcome of the task that was performed.</p> */ -public interface Job { +public interface Job extends Runnable { public static enum State {CREATED, QUEUED, RUNNING, FINISHED, FAILED}; @@ -35,11 +37,6 @@ public interface Job { State currentState(); /** - * Executes this Job. - */ - void exec() throws InvalidJobException; - - /** * Returns the ID of this Job. */ String getJobId(); @@ -50,7 +47,8 @@ public interface Job { String getJobName(); /** - * Returns the time to run in milliseconds. + * Returns the job execution time in milliseconds. + * Returns zero if the job has not run. */ long getRuntime(); @@ -69,5 +67,10 @@ public interface Job { * Transitions this job to the queued state. */ void queue() throws InvalidJobException; + + /** + * Returns the time this job is scheduled to start. + */ + Date getStartTime(); } Modified: ofbiz/trunk/framework/service/src/org/ofbiz/service/job/JobPoller.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/service/src/org/ofbiz/service/job/JobPoller.java?rev=1374618&r1=1374617&r2=1374618&view=diff ============================================================================== --- ofbiz/trunk/framework/service/src/org/ofbiz/service/job/JobPoller.java (original) +++ ofbiz/trunk/framework/service/src/org/ofbiz/service/job/JobPoller.java Sat Aug 18 17:43:03 2012 @@ -177,13 +177,17 @@ public final class JobPoller { List<Map<String, Object>> taskList = new ArrayList<Map<String, Object>>(); Map<String, Object> taskInfo = null; for (Runnable task : queue) { - JobInvoker jobInvoker = (JobInvoker) task; + Job job = (Job) task; taskInfo = new HashMap<String, Object>(); - taskInfo.put("id", jobInvoker.getJobId()); - taskInfo.put("name", jobInvoker.getJobName()); - taskInfo.put("serviceName", jobInvoker.getServiceName()); - taskInfo.put("time", jobInvoker.getTime()); - taskInfo.put("runtime", jobInvoker.getCurrentRuntime()); + taskInfo.put("id", job.getJobId()); + taskInfo.put("name", job.getJobName()); + String serviceName = ""; + if (job instanceof GenericServiceJob) { + serviceName = ((GenericServiceJob) job).getServiceName(); + } + taskInfo.put("serviceName", serviceName); + taskInfo.put("time", job.getStartTime()); + taskInfo.put("runtime", job.getRuntime()); taskList.add(taskInfo); } poolState.put("taskList", taskList); @@ -203,7 +207,7 @@ public final class JobPoller { public void queueNow(Job job) throws InvalidJobException { job.queue(); try { - executor.execute(new JobInvoker(job)); + executor.execute(job); } catch (Exception e) { job.deQueue(); } Modified: ofbiz/trunk/framework/service/src/org/ofbiz/service/job/PersistedServiceJob.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/service/src/org/ofbiz/service/job/PersistedServiceJob.java?rev=1374618&r1=1374617&r2=1374618&view=diff ============================================================================== --- ofbiz/trunk/framework/service/src/org/ofbiz/service/job/PersistedServiceJob.java (original) +++ ofbiz/trunk/framework/service/src/org/ofbiz/service/job/PersistedServiceJob.java Sat Aug 18 17:43:03 2012 @@ -67,6 +67,7 @@ public class PersistedServiceJob extends private final long maxRetry; private final long currentRetryCount; private final GenericValue jobValue; + private final long startTime; /** * Creates a new PersistedServiceJob @@ -79,7 +80,7 @@ public class PersistedServiceJob extends this.delegator = dctx.getDelegator(); this.jobValue = jobValue; Timestamp storedDate = jobValue.getTimestamp("runTime"); - this.runtime = storedDate.getTime(); + this.startTime = storedDate.getTime(); this.maxRetry = jobValue.get("maxRetry") != null ? jobValue.getLong("maxRetry").longValue() : -1; Long retryCount = jobValue.getLong("currentRetryCount"); if (retryCount != null) { @@ -189,7 +190,7 @@ public class PersistedServiceJob extends private void createRecurrence(long next, boolean isRetryOnFailure) throws GenericEntityException { if (Debug.verboseOn()) Debug.logVerbose("Next runtime returned: " + next, module); - if (next > runtime) { + if (next > startTime) { String pJobId = jobValue.getString("parentJobId"); if (pJobId == null) { pJobId = jobValue.getString("jobId"); @@ -267,7 +268,7 @@ public class PersistedServiceJob extends } @Override - protected String getServiceName() throws InvalidJobException { + protected String getServiceName() { if (jobValue == null || jobValue.get("serviceName") == null) { return null; } Modified: ofbiz/trunk/framework/service/src/org/ofbiz/service/job/PurgeJob.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/service/src/org/ofbiz/service/job/PurgeJob.java?rev=1374618&r1=1374617&r2=1374618&view=diff ============================================================================== --- ofbiz/trunk/framework/service/src/org/ofbiz/service/job/PurgeJob.java (original) +++ ofbiz/trunk/framework/service/src/org/ofbiz/service/job/PurgeJob.java Sat Aug 18 17:43:03 2012 @@ -72,11 +72,6 @@ public class PurgeJob extends AbstractJo } @Override - public long getRuntime() { - return System.currentTimeMillis(); - } - - @Override public boolean isValid() { return currentState == State.CREATED; } |
| Free forum by Nabble | Edit this page |
