[jboss-svn-commits] JBL Code SVN: r24780 - in labs/jbossesb/trunk/product/services/jbpm/src: main/java/org/jboss/soa/esb/services/jbpm/actionhandlers and 3 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Mon Jan 19 05:17:48 EST 2009
Author: beve
Date: 2009-01-19 05:17:48 -0500 (Mon, 19 Jan 2009)
New Revision: 24780
Added:
labs/jbossesb/trunk/product/services/jbpm/src/test/resources/relatesToFaultDefinition.xml
Modified:
labs/jbossesb/trunk/product/services/jbpm/src/main/java/org/jboss/soa/esb/services/jbpm/Constants.java
labs/jbossesb/trunk/product/services/jbpm/src/main/java/org/jboss/soa/esb/services/jbpm/actionhandlers/EsbActionHandler.java
labs/jbossesb/trunk/product/services/jbpm/src/main/java/org/jboss/soa/esb/services/jbpm/cmd/CommandExecutor.java
labs/jbossesb/trunk/product/services/jbpm/src/test/java/org/jboss/soa/esb/services/jbpm/actionhandlers/EsbActionHandlerUnitTest.java
Log:
Work for https://jira.jboss.org/jira/browse/JBESB-2228 "Replies/faults generated from within jBPM should initialise the relatesTo"
Modified: labs/jbossesb/trunk/product/services/jbpm/src/main/java/org/jboss/soa/esb/services/jbpm/Constants.java
===================================================================
--- labs/jbossesb/trunk/product/services/jbpm/src/main/java/org/jboss/soa/esb/services/jbpm/Constants.java 2009-01-19 09:04:16 UTC (rev 24779)
+++ labs/jbossesb/trunk/product/services/jbpm/src/main/java/org/jboss/soa/esb/services/jbpm/Constants.java 2009-01-19 10:17:48 UTC (rev 24780)
@@ -66,6 +66,7 @@
public static final String JBPM_LOG_MAP ="jbpmLogMap";
public static final String REPLY_TO ="jbpmReplyTo";
public static final String FAULT_TO ="jbpmFaultTo";
+ public static final String ESB_MESSAGE_ID ="jbpmEsbMessageId";
// Possible values of return codes after execution of an action
public static final String RETCODE_OK ="jbpmReturnOK";
Modified: labs/jbossesb/trunk/product/services/jbpm/src/main/java/org/jboss/soa/esb/services/jbpm/actionhandlers/EsbActionHandler.java
===================================================================
--- labs/jbossesb/trunk/product/services/jbpm/src/main/java/org/jboss/soa/esb/services/jbpm/actionhandlers/EsbActionHandler.java 2009-01-19 09:04:16 UTC (rev 24779)
+++ labs/jbossesb/trunk/product/services/jbpm/src/main/java/org/jboss/soa/esb/services/jbpm/actionhandlers/EsbActionHandler.java 2009-01-19 10:17:48 UTC (rev 24780)
@@ -21,6 +21,8 @@
*/
package org.jboss.soa.esb.services.jbpm.actionhandlers;
+import java.net.URI;
+
import org.apache.log4j.Logger;
import org.dom4j.tree.DefaultElement;
import org.jboss.internal.soa.esb.addressing.helpers.EPRHelper;
@@ -112,6 +114,15 @@
EPR faultTo = createFaultTo(esbToBpmVarsXml, globalProcessScope, executionContext);
message.getHeader().getCall().setFaultTo(faultTo);
}
+
+ // If relatesTo is not set then set it to the original ESB MessageId.
+ URI relatesTo = message.getHeader().getCall().getRelatesTo();
+ if (relatesTo == null)
+ {
+ final URI esbMessageId = (URI) executionContext.getContextInstance().getVariable(Constants.ESB_MESSAGE_ID);
+ message.getHeader().getCall().setRelatesTo(esbMessageId);
+ }
+
//Sending the message on its way
if (logger.isDebugEnabled()) logger.debug("Created ESB message=" + message);
Modified: labs/jbossesb/trunk/product/services/jbpm/src/main/java/org/jboss/soa/esb/services/jbpm/cmd/CommandExecutor.java
===================================================================
--- labs/jbossesb/trunk/product/services/jbpm/src/main/java/org/jboss/soa/esb/services/jbpm/cmd/CommandExecutor.java 2009-01-19 09:04:16 UTC (rev 24779)
+++ labs/jbossesb/trunk/product/services/jbpm/src/main/java/org/jboss/soa/esb/services/jbpm/cmd/CommandExecutor.java 2009-01-19 10:17:48 UTC (rev 24780)
@@ -172,21 +172,21 @@
perform(request,_start);
}
- private void perform(Message request, boolean start)
+ private void perform(Message esbMessage, boolean start)
{
ObjectMapper objectMapper = new ObjectMapper();
final NewProcessInstanceCommand command ;
if (start) {
- final String transition = MessageHelper.getStringValue(request, Constants.TRANSITION_NAME);
+ final String transition = MessageHelper.getStringValue(esbMessage, Constants.TRANSITION_NAME);
command = new AsyncStartProcessInstanceCommand(transition);
} else {
command = new NewProcessInstanceCommand();
}
- Long processDefId = MessageHelper.getLongValue(request,Constants.PROCESS_DEFINITION_ID);
+ Long processDefId = MessageHelper.getLongValue(esbMessage,Constants.PROCESS_DEFINITION_ID);
if (null!=processDefId) {
command.setProcessId(processDefId);
} else {
- String processName = MessageHelper.getStringValue(request,Constants.PROCESS_DEFINITION_NAME);
+ String processName = MessageHelper.getStringValue(esbMessage,Constants.PROCESS_DEFINITION_NAME);
if (null!=processName) {
command.setProcessName(processName);
} else {
@@ -194,25 +194,30 @@
+" or "+Constants.PROCESS_DEFINITION_ID+" must have a valid value");
}
}
- String keyPath = MessageHelper.getStringValue(request, Constants.KEYPATH);
+ String keyPath = MessageHelper.getStringValue(esbMessage, Constants.KEYPATH);
if (keyPath!=null) {
try {
- String key = String.valueOf(objectMapper.getObjectFromMessage(request, keyPath));
+ String key = String.valueOf(objectMapper.getObjectFromMessage(esbMessage, keyPath));
command.setKey(key);
} catch (ObjectMappingException e) {
logger.error("Could not locate key " + e.getMessage(), e);
}
}
- String actorId=MessageHelper.getStringValue(request, Constants.ACTOR_ID);
+ String actorId=MessageHelper.getStringValue(esbMessage, Constants.ACTOR_ID);
if (null!=actorId) command.setActorId(actorId);
- Boolean createStartTask = MessageHelper.getBooleanValue(request, Constants.CREATE_START_TASK);
+ Boolean createStartTask = MessageHelper.getBooleanValue(esbMessage, Constants.CREATE_START_TASK);
if (null!=createStartTask) command.setCreateStartTask(createStartTask);
- Map<String, Object> variables = MessageHelper.getVariablesMap(request, Constants.VARIABLE_VALUES);
+ Map<String, Object> defaultVariables = new HashMap<String, Object>();
- final String replyTo = MessageHelper.getStringValue(request, Constants.REPLY_TO) ;
- final String faultTo = MessageHelper.getStringValue(request, Constants.FAULT_TO) ;
+ // Always add the Esb message id as a jbpm varialbe.
+ defaultVariables.put(Constants.ESB_MESSAGE_ID, esbMessage.getHeader().getCall().getMessageID());
+ Map<String, Object> variables = MessageHelper.getVariablesMap(esbMessage, Constants.VARIABLE_VALUES);
+
+ final String replyTo = MessageHelper.getStringValue(esbMessage, Constants.REPLY_TO) ;
+ final String faultTo = MessageHelper.getStringValue(esbMessage, Constants.FAULT_TO) ;
+
if ((replyTo != null) || (faultTo != null)) {
final Map<String, Object> newVariables = (variables == null ? new HashMap<String, Object>() : new HashMap<String, Object>(variables)) ;
if (replyTo != null) {
@@ -223,7 +228,12 @@
}
variables = newVariables ;
}
- if (null!=variables) command.setVariables(variables);
+ if (null!=variables)
+ {
+ defaultVariables.putAll(variables);
+
+ }
+ command.setVariables(defaultVariables);
logger.debug("New process instance with command=" + command);
executeJbpmCommand(command);
Modified: labs/jbossesb/trunk/product/services/jbpm/src/test/java/org/jboss/soa/esb/services/jbpm/actionhandlers/EsbActionHandlerUnitTest.java
===================================================================
--- labs/jbossesb/trunk/product/services/jbpm/src/test/java/org/jboss/soa/esb/services/jbpm/actionhandlers/EsbActionHandlerUnitTest.java 2009-01-19 09:04:16 UTC (rev 24779)
+++ labs/jbossesb/trunk/product/services/jbpm/src/test/java/org/jboss/soa/esb/services/jbpm/actionhandlers/EsbActionHandlerUnitTest.java 2009-01-19 10:17:48 UTC (rev 24780)
@@ -22,17 +22,19 @@
package org.jboss.soa.esb.services.jbpm.actionhandlers;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import java.net.URI;
import junit.framework.JUnit4TestAdapter;
-import org.apache.log4j.Logger;
import org.jboss.internal.soa.esb.couriers.MockCourier;
import org.jboss.internal.soa.esb.couriers.MockCourierFactory;
import org.jboss.internal.soa.esb.services.registry.MockRegistry;
import org.jboss.soa.esb.addressing.EPR;
+import org.jboss.soa.esb.services.jbpm.Constants;
import org.jbpm.graph.def.ProcessDefinition;
import org.jbpm.graph.exe.ProcessInstance;
import org.jbpm.graph.exe.Token;
@@ -41,10 +43,6 @@
public class EsbActionHandlerUnitTest
{
-
- private static Class thisClass = EsbActionHandlerUnitTest.class;
- static Logger _logger = Logger.getLogger(thisClass);
-
private static EPR epr1;
private static MockCourier courier1;
private static String MOCK_CATEGORY="MockCategory";
@@ -64,15 +62,13 @@
public void testSimpleProcess() throws Exception
{
// Extract a process definition from the processdefinition.xml file.
- ProcessDefinition processDefinition
- = ProcessDefinition.parseXmlResource("testMappingDefinition.xml");
- assertTrue("Definition should not be null", null!=processDefinition);
+ ProcessDefinition processDefinition = ProcessDefinition.parseXmlResource("testMappingDefinition.xml");
+
+ assertNotNull(processDefinition);
// Create an instance of the process definition.
ProcessInstance instance = new ProcessInstance(processDefinition);
- assertTrue(
- "Instance is in start state",
- instance.getRootToken().getNode().getName().equals("start"));
+ assertEquals("start", instance.getRootToken().getNode().getName());
String varVal = "HELLO world";
String second = "Second Hello";
@@ -87,20 +83,42 @@
instance.signal();
//the node is now in a wait state in the "first" state
- assertTrue(
- "Instance is in first state",
- instance.getRootToken().getNode().getName().equals("first"));
+ assertEquals("first", instance.getRootToken().getNode().getName());
instance.signal();
- assertTrue(
- "Instance is in end state",
- instance.getRootToken().getNode().getName().equals("end"));
- assertTrue("Instance has ended", instance.hasEnded());
+ assertEquals("end", instance.getRootToken().getNode().getName());
+ assertTrue(instance.hasEnded());
}
+ /**
+ * Test for Jira:
+ * https://jira.jboss.org/jira/browse/JBESB-2228 "Replies/faults generated from within jBPM should initialise the relatesTo"
+ */
+ @Test
+ public void wasRelatesToSetAfterJbpmFault() throws Exception
+ {
+ ProcessDefinition processDefinition = ProcessDefinition.parseXmlResource("relatesToFaultDefinition.xml");
+ ProcessInstance instance = new ProcessInstance(processDefinition);
+
+ /*
+ * Simulate the setting of ESB MessageId that is performed by NewProcessInstancePerformer
+ */
+ URI orgEsbMessageId = new URI("someuri");
+ instance.getContextInstance().setVariable(Constants.ESB_MESSAGE_ID, orgEsbMessageId);
+
+ instance.signal();
+ instance.signal();
+ assertEquals("exception", instance.getRootToken().getNode().getName());
+ instance.signal();
+ assertEquals("end", instance.getRootToken().getNode().getName());
+
+ final URI relatesTo = courier1.message.getHeader().getCall().getRelatesTo();
+ assertEquals(orgEsbMessageId, relatesTo);
+ }
+
public static junit.framework.Test suite()
{
- return new JUnit4TestAdapter(thisClass);
+ return new JUnit4TestAdapter(EsbActionHandlerUnitTest.class);
}
}
Added: labs/jbossesb/trunk/product/services/jbpm/src/test/resources/relatesToFaultDefinition.xml
===================================================================
--- labs/jbossesb/trunk/product/services/jbpm/src/test/resources/relatesToFaultDefinition.xml (rev 0)
+++ labs/jbossesb/trunk/product/services/jbpm/src/test/resources/relatesToFaultDefinition.xml 2009-01-19 10:17:48 UTC (rev 24780)
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<process-definition xmlns="urn:jbpm.org:jpdl-3.2" name="testExceptionHandling">
+
+ <start-state name="start">
+ <transition name="ok" to="node1"></transition>
+ </start-state>
+
+ <node name="node1">
+ <action class="org.jboss.soa.esb.services.jbpm.actionhandlers.EsbActionHandler">
+ <esbCategoryName>MockCategory</esbCategoryName>
+ <esbServiceName>MockService</esbServiceName>
+ <exceptionTransition>exception</exceptionTransition>
+ </action>
+ <transition name="ok" to="exception"></transition>
+ <transition name="exception" to="exception"></transition>
+ </node>
+
+ <node name="exception">
+ <action class="org.jboss.soa.esb.services.jbpm.actionhandlers.EsbActionHandler">
+ <esbCategoryName>MockCategory</esbCategoryName>
+ <esbServiceName>MockService</esbServiceName>
+ <esbToBpmVars>
+ <mapping esb="SomeExceptionCode" bpm="exceptionCode"/>
+ </esbToBpmVars>
+ </action>
+ <transition name="ok" to="end"></transition>
+ </node>
+
+ <end-state name="ExceptionHandling"></end-state>
+
+ <end-state name="end"></end-state>
+
+</process-definition>
\ No newline at end of file
More information about the jboss-svn-commits
mailing list