[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