[jbpm-commits] JBoss JBPM SVN: r2744 - in projects/spec/trunk/modules: ri/src/main/java/org/jbpm/ri/service and 1 other directory.

do-not-reply at jboss.org do-not-reply at jboss.org
Sat Nov 1 08:50:41 EDT 2008


Author: thomas.diesler at jboss.com
Date: 2008-11-01 08:50:41 -0400 (Sat, 01 Nov 2008)
New Revision: 2744

Modified:
   projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/transaction/TxRequiredTest.java
   projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/service/MessageServiceImpl.java
Log:
Make MessageService transactional

Modified: projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/transaction/TxRequiredTest.java
===================================================================
--- projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/transaction/TxRequiredTest.java	2008-11-01 12:31:55 UTC (rev 2743)
+++ projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/transaction/TxRequiredTest.java	2008-11-01 12:50:41 UTC (rev 2744)
@@ -24,18 +24,26 @@
 // $Id$
 
 import java.io.IOException;
+import java.util.List;
 
+import org.hibernate.Transaction;
 import org.jbpm.api.Constants;
 import org.jbpm.api.Constants.TxType;
 import org.jbpm.api.model.Group;
+import org.jbpm.api.model.Message;
 import org.jbpm.api.model.Node;
 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.runtime.BasicAttachments;
+import org.jbpm.api.runtime.BasicExecutionContext;
+import org.jbpm.api.runtime.ExecutionHandler;
+import org.jbpm.api.runtime.Token;
 import org.jbpm.api.service.ProcessBuilderService;
 import org.jbpm.api.test.CTSTestCase;
+import org.jbpm.ri.runtime.TransactionAssociation;
 
 /**
  * Test two tasks with Tx attribute REQUIRED
@@ -45,7 +53,7 @@
  */
 public class TxRequiredTest extends CTSTestCase
 {
-  public void testUserTask() throws Exception
+  public void testNoRollback() throws Exception
   {
     ProcessDefinition procDef = unregisterOnTearDown(getProcessDefinition());
     
@@ -63,8 +71,26 @@
 
     proc.startProcess();
     proc.waitForEnd(5000);
+    
+    List<Message> messages = getMessages();
+    assertEquals("Two messages expected", 2, messages.size());
   }
 
+  public void testRollback() throws Exception
+  {
+    ProcessDefinition procDef = unregisterOnTearDown(getProcessDefinition());
+    Process proc = procDef.newInstance();
+
+    BasicAttachments att = new BasicAttachments();
+    att.addAttachment(Boolean.class, "rollback", Boolean.TRUE);
+    
+    proc.startProcess(att);
+    proc.waitForEnd(5000);
+    
+    List<Message> messages = getMessages();
+    assertEquals("Two messages expected", 2, messages.size());
+  }
+
   protected ProcessDefinition getProcessDefinition() throws IOException
   {
     ProcessBuilder procBuilder = ProcessBuilderService.locateProcessBuilder();
@@ -72,10 +98,42 @@
     procBuilder.addStartEvent("Start").addSequenceFlow("TaskA");
     procBuilder.addTask("TaskA", TaskType.Send).addOutMessageRef("TaskAMessage").addGroupRef("TxRequired").addSequenceFlow("TaskB");
     procBuilder.addTask("TaskB", TaskType.Send).addOutMessageRef("TaskBMessage").addGroupRef("TxRequired").addSequenceFlow("End");
+    //procBuilder.addExecutionHandler(TextExecutionHandler.class);
     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();
   }
+  
+  public static class TextExecutionHandler implements ExecutionHandler
+  {
+    private static final long serialVersionUID = 1L;
+    
+    private Node node;
+    
+    @Override
+    public void execute(Token token)
+    {
+      Transaction tx = TransactionAssociation.getTransaction();
+      if (tx != null)
+      {
+        Boolean doRollback = token.getExecutionContext().getAttachment(Boolean.class, "rollback");
+        if (doRollback == Boolean.TRUE)
+          tx.rollback();
+      }
+    }
+
+    @Override
+    public Node getNode()
+    {
+      return node;
+    }
+
+    @Override
+    public void setNode(Node node)
+    {
+      this.node = node;
+    }
+  }
 }

Modified: projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/service/MessageServiceImpl.java
===================================================================
--- projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/service/MessageServiceImpl.java	2008-11-01 12:31:55 UTC (rev 2743)
+++ projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/service/MessageServiceImpl.java	2008-11-01 12:50:41 UTC (rev 2744)
@@ -59,7 +59,7 @@
   public void sendMessage(Message msg)
   {
     Transaction tx = TransactionAssociation.getTransaction();
-    sendMessageTx(msg, null);
+    sendMessageTx(msg, tx);
   }
   
   private void sendMessageTx(Message msg, Transaction tx)




More information about the jbpm-commits mailing list