[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