[jbpm-commits] JBoss JBPM SVN: r4858 - in jbpm4/trunk/modules: examples/src/test/java/org/jbpm/examples/async/activity and 7 other directories.

do-not-reply at jboss.org do-not-reply at jboss.org
Wed May 20 08:37:04 EDT 2009


Author: tom.baeyens at jboss.com
Date: 2009-05-20 08:37:04 -0400 (Wed, 20 May 2009)
New Revision: 4858

Added:
   jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/Continuation.java
Modified:
   jbpm4/trunk/modules/api/src/main/java/org/jbpm/api/model/Activity.java
   jbpm4/trunk/modules/examples/src/test/java/org/jbpm/examples/async/activity/Application.java
   jbpm4/trunk/modules/examples/src/test/resources/org/jbpm/examples/async/activity/process.jpdl.xml
   jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/xml/JpdlParser.java
   jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/builder/ActivityBuilder.java
   jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/ActivityImpl.java
   jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/EventImpl.java
   jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/EventListenerReference.java
   jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/ExecutionImpl.java
   jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/ExecuteActivity.java
   jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/async/AsyncBasicsTest.java
   jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/mgmt/JobQueryTest.java
Log:
JBPM-2256 adding async continuations

Modified: jbpm4/trunk/modules/api/src/main/java/org/jbpm/api/model/Activity.java
===================================================================
--- jbpm4/trunk/modules/api/src/main/java/org/jbpm/api/model/Activity.java	2009-05-20 09:35:25 UTC (rev 4857)
+++ jbpm4/trunk/modules/api/src/main/java/org/jbpm/api/model/Activity.java	2009-05-20 12:37:04 UTC (rev 4858)
@@ -109,10 +109,6 @@
    * to the parent activities.  It doesn't take into account the process definition. */ 
   Activity getParentActivity();
 
-  /** indicates if this activity should be executed 
-   * <a href="package-summary.html#asynchronouscontinuations">asynchronously</a>. */
-  boolean isAsync();
-
   /** the type of this activity which corresponds to the xml tag */
   String getType();
 }
\ No newline at end of file

Modified: jbpm4/trunk/modules/examples/src/test/java/org/jbpm/examples/async/activity/Application.java
===================================================================
--- jbpm4/trunk/modules/examples/src/test/java/org/jbpm/examples/async/activity/Application.java	2009-05-20 09:35:25 UTC (rev 4857)
+++ jbpm4/trunk/modules/examples/src/test/java/org/jbpm/examples/async/activity/Application.java	2009-05-20 12:37:04 UTC (rev 4858)
@@ -27,4 +27,12 @@
  */
 public class Application {
 
+  public void generatePdf() {
+  }
+
+  public void calculatePrimes() {
+  }
+  
+  public void runTestSuite() {
+  }
 }

Modified: jbpm4/trunk/modules/examples/src/test/resources/org/jbpm/examples/async/activity/process.jpdl.xml
===================================================================
--- jbpm4/trunk/modules/examples/src/test/resources/org/jbpm/examples/async/activity/process.jpdl.xml	2009-05-20 09:35:25 UTC (rev 4857)
+++ jbpm4/trunk/modules/examples/src/test/resources/org/jbpm/examples/async/activity/process.jpdl.xml	2009-05-20 12:37:04 UTC (rev 4858)
@@ -9,21 +9,21 @@
 	<java name="generate pdf" 
 	      class="org.jbpm.examples.async.activity.Application"
 		    method="generatePdf"
-		    async="true">
+		    continue="async">
 		<transition to="calculate primes" />
 	</java>
 
 	<java name="calculate primes" 
 	      class="org.jbpm.examples.async.activity.Application"
 		    method="calculatePrimes"
-        async="true">
+        continue="async">
 		<transition to="run test suite" />
 	</java>
 
 	<java name="run test suite" 
 	      class="org.jbpm.examples.async.activity.Application"
 		    method="runTestSuite"
-        async="true">
+        continue="async">
 		<transition to="end" />
 	</java>
 

