You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ode.apache.org by rr...@apache.org on 2010/05/23 22:20:57 UTC

svn commit: r947487 - in /ode/branches/APACHE_ODE_1.3.4.X: bpel-api/src/main/java/org/apache/ode/bpel/iapi/ bpel-runtime/src/main/java/org/apache/ode/bpel/engine/

Author: rr
Date: Sun May 23 20:20:56 2010
New Revision: 947487

URL: http://svn.apache.org/viewvc?rev=947487&view=rev
Log:
Acquire instance lock for INVOKE_INTERNAL

Modified:
    ode/branches/APACHE_ODE_1.3.4.X/bpel-api/src/main/java/org/apache/ode/bpel/iapi/Scheduler.java
    ode/branches/APACHE_ODE_1.3.4.X/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelEngineImpl.java
    ode/branches/APACHE_ODE_1.3.4.X/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelProcess.java

Modified: ode/branches/APACHE_ODE_1.3.4.X/bpel-api/src/main/java/org/apache/ode/bpel/iapi/Scheduler.java
URL: http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.3.4.X/bpel-api/src/main/java/org/apache/ode/bpel/iapi/Scheduler.java?rev=947487&r1=947486&r2=947487&view=diff
==============================================================================
--- ode/branches/APACHE_ODE_1.3.4.X/bpel-api/src/main/java/org/apache/ode/bpel/iapi/Scheduler.java (original)
+++ ode/branches/APACHE_ODE_1.3.4.X/bpel-api/src/main/java/org/apache/ode/bpel/iapi/Scheduler.java Sun May 23 20:20:56 2010
@@ -295,7 +295,7 @@ public interface Scheduler {
      * processing.
      * @author mszefler
      */
-    public class JobProcessorException extends Exception {
+    public class JobProcessorException extends RuntimeException {
         private static final long serialVersionUID = 1L;
         public final boolean retry;
 

Modified: ode/branches/APACHE_ODE_1.3.4.X/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelEngineImpl.java
URL: http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.3.4.X/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelEngineImpl.java?rev=947487&r1=947486&r2=947487&view=diff
==============================================================================
--- ode/branches/APACHE_ODE_1.3.4.X/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelEngineImpl.java (original)
+++ ode/branches/APACHE_ODE_1.3.4.X/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelEngineImpl.java Sun May 23 20:20:56 2010
@@ -372,31 +372,36 @@ public class BpelEngineImpl implements B
         if (process == null) return null;
         return process.getOProcess();
     }
-
-    public void onScheduledJob(Scheduler.JobInfo jobInfo) throws Scheduler.JobProcessorException {
-        final JobDetails we = jobInfo.jobDetail;
-
-        if( __log.isTraceEnabled() ) __log.trace("[JOB] onScheduledJob " + jobInfo + "" + we.getInstanceId());
-        
+    
+    public void acquireInstanceLock(final Long iid) {
         // We lock the instance to prevent concurrent transactions and prevent unnecessary rollbacks,
         // Note that we don't want to wait too long here to get our lock, since we are likely holding
         // on to scheduler's locks of various sorts.
         try {
-            _instanceLockManager.lock(we.getInstanceId(), 1, TimeUnit.MICROSECONDS);
+            _instanceLockManager.lock(iid, 1, TimeUnit.MICROSECONDS);
             _contexts.scheduler.registerSynchronizer(new Scheduler.Synchronizer() {
                 public void afterCompletion(boolean success) {
-                    _instanceLockManager.unlock(we.getInstanceId());
+                    _instanceLockManager.unlock(iid);
                 }
                 public void beforeCompletion() { }
             });
         } catch (InterruptedException e) {
             // Retry later.
-            __log.debug("Thread interrupted, job will be rescheduled: " + jobInfo);
+            __log.debug("Thread interrupted, job will be rescheduled");
             throw new Scheduler.JobProcessorException(true);
         } catch (org.apache.ode.bpel.engine.InstanceLockManager.TimeoutException e) {
-            __log.debug("Instance " + we.getInstanceId() + " is busy, rescheduling job.");
+            __log.debug("Instance " + iid + " is busy, rescheduling job.");
             throw new Scheduler.JobProcessorException(true);
         }
+    }
+
+    public void onScheduledJob(Scheduler.JobInfo jobInfo) throws Scheduler.JobProcessorException {
+        final JobDetails we = jobInfo.jobDetail;
+
+        if( __log.isTraceEnabled() ) __log.trace("[JOB] onScheduledJob " + jobInfo + "" + we.getInstanceId());
+        
+        acquireInstanceLock(we.getInstanceId());
+        
         // DONT PUT CODE HERE-need this method real tight in a try/catch block, we need to handle
         // all types of failure here, the scheduler is not going to know how to handle our errors,
         // ALSO we have to release the lock obtained above (IMPORTANT), lest the whole system come
@@ -457,6 +462,8 @@ public class BpelEngineImpl implements B
             } finally {
                 Thread.currentThread().setContextClassLoader(cl);
             }
+        } catch (Scheduler.JobProcessorException e) {
+            throw e;
         } catch (BpelEngineException bee) {
             __log.error(__msgs.msgScheduledJobFailed(we), bee);
             throw new Scheduler.JobProcessorException(bee, checkRetry(we));

Modified: ode/branches/APACHE_ODE_1.3.4.X/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelProcess.java
URL: http://svn.apache.org/viewvc/ode/branches/APACHE_ODE_1.3.4.X/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelProcess.java?rev=947487&r1=947486&r2=947487&view=diff
==============================================================================
--- ode/branches/APACHE_ODE_1.3.4.X/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelProcess.java (original)
+++ ode/branches/APACHE_ODE_1.3.4.X/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelProcess.java Sun May 23 20:20:56 2010
@@ -284,6 +284,7 @@ public class BpelProcess {
                       return true;
                   } else if (routing.messageRoute != null) {
                       // Found a route, hitting it
+                      _engine.acquireInstanceLock(routing.messageRoute.getTargetInstance().getInstanceId());
                       target.invokeInstance(mex, routing);
                       return true;
                   }