[jboss-svn-commits] JBL Code SVN: r18426 - in labs/jbossesb/branches/JBESB_4_2_1_GA_CP/product: services/jbpm/src/main/java/org/jboss/soa/esb/services/jbpm/actionhandlers and 2 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Fri Feb 8 15:06:19 EST 2008


Author: kevin.conner at jboss.com
Date: 2008-02-08 15:06:19 -0500 (Fri, 08 Feb 2008)
New Revision: 18426

Modified:
   labs/jbossesb/branches/JBESB_4_2_1_GA_CP/product/lib/ext/h2.jar
   labs/jbossesb/branches/JBESB_4_2_1_GA_CP/product/services/jbpm/src/main/java/org/jboss/soa/esb/services/jbpm/actionhandlers/EsbActionHandler.java
   labs/jbossesb/branches/JBESB_4_2_1_GA_CP/product/services/jbpm/src/main/java/org/jboss/soa/esb/services/jbpm/cmd/AsyncProcessSignal.java
   labs/jbossesb/branches/JBESB_4_2_1_GA_CP/product/services/jbpm/src/main/java/org/jboss/soa/esb/services/jbpm/cmd/CallbackCommand.java
   labs/jbossesb/branches/JBESB_4_2_1_GA_CP/product/services/jbpm/src/main/java/org/jboss/soa/esb/services/jbpm/cmd/CommandExecutor.java
   labs/jbossesb/branches/JBESB_4_2_1_GA_CP/product/services/jbpm/src/main/resources/jbpm-ds.xml
Log:
Defer setting of jBPM variables until in async job: JBESB-1544

Modified: labs/jbossesb/branches/JBESB_4_2_1_GA_CP/product/lib/ext/h2.jar
===================================================================
(Binary files differ)

Modified: labs/jbossesb/branches/JBESB_4_2_1_GA_CP/product/services/jbpm/src/main/java/org/jboss/soa/esb/services/jbpm/actionhandlers/EsbActionHandler.java
===================================================================
--- labs/jbossesb/branches/JBESB_4_2_1_GA_CP/product/services/jbpm/src/main/java/org/jboss/soa/esb/services/jbpm/actionhandlers/EsbActionHandler.java	2008-02-08 19:44:14 UTC (rev 18425)
+++ labs/jbossesb/branches/JBESB_4_2_1_GA_CP/product/services/jbpm/src/main/java/org/jboss/soa/esb/services/jbpm/actionhandlers/EsbActionHandler.java	2008-02-08 20:06:19 UTC (rev 18426)
@@ -36,6 +36,7 @@
 import org.jboss.soa.esb.services.jbpm.actions.JBpmCallback;
 import org.jbpm.graph.def.ActionHandler;
 import org.jbpm.graph.exe.ExecutionContext;
+import org.jbpm.graph.exe.Token;
 /**
  * 
  * Send messages to ESB services from jBPM applications, and leaves the node
@@ -146,7 +147,8 @@
         if (globalProcessScope!=null) {
             portReference.addExtension(Constants.PROCESS_SCOPE_ATTR, globalProcessScope.toString());
         }
-        final long tokenId = executionContext.getToken().getId();
+        final Token token = executionContext.getToken() ;
+        final long tokenId = token.getId();
         portReference.addExtension(Constants.TOKEN_ID, String.valueOf(tokenId));
         String nodeId = "";
         if (executionContext.getNode()!=null) {
@@ -164,7 +166,7 @@
             counter = 0l;
         }
         //Adding to the jBPM variableMap
-        executionContext.setVariable(counterName, counter.toString());
+        executionContext.getContextInstance().setVariableLocally(counterName, counter.toString(), token);
         //Adding same value to the message
         portReference.addExtension(counterName, counter.toString());
         return replyTo;

Modified: labs/jbossesb/branches/JBESB_4_2_1_GA_CP/product/services/jbpm/src/main/java/org/jboss/soa/esb/services/jbpm/cmd/AsyncProcessSignal.java
===================================================================
--- labs/jbossesb/branches/JBESB_4_2_1_GA_CP/product/services/jbpm/src/main/java/org/jboss/soa/esb/services/jbpm/cmd/AsyncProcessSignal.java	2008-02-08 19:44:14 UTC (rev 18425)
+++ labs/jbossesb/branches/JBESB_4_2_1_GA_CP/product/services/jbpm/src/main/java/org/jboss/soa/esb/services/jbpm/cmd/AsyncProcessSignal.java	2008-02-08 20:06:19 UTC (rev 18426)
@@ -22,6 +22,8 @@
 package org.jboss.soa.esb.services.jbpm.cmd;
 
 import java.util.Date;
+import java.util.Iterator;
+import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 
 import javax.transaction.Synchronization;
@@ -74,6 +76,14 @@
      */
     private static final String ESB_ASYNC_SIGNAL_ACTOR_VARIABLE_NAME = ESB_ASYNC_SIGNAL_VARIABLE_NAME + "ACTOR_" ;
     /**
+     * The name of the ESB asynchronous signal variable count.
+     */
+    private static final String ESB_ASYNC_SIGNAL_VARIABLE_COUNT = ESB_ASYNC_SIGNAL_VARIABLE_NAME + "COUNT_" ;
+    /**
+     * The name of the ESB asynchronous signal variable names.
+     */
+    private static final String ESB_ASYNC_SIGNAL_VARIABLE_NAMES = ESB_ASYNC_SIGNAL_VARIABLE_NAME + "NAME_" ;
+    /**
      * Map of active synchronisations.
      */
     private static final ConcurrentHashMap<Transaction, Synchronization> SYNCHRONISATIONS = new ConcurrentHashMap<Transaction, Synchronization>() ;
