[jbpm-commits] JBoss JBPM SVN: r2741 - in projects/spec/branches/tdiesler/modules: ri/src/main/java/org/jbpm/ri/runtime and 4 other directories.

do-not-reply at jboss.org do-not-reply at jboss.org
Sat Nov 1 08:04:29 EDT 2008


Author: thomas.diesler at jboss.com
Date: 2008-11-01 08:04:29 -0400 (Sat, 01 Nov 2008)
New Revision: 2741

Modified:
   projects/spec/branches/tdiesler/modules/cts/src/test/java/org/jbpm/test/cts/transaction/TxRequiredTest.java
   projects/spec/branches/tdiesler/modules/ri/src/main/java/org/jbpm/ri/runtime/MessageSender.java
   projects/spec/branches/tdiesler/modules/ri/src/main/java/org/jbpm/ri/runtime/TransactionInterceptor.java
   projects/spec/branches/tdiesler/modules/ri/src/main/java/org/jbpm/ri/service/MessageServiceImpl.java
   projects/spec/branches/tdiesler/modules/ri/src/main/resources/jbpm-cfg-beans.xml
   projects/spec/branches/tdiesler/modules/ri/src/test/resources/log4j.xml
   projects/spec/branches/tdiesler/modules/samples/airticket/server/src/test/resources/log4j.xml
Log:
wip

Modified: projects/spec/branches/tdiesler/modules/cts/src/test/java/org/jbpm/test/cts/transaction/TxRequiredTest.java
===================================================================
--- projects/spec/branches/tdiesler/modules/cts/src/test/java/org/jbpm/test/cts/transaction/TxRequiredTest.java	2008-11-01 12:03:43 UTC (rev 2740)
+++ projects/spec/branches/tdiesler/modules/cts/src/test/java/org/jbpm/test/cts/transaction/TxRequiredTest.java	2008-11-01 12:04:29 UTC (rev 2741)
@@ -32,6 +32,7 @@
 import org.jbpm.api.model.Process;
 import org.jbpm.api.model.ProcessDefinition;
 import org.jbpm.api.model.Group.GroupType;
+import org.jbpm.api.model.Task.TaskType;
 import org.jbpm.api.model.builder.ProcessBuilder;
 import org.jbpm.api.service.ProcessBuilderService;
 import org.jbpm.api.test.CTSTestCase;
@@ -69,9 +70,12 @@
     ProcessBuilder procBuilder = ProcessBuilderService.locateProcessBuilder();
     procBuilder.addProcess("RequiresTxTest");
     procBuilder.addStartEvent("Start").addSequenceFlow("TaskA");
-    procBuilder.addTask("TaskA").addGroupRef("TxRequired").addSequenceFlow("TaskB");
-    procBuilder.addTask("TaskB").addGroupRef("TxRequired").addSequenceFlow("End").addEndEvent("End");
+    procBuilder.addTask("TaskA", TaskType.Send).addOutMessageRef("TaskAMessage").addGroupRef("TxRequired").addSequenceFlow("TaskB");
+    procBuilder.addTask("TaskB", TaskType.Send).addOutMessageRef("TaskBMessage").addGroupRef("TxRequired").addSequenceFlow("End");
     procBuilder.addGroup(GroupType.Transaction, "TxRequired").addProperty(Constants.PROP_TX_TYPE, TxType.REQUIRED);
+    procBuilder.addProcessMessage("TaskAMessage").addToRef(getTestID()).addProperty("msgProp", "msgA");
+    procBuilder.addProcessMessage("TaskBMessage").addToRef(getTestID()).addProperty("msgProp", "msgB");;
+    procBuilder.addEndEvent("End");
     return procBuilder.getProcessDefinition();
   }
 }

Modified: projects/spec/branches/tdiesler/modules/ri/src/main/java/org/jbpm/ri/runtime/MessageSender.java
===================================================================
--- projects/spec/branches/tdiesler/modules/ri/src/main/java/org/jbpm/ri/runtime/MessageSender.java	2008-11-01 12:03:43 UTC (rev 2740)
+++ projects/spec/branches/tdiesler/modules/ri/src/main/java/org/jbpm/ri/runtime/MessageSender.java	2008-11-01 12:04:29 UTC (rev 2741)
@@ -29,6 +29,7 @@
 import org.jbpm.api.model.Message;
 import org.jbpm.api.model.Node;
 import org.jbpm.api.model.Participant;