Modified: jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/xml/JpdlParser.java
===================================================================
--- jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/xml/JpdlParser.java	2009-05-20 09:35:25 UTC (rev 4857)
+++ jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/xml/JpdlParser.java	2009-05-20 12:37:04 UTC (rev 4858)
@@ -41,6 +41,7 @@
 import org.jbpm.pvm.internal.model.ActivityCoordinatesImpl;
 import org.jbpm.pvm.internal.model.ActivityImpl;
 import org.jbpm.pvm.internal.model.CompositeElementImpl;
+import org.jbpm.pvm.internal.model.Continuation;
 import org.jbpm.pvm.internal.model.EventImpl;
 import org.jbpm.pvm.internal.model.EventListenerReference;
 import org.jbpm.pvm.internal.model.ObservableElementImpl;
@@ -238,8 +239,11 @@
             activityBinding.parseName(nestedElement, activity, parse);
             parseTransitions(nestedElement, activity, parse);
 
-            if (XmlUtil.attributeBoolean(nestedElement, "async", false, parse, Boolean.FALSE)) {
-              activity.setAsync(true);
+            String continuationText = XmlUtil.attribute(nestedElement, "continue");
+            if ("async".equals(continuationText)) {
+              activity.setContinuation(Continuation.ASYNCHRONOUS);
+            } else if ("exclusive".equals(continuationText)) {
+              activity.setContinuation(Continuation.EXCLUSIVE);
             }
 
             ActivityBehaviour activityBehaviour = (ActivityBehaviour) activityBinding.parse(nestedElement, parse, this);
@@ -331,8 +335,11 @@
         event = scopeElement.createEvent(eventName);
       }
       