@@ -83,8 +93,9 @@
      * @param token The token to signal.
      * @param transitionName The transition to signal or null if the default transition is to be used.
      * @param actor The actor to use.
+     * @param variables Any variables to update.
      */
-    static void createSignalJob(final JbpmContext jbpmContext, final Token token, final String transitionName, final String actor)
+    static void createSignalJob(final JbpmContext jbpmContext, final Token token, final String transitionName, final String actor, final Map variables)
     {
         final boolean isDebugEnabled = logger.isDebugEnabled() ;
         final long tokenId = token.getId() ;
@@ -98,10 +109,26 @@
         }
         token.lock(ESB_ASYNC_SIGNAL_ACTION_NAME);
         
-        final String transitionVariableName = ESB_ASYNC_SIGNAL_TRANSITION_VARIABLE_NAME + tokenId ;
+        final String transitionVariableName = ESB_ASYNC_SIGNAL_TRANSITION_VARIABLE_NAME ;
         setVariable(contextInstance, token, transitionVariableName, transitionName) ;
-        final String actorVariableName = ESB_ASYNC_SIGNAL_ACTOR_VARIABLE_NAME + tokenId ;
+        final String actorVariableName = ESB_ASYNC_SIGNAL_ACTOR_VARIABLE_NAME ;
         setVariable(contextInstance, token, actorVariableName, actor) ;
+        
+        final int numVariables = (variables == null ? 0 : variables.size()) ;
+        setVariable(contextInstance, token, ESB_ASYNC_SIGNAL_VARIABLE_COUNT, Integer.toString(numVariables)) ;
+        if (numVariables > 0)
+        {
+            int count = 0 ;
+            final Iterator<Map.Entry> variableEntryIter = variables.entrySet().iterator() ;
+            do
+            {
+                final Map.Entry variableEntry = variableEntryIter.next() ;
+                final String name = variableEntry.getKey().toString() ;
+                setVariable(contextInstance, token, name, variableEntry.getValue()) ;
+                setVariable(contextInstance, token, ESB_ASYNC_SIGNAL_VARIABLE_NAMES + (count++), name) ;
+            } while (variableEntryIter.hasNext()) ;
+        }
+        
         final ExecuteActionJob signalJob = new ExecuteActionJob(token) ;
         signalJob.setAction(getAsyncSignalAction(token)) ;
         signalJob.setDueDate(new Date()) ;
@@ -148,7 +175,7 @@
      * @param name The variable name
      * @param value The variable value
      */