+import org.jbpm.api.model.Property;
 import org.jbpm.api.model.builder.MessageBuilder;
 import org.jbpm.api.runtime.ExecutionContext;
 import org.jbpm.api.runtime.Token;
@@ -77,14 +78,17 @@
     msgBuilder.newMessage(messageRef.getName());
     msgBuilder.addToRef(targetID);
 
-    // Copy the properties from the execution context
-    // to the send message
+    // Copy the properties from the execution context to the send message
     for (String propName : messageRef.getPropertyNames())
     {
-      Object value = exContext.getAttachment(propName);
-      if (value == null)
-        throw new IllegalStateException("Cannot obtain property: " + propName);
-
+      Property prop = messageRef.getProperty(propName);
+      Object value = prop.getValue();
+      if (prop.isCorrelation())
+      {
+        value = exContext.getAttachment(propName);
+        if (value == null)
+          throw new IllegalStateException("Cannot obtain property: " + propName);
+      }
       msgBuilder.addProperty(propName, value);
     }
     MessageImpl msg = (MessageImpl)msgBuilder.getMessage();

Modified: projects/spec/branches/tdiesler/modules/ri/src/main/java/org/jbpm/ri/runtime/TransactionInterceptor.java
===================================================================
--- projects/spec/branches/tdiesler/modules/ri/src/main/java/org/jbpm/ri/runtime/TransactionInterceptor.java	2008-11-01 12:03:43 UTC (rev 2740)
+++ projects/spec/branches/tdiesler/modules/ri/src/main/java/org/jbpm/ri/runtime/TransactionInterceptor.java	2008-11-01 12:04:29 UTC (rev 2741)
@@ -42,8 +42,6 @@
 {
   final static Logger log = LoggerFactory.getLogger(TransactionInterceptor.class);
   
-  private PersistenceService service;
-  
   @Override
   public void execute(RuntimeContext rtContext)
   {
@@ -53,10 +51,13 @@
     // Begin the Tx
     Session session = token.getSession();
     Transaction tx = session.beginTransaction();
+    TransactionAssociation.setTransaction(tx);
+    
     try
     {
       // Load the node
-      PersistenceService service = getPersistenceService(node.getProcessEngine());
+      ProcessEngine engine = node.getProcessEngine();
+      PersistenceService service = engine.getService(PersistenceService.class);
       node = service.loadNode(session, node.getClass(), node.getKey());
       
       // Call the next interceptor in the chain
@@ -83,13 +84,9 @@
       }
       throw rte;
     }
+    finally
+    {
+      TransactionAssociation.setTransaction(null);
+    }
   }
-  
-  private PersistenceService getPersistenceService(ProcessEngine engine)
-  {
-    if (service == null)
-      service = engine.getService(PersistenceService.class);
-
-    return service;
-  }
 }
\ No newline at end of file

Modified: projects/spec/branches/tdiesler/modules/ri/src/main/java/org/jbpm/ri/service/MessageServiceImpl.java
===================================================================
--- projects/spec/branches/tdiesler/modules/ri/src/main/java/org/jbpm/ri/service/MessageServiceImpl.java	2008-11-01 12:03:43 UTC (rev 2740)
+++ projects/spec/branches/tdiesler/modules/ri/src/main/java/org/jbpm/ri/service/MessageServiceImpl.java	2008-11-01 12:04:29 UTC (rev 2741)
@@ -23,10 +23,17 @@
 
 // $Id$
 
+import javax.transaction.Status;
+import javax.transaction.Synchronization;
+
+import org.hibernate.Transaction;
 import org.jbpm.api.client.MessageListener;
 import org.jbpm.api.client.ProcessEngine;
 import org.jbpm.api.model.Message;
 import org.jbpm.api.service.MessageService;