-      if (XmlUtil.attributeBoolean(element, "async", false, parse, Boolean.FALSE)) {
-        event.setAsync(true);
+      String continuationText = XmlUtil.attribute(element, "continue");
+      if ("async".equals(continuationText)) {
+        event.setContinuation(Continuation.ASYNCHRONOUS);
+      } else if ("exclusive".equals(continuationText)) {
+        event.setContinuation(Continuation.EXCLUSIVE);
       }
 
       for (Element eventListenerElement: XmlUtil.elements(element)) {
@@ -341,8 +348,11 @@
           EventListener eventListener = (EventListener) eventBinding.parse(eventListenerElement, parse, this);
           EventListenerReference eventListenerReference = event.createEventListenerReference(eventListener);
           
-          if (XmlUtil.attributeBoolean(eventListenerElement, "async", false, parse, Boolean.FALSE)) {
-            eventListenerReference.setAsync(true);
+          continuationText = XmlUtil.attribute(eventListenerElement, "continue");
+          if ("async".equals(continuationText)) {
+            eventListenerReference.setContinuation(Continuation.ASYNCHRONOUS);
+          } else if ("exclusive".equals(continuationText)) {
+            eventListenerReference.setContinuation(Continuation.EXCLUSIVE);
           }
 
         } else {

Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/builder/ActivityBuilder.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/builder/ActivityBuilder.java	2009-05-20 09:35:25 UTC (rev 4857)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/builder/ActivityBuilder.java	2009-05-20 12:37:04 UTC (rev 4858)
@@ -24,6 +24,7 @@
 import java.lang.reflect.Constructor;
 
 import org.jbpm.pvm.internal.model.ActivityImpl;
+import org.jbpm.pvm.internal.model.Continuation;
 import org.jbpm.pvm.internal.model.ProcessDefinitionImpl;
 
 /**
@@ -97,7 +98,7 @@
   }
 
   public ActivityBuilder asyncExecute() {
-    activity.setAsync(true);
+    activity.setContinuation(Continuation.ASYNCHRONOUS);
     return this;
   }
 

Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/ActivityImpl.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/ActivityImpl.java	2009-05-20 09:35:25 UTC (rev 4857)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/ActivityImpl.java	2009-05-20 12:37:04 UTC (rev 4858)
@@ -46,7 +46,7 @@
   protected ActivityImpl parentActivity;
 
   protected String type;
-  protected boolean isAsync;
+  protected Continuation continuation = Continuation.SYNCHRONOUS;
 
   protected ActivityCoordinatesImpl coordinates;
   
@@ -395,6 +395,10 @@
     return chain;
   }
 
+  public boolean isAsync() {
+    return ! (continuation==Continuation.SYNCHRONOUS);
+  }
+
   // getters and setters //////////////////////////////////////////////////////
   
   public ObservableElementImpl getParent() {
@@ -419,12 +423,6 @@
   public void setParentActivity(ActivityImpl parentActivity) {
     this.parentActivity = parentActivity;
   }
-  public boolean isAsync() {
-    return isAsync;
-  }
-  public void setAsync(boolean isExecutionAsync) {
-    this.isAsync = isExecutionAsync;
-  }
   public String getType() {
     return type;
   }
@@ -437,4 +435,10 @@
   public void setCoordinates(ActivityCoordinatesImpl coordinates) {
     this.coordinates = coordinates;
   }
+  public Continuation getContinuation() {
+    return continuation;
+  }
+  public void setContinuation(Continuation continuation) {
+    this.continuation = continuation;
+  }
 }

Added: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/Continuation.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/Continuation.java	                        (rev 0)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/Continuation.java	2009-05-20 12:37:04 UTC (rev 4858)
@@ -0,0 +1,35 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jbpm.pvm.internal.model;
+
+
+/**
+ * @author Tom Baeyens
+ */
+public enum Continuation {
+
+  SYNCHRONOUS,
+  
+  ASYNCHRONOUS,
+  
+  EXCLUSIVE
+}


Property changes on: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/Continuation.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/EventImpl.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/EventImpl.java	2009-05-20 09:35:25 UTC (rev 4857)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/EventImpl.java	2009-05-20 12:37:04 UTC (rev 4858)
@@ -38,7 +38,7 @@
 
   protected String name;
   protected List<EventListenerReference> listenerReferences;
-  protected boolean isAsync;
+  protected Continuation continuation = Continuation.SYNCHRONOUS;
 
   public String toString() {
     return (name != null ? "event(" + name + ")" : "event");
@@ -73,6 +73,10 @@
     return eventListenerReference;
   }
 
+  public boolean isAsync() {
+    return ! (continuation==Continuation.SYNCHRONOUS);
+  }
+
   // getters and setters //////////////////////////////////////////////////////
 
   public long getDbid() {
@@ -90,10 +94,10 @@
   public void setListenerReferences(List<EventListenerReference> eventListenerReferences) {
     this.listenerReferences = eventListenerReferences;
   }
-  public boolean isAsync() {
-    return isAsync;
+  public Continuation getContinuation() {
+    return continuation;
   }
-  public void setAsync(boolean isAsync) {
-    this.isAsync = isAsync;
+  public void setContinuation(Continuation continuation) {
+    this.continuation = continuation;
   }
 }
\ No newline at end of file

Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/EventListenerReference.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/EventListenerReference.java	2009-05-20 09:35:25 UTC (rev 4857)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/EventListenerReference.java	2009-05-20 12:37:04 UTC (rev 4858)
@@ -31,8 +31,8 @@
   private static final long serialVersionUID = 1L;
 
   /** does this action accept propagated events ?  */
-  boolean isPropagationEnabled = false;
-  boolean isAsync = false;
+  protected boolean isPropagationEnabled = false;
+  protected Continuation continuation = Continuation.SYNCHRONOUS;
 
   /** does this action accept propagated events ?  Default is false. */
   public boolean isPropagationEnabled() {
@@ -45,10 +45,13 @@
   }
 
   public boolean isAsync() {
-    return isAsync;
+    return Continuation.SYNCHRONOUS!=continuation;
   }
 
-  public void setAsync(boolean isAsync) {
-    this.isAsync = isAsync;
+  public Continuation getContinuation() {
+    return continuation;
   }
+  public void setContinuation(Continuation continuation) {
+    this.continuation = continuation;
+  }
 }

Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/ExecutionImpl.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/ExecutionImpl.java	2009-05-20 09:35:25 UTC (rev 4857)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/ExecutionImpl.java	2009-05-20 12:37:04 UTC (rev 4858)
@@ -613,7 +613,7 @@
   }
 
   /** fires the given event without propagation */
-  void fire(EventImpl event, ObservableElement eventSource, ObservableElement observableElement) {
+  public void fire(EventImpl event, ObservableElement eventSource, ObservableElement observableElement) {
     List<EventListenerReference> eventListenerReferences = event.getListenerReferences();
     if (eventListenerReferences!=null) {
       for (EventListenerReference eventListenerReference: eventListenerReferences) {
@@ -626,7 +626,7 @@
       }
     }
   }
-  
+
   public void handleException(ObservableElementImpl observableElement,
                               EventImpl event,
                               EventListenerReference eventListenerReference,

Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/ExecuteActivity.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/ExecuteActivity.java	2009-05-20 09:35:25 UTC (rev 4857)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/model/op/ExecuteActivity.java	2009-05-20 12:37:04 UTC (rev 4858)
@@ -24,6 +24,7 @@
 import org.jbpm.api.activity.ActivityBehaviour;
 import org.jbpm.internal.log.Log;
 import org.jbpm.pvm.internal.job.MessageImpl;
+import org.jbpm.pvm.internal.model.Continuation;
 import org.jbpm.pvm.internal.model.ExecutionImpl;
 import org.jbpm.pvm.internal.model.ActivityImpl;
 import org.jbpm.pvm.internal.model.ExecutionImpl.Propagation;
@@ -70,6 +71,10 @@
   }
 
   public MessageImpl<?> createAsyncMessage(ExecutionImpl execution) {
-    return new ExecuteActivityMessage(execution);
+    ExecuteActivityMessage executeActivityMessage = new ExecuteActivityMessage(execution);
+    if (execution.getActivity().getContinuation()==Continuation.EXCLUSIVE) {
+      executeActivityMessage.setExclusive(true);
+    }
+    return executeActivityMessage;
   }
-}
\ No newline at end of file
+}

Modified: jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/async/AsyncBasicsTest.java
===================================================================
--- jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/async/AsyncBasicsTest.java	2009-05-20 09:35:25 UTC (rev 4857)
+++ jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/async/AsyncBasicsTest.java	2009-05-20 12:37:04 UTC (rev 4858)
@@ -55,10 +55,10 @@
       "  <start>" +
       "    <transition to='a' />" +
       "  </start>" +
-      "  <java name='a' async='true' class='"+Do.class.getName()+"' method='something'>" +
+      "  <java name='a' continue='async' class='"+Do.class.getName()+"' method='something'>" +
       "    <transition to='b' />" +
       "  </java>" +
-      "  <java name='b' async='true' class='"+Do.class.getName()+"' method='something'>" +
+      "  <java name='b' continue='async' class='"+Do.class.getName()+"' method='something'>" +
       "    <transition to='end' />" +
       "  </java>" +
       "  <end name='end' />" +
@@ -112,10 +112,10 @@
       "    <transition to='a' />" +
       "  </start>" +
       "  <java name='a' class='"+Do.class.getName()+"' method='something'>" +
-      "    <transition async='true' to='b' />" +
+      "    <transition continue='async' to='b' />" +
       "  </java>" +
       "  <java name='b' class='"+Do.class.getName()+"' method='something'>" +
-      "    <transition async='true' to='end' />" +
+      "    <transition continue='async' to='end' />" +
       "  </java>" +
       "  <end name='end' />" +
       "</process>"
@@ -165,7 +165,7 @@
       "  <start>" +
       "    <transition to='a' />" +
       "  </start>" +
-      "  <state name='a' async='true'>" +
+      "  <state name='a' continue='async'>" +
       "    <transition to='end' />" +
       "  </state>" +
       "  <end name='end' />" +

Modified: jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/mgmt/JobQueryTest.java
===================================================================
--- jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/mgmt/JobQueryTest.java	2009-05-20 09:35:25 UTC (rev 4857)
+++ jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/mgmt/JobQueryTest.java	2009-05-20 12:37:04 UTC (rev 4858)
@@ -40,7 +40,7 @@
       "  <start>" +
       "    <transition to='t' />" +
       "  </start>" +
-      "  <state name='t' async='true' />" +
+      "  <state name='t' continue='async' />" +
       "</process>"
     );
 
@@ -69,7 +69,7 @@
       "    <transition to='t' />" +
       "  </start>" +
       "  <java name='t' " +
-      "        async='true' " +
+      "        continue='async' " +
       "        class='"+Dog.class.getName()+"'" +
       "        method='bark'>" +
       "  </java>" +




More information about the jbpm-commits mailing list