-    private static void setVariable(final ContextInstance contextInstance, final Token token, final String name, final String value)
+    private static void setVariable(final ContextInstance contextInstance, final Token token, final String name, final Object value)
     {
         if (value != null)
         {
@@ -237,10 +264,19 @@
             }
             final ProcessInstance processInstance = token.getProcessInstance() ;
             final ContextInstance contextInstance = processInstance.getContextInstance() ;
-            final String transitionName = (String)contextInstance.getVariable(ESB_ASYNC_SIGNAL_TRANSITION_VARIABLE_NAME + tokenId) ;
-            final String actor = (String)contextInstance.getVariable(ESB_ASYNC_SIGNAL_ACTOR_VARIABLE_NAME + tokenId) ;
+            final String transitionName = (String)contextInstance.getVariableLocally(ESB_ASYNC_SIGNAL_TRANSITION_VARIABLE_NAME, token) ;
+            final String actor = (String)contextInstance.getVariableLocally(ESB_ASYNC_SIGNAL_ACTOR_VARIABLE_NAME, token) ;
             final JbpmContext jbpmContext = executionContext.getJbpmContext() ;
             final String origActor = jbpmContext.getActorId() ;
+            
+            final int variableCount = Integer.parseInt((String)contextInstance.getVariableLocally(ESB_ASYNC_SIGNAL_VARIABLE_COUNT, token)) ;
+            for(int count = 0 ; count < variableCount ; count++)
+            {
+                final String name = (String)contextInstance.getVariableLocally(ESB_ASYNC_SIGNAL_VARIABLE_NAMES + count, token) ;
+                final Object value = contextInstance.getVariableLocally(name, token) ;
+                contextInstance.setVariable(name, value) ;
+            }
+            
             try
             {
                 if (actor != null)

Modified: labs/jbossesb/branches/JBESB_4_2_1_GA_CP/product/services/jbpm/src/main/java/org/jboss/soa/esb/services/jbpm/cmd/CallbackCommand.java
===================================================================
--- labs/jbossesb/branches/JBESB_4_2_1_GA_CP/product/services/jbpm/src/main/java/org/jboss/soa/esb/services/jbpm/cmd/CallbackCommand.java	2008-02-08 19:44:14 UTC (rev 18425)
+++ labs/jbossesb/branches/JBESB_4_2_1_GA_CP/product/services/jbpm/src/main/java/org/jboss/soa/esb/services/jbpm/cmd/CallbackCommand.java	2008-02-08 20:06:19 UTC (rev 18426)
@@ -111,21 +111,14 @@
             
             final ContextInstance contextInstance = instance.getContextInstance() ;
             final long currentProcessNodeVersion = Long.parseLong(String.valueOf(
-                    contextInstance.getVariable(counterName)));
+                    contextInstance.getVariableLocally(counterName, token)));
             if (isDebugEnabled) logger.debug("ProcessNodeVersion=" + currentProcessNodeVersion);
             if (processNodeVersion!=currentProcessNodeVersion) {
                 throw new CallbackException("The current processNodeVersion (id=" + currentProcessNodeVersion +
                         ") is not the expected version (version=" + processNodeVersion + ").");
             }
             
-            if (variables != null && variables.size() > 0) {
-                if (isDebugEnabled) {
-                    logger.debug("Initialising variables for token id " + tokenId + " from process instance " + processInstanceId) ;
-                }
-                contextInstance.addVariables(variables);
-            }
-            
-            AsyncProcessSignal.createSignalJob(jbpmContext, token, transitionName, jbpmContext.getActorId()) ;
+            AsyncProcessSignal.createSignalJob(jbpmContext, token, transitionName, jbpmContext.getActorId(), variables) ;
         } catch (CallbackException jbpmCe) {
             logger.warn(jbpmCe.getMessage());
         }

Modified: labs/jbossesb/branches/JBESB_4_2_1_GA_CP/product/services/jbpm/src/main/java/org/jboss/soa/esb/services/jbpm/cmd/CommandExecutor.java
===================================================================
--- labs/jbossesb/branches/JBESB_4_2_1_GA_CP/product/services/jbpm/src/main/java/org/jboss/soa/esb/services/jbpm/cmd/CommandExecutor.java	2008-02-08 19:44:14 UTC (rev 18425)
+++ labs/jbossesb/branches/JBESB_4_2_1_GA_CP/product/services/jbpm/src/main/java/org/jboss/soa/esb/services/jbpm/cmd/CommandExecutor.java	2008-02-08 20:06:19 UTC (rev 18426)
@@ -277,7 +277,7 @@
             if (result instanceof ProcessInstance)
             {
                 final ProcessInstance processInstance = (ProcessInstance)result ;
-                AsyncProcessSignal.createSignalJob(jbpmContext, processInstance.getRootToken(), transitionName, getActorId()) ;
+                AsyncProcessSignal.createSignalJob(jbpmContext, processInstance.getRootToken(), transitionName, getActorId(), null) ;
             }
             return result ;
         }

Modified: labs/jbossesb/branches/JBESB_4_2_1_GA_CP/product/services/jbpm/src/main/resources/jbpm-ds.xml
===================================================================
--- labs/jbossesb/branches/JBESB_4_2_1_GA_CP/product/services/jbpm/src/main/resources/jbpm-ds.xml	2008-02-08 19:44:14 UTC (rev 18425)
+++ labs/jbossesb/branches/JBESB_4_2_1_GA_CP/product/services/jbpm/src/main/resources/jbpm-ds.xml	2008-02-08 20:06:19 UTC (rev 18426)
@@ -6,7 +6,7 @@
          <xa-datasource-class>org.h2.jdbcx.JdbcDataSource</xa-datasource-class>
          <track-connection-by-tx/>
          <transaction-isolation>TRANSACTION_READ_COMMITTED</transaction-isolation>
-         <xa-datasource-property name="URL">jdbc:h2:${jboss.server.data.dir}${/}h2${/}jbpmDB</xa-datasource-property>
+         <xa-datasource-property name="URL">jdbc:h2:${jboss.server.data.dir}${/}h2${/}jbpmDB;MVCC=TRUE</xa-datasource-property>
          <xa-datasource-property name="User">sa</xa-datasource-property>
          <xa-datasource-property name="Password"></xa-datasource-property>
          <min-pool-size>5</min-pool-size>




More information about the jboss-svn-commits mailing list