[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