+import org.jbpm.ri.runtime.TransactionAssociation;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * The ProcessEngine sends messages through the MessageService. 
@@ -39,9 +46,64 @@
  */
 public class MessageServiceImpl extends MessageService implements MutableService
 {
+  // Provide logging
+  final Logger log = LoggerFactory.getLogger(MessageServiceImpl.class);
+  
   @Override
   public void setProcessEngine(ProcessEngine engine)
   {
     super.setProcessEngine(engine);
   }
+
+  @Override
+  public void sendMessage(Message msg)
+  {
+    Transaction tx = TransactionAssociation.getTransaction();
+    sendMessageTx(msg, null);
+  }
+  
+  private void sendMessageTx(Message msg, Transaction tx)
+  {
+    if (tx != null)
+    {
+      tx.registerSynchronization(new MessageWrapper(this, msg));
+    }
+    else
+    {
+      super.sendMessage(msg);
+    }
+  }
+  
+  public class MessageWrapper implements Synchronization
+  {
+    private MessageServiceImpl service;
+    private Message msg;
+    
+    
+    protected MessageWrapper(MessageServiceImpl service, Message msg)
+    {
+      this.service = service;
+      this.msg = msg;
+    }
+
+    @Override
+    public void afterCompletion(int status)
+    {
+      if (status != Status.STATUS_COMMITTED)
+      {
+        log.debug("Ignore message after completion: status=" + status + "," + msg);
+      }
+      else
+      {
+        log.debug("Send message after completion " + msg);
+        service.sendMessageTx(msg, null);
+      }
+    }
+
+    @Override
+    public void beforeCompletion()
+    {
+      // nothing to do
+    }
+  }
 }

Modified: projects/spec/branches/tdiesler/modules/ri/src/main/resources/jbpm-cfg-beans.xml
===================================================================
--- projects/spec/branches/tdiesler/modules/ri/src/main/resources/jbpm-cfg-beans.xml	2008-11-01 12:03:43 UTC (rev 2740)
+++ projects/spec/branches/tdiesler/modules/ri/src/main/resources/jbpm-cfg-beans.xml	2008-11-01 12:04:29 UTC (rev 2741)
@@ -62,7 +62,7 @@
     <bean name="jBPMProcessService" class="org.jbpm.ri.service.ProcessServiceImpl" >
       <property name="interceptors">
         <list elementClass="java.lang.String">
-          <!-- value>org.jbpm.ri.runtime.TransactionInterceptor</value -->
+          <value>org.jbpm.ri.runtime.TransactionInterceptor</value>
           <value>org.jbpm.ri.runtime.SignalHandlerInterceptor</value>
           <value>org.jbpm.ri.runtime.FlowHandlerInterceptor</value>
           <value>org.jbpm.ri.runtime.AssignmentInterceptor</value>

Modified: projects/spec/branches/tdiesler/modules/ri/src/test/resources/log4j.xml
===================================================================
--- projects/spec/branches/tdiesler/modules/ri/src/test/resources/log4j.xml	2008-11-01 12:03:43 UTC (rev 2740)
+++ projects/spec/branches/tdiesler/modules/ri/src/test/resources/log4j.xml	2008-11-01 12:04:29 UTC (rev 2741)
@@ -33,7 +33,7 @@
   <!-- ================ -->
 
   <category name="org.hibernate">
-    <priority value="DEBUG" />
+    <priority value="INFO" />
   </category>
 
   <!-- ======================= -->

Modified: projects/spec/branches/tdiesler/modules/samples/airticket/server/src/test/resources/log4j.xml
===================================================================
--- projects/spec/branches/tdiesler/modules/samples/airticket/server/src/test/resources/log4j.xml	2008-11-01 12:03:43 UTC (rev 2740)
+++ projects/spec/branches/tdiesler/modules/samples/airticket/server/src/test/resources/log4j.xml	2008-11-01 12:04:29 UTC (rev 2741)
@@ -40,11 +40,6 @@
     <priority value="INFO" />
   </category>
 
-  <!-- hide optimistic locking failures -->
-  <category name="org.hibernate.event.def.AbstractFlushingEventListener">
-    <priority value="FATAL" />
-  </category>
-
   <!-- ======================= -->
   <!-- Setup the Root category -->
   <!-- ======================= -->




More information about the jbpm-commits mailing list