JBoss JBPM SVN: r2753 - in projects/spec: tags and 1 other directory.
by do-not-reply@jboss.org
Author: thomas.diesler(a)jboss.com
Date: 2008-11-01 16:50:02 -0400 (Sat, 01 Nov 2008)
New Revision: 2753
Added:
projects/spec/tags/jbpm-spec-1.0.0-Alpha2/
Removed:
projects/spec/branches/jbpm-spec-1.0.0-Alpha2/
Log:
Release jbpm-spec-1.0.0.Alpha2
Copied: projects/spec/tags/jbpm-spec-1.0.0-Alpha2 (from rev 2752, projects/spec/branches/jbpm-spec-1.0.0-Alpha2)
17 years, 5 months
JBoss JBPM SVN: r2752 - in projects/spec/branches/jbpm-spec-1.0.0-Alpha2: modules/api and 10 other directories.
by do-not-reply@jboss.org
Author: thomas.diesler(a)jboss.com
Date: 2008-11-01 16:49:28 -0400 (Sat, 01 Nov 2008)
New Revision: 2752
Modified:
projects/spec/branches/jbpm-spec-1.0.0-Alpha2/modules/api/pom.xml
projects/spec/branches/jbpm-spec-1.0.0-Alpha2/modules/cts/pom.xml
projects/spec/branches/jbpm-spec-1.0.0-Alpha2/modules/dialects/api10/pom.xml
projects/spec/branches/jbpm-spec-1.0.0-Alpha2/modules/dialects/jpdl32/pom.xml
projects/spec/branches/jbpm-spec-1.0.0-Alpha2/modules/dialects/pom.xml
projects/spec/branches/jbpm-spec-1.0.0-Alpha2/modules/dialects/stp/pom.xml
projects/spec/branches/jbpm-spec-1.0.0-Alpha2/modules/dialects/xpdl21/pom.xml
projects/spec/branches/jbpm-spec-1.0.0-Alpha2/modules/ri/pom.xml
projects/spec/branches/jbpm-spec-1.0.0-Alpha2/modules/samples/airticket/client/pom.xml
projects/spec/branches/jbpm-spec-1.0.0-Alpha2/modules/samples/airticket/pom.xml
projects/spec/branches/jbpm-spec-1.0.0-Alpha2/modules/samples/airticket/server/pom.xml
projects/spec/branches/jbpm-spec-1.0.0-Alpha2/pom.xml
Log:
Release jbpm-spec-1.0.0.Alpha2
Modified: projects/spec/branches/jbpm-spec-1.0.0-Alpha2/modules/api/pom.xml
===================================================================
--- projects/spec/branches/jbpm-spec-1.0.0-Alpha2/modules/api/pom.xml 2008-11-01 20:47:56 UTC (rev 2751)
+++ projects/spec/branches/jbpm-spec-1.0.0-Alpha2/modules/api/pom.xml 2008-11-01 20:49:28 UTC (rev 2752)
@@ -21,7 +21,7 @@
<parent>
<groupId>org.jbpm.jbpm4</groupId>
<artifactId>jbpm-spec</artifactId>
- <version>1.0.0-SNAPSHOT</version>
+ <version>1.0.0.Alpha2</version>
<relativePath>../../pom.xml</relativePath>
</parent>
Modified: projects/spec/branches/jbpm-spec-1.0.0-Alpha2/modules/cts/pom.xml
===================================================================
--- projects/spec/branches/jbpm-spec-1.0.0-Alpha2/modules/cts/pom.xml 2008-11-01 20:47:56 UTC (rev 2751)
+++ projects/spec/branches/jbpm-spec-1.0.0-Alpha2/modules/cts/pom.xml 2008-11-01 20:49:28 UTC (rev 2752)
@@ -22,7 +22,7 @@
<parent>
<groupId>org.jbpm.jbpm4</groupId>
<artifactId>jbpm-spec</artifactId>
- <version>1.0.0-SNAPSHOT</version>
+ <version>1.0.0.Alpha2</version>
<relativePath>../../pom.xml</relativePath>
</parent>
Modified: projects/spec/branches/jbpm-spec-1.0.0-Alpha2/modules/dialects/api10/pom.xml
===================================================================
--- projects/spec/branches/jbpm-spec-1.0.0-Alpha2/modules/dialects/api10/pom.xml 2008-11-01 20:47:56 UTC (rev 2751)
+++ projects/spec/branches/jbpm-spec-1.0.0-Alpha2/modules/dialects/api10/pom.xml 2008-11-01 20:49:28 UTC (rev 2752)
@@ -22,6 +22,6 @@
<parent>
<groupId>org.jbpm.jbpm4</groupId>
<artifactId>jbpm-spec-dialects</artifactId>
- <version>1.0.0-SNAPSHOT</version>
+ <version>1.0.0.Alpha2</version>
</parent>
</project>
\ No newline at end of file
Modified: projects/spec/branches/jbpm-spec-1.0.0-Alpha2/modules/dialects/jpdl32/pom.xml
===================================================================
--- projects/spec/branches/jbpm-spec-1.0.0-Alpha2/modules/dialects/jpdl32/pom.xml 2008-11-01 20:47:56 UTC (rev 2751)
+++ projects/spec/branches/jbpm-spec-1.0.0-Alpha2/modules/dialects/jpdl32/pom.xml 2008-11-01 20:49:28 UTC (rev 2752)
@@ -22,7 +22,7 @@
<parent>
<groupId>org.jbpm.jbpm4</groupId>
<artifactId>jbpm-spec-dialects</artifactId>
- <version>1.0.0-SNAPSHOT</version>
+ <version>1.0.0.Alpha2</version>
</parent>
</project>
\ No newline at end of file
Modified: projects/spec/branches/jbpm-spec-1.0.0-Alpha2/modules/dialects/pom.xml
===================================================================
--- projects/spec/branches/jbpm-spec-1.0.0-Alpha2/modules/dialects/pom.xml 2008-11-01 20:47:56 UTC (rev 2751)
+++ projects/spec/branches/jbpm-spec-1.0.0-Alpha2/modules/dialects/pom.xml 2008-11-01 20:49:28 UTC (rev 2752)
@@ -21,7 +21,7 @@
<parent>
<groupId>org.jbpm.jbpm4</groupId>
<artifactId>jbpm-spec</artifactId>
- <version>1.0.0-SNAPSHOT</version>
+ <version>1.0.0.Alpha2</version>
<relativePath>../../pom.xml</relativePath>
</parent>
Modified: projects/spec/branches/jbpm-spec-1.0.0-Alpha2/modules/dialects/stp/pom.xml
===================================================================
--- projects/spec/branches/jbpm-spec-1.0.0-Alpha2/modules/dialects/stp/pom.xml 2008-11-01 20:47:56 UTC (rev 2751)
+++ projects/spec/branches/jbpm-spec-1.0.0-Alpha2/modules/dialects/stp/pom.xml 2008-11-01 20:49:28 UTC (rev 2752)
@@ -21,7 +21,7 @@
<parent>
<groupId>org.jbpm.jbpm4</groupId>
<artifactId>jbpm-spec-dialects</artifactId>
- <version>1.0.0-SNAPSHOT</version>
+ <version>1.0.0.Alpha2</version>
</parent>
</project>
\ No newline at end of file
Modified: projects/spec/branches/jbpm-spec-1.0.0-Alpha2/modules/dialects/xpdl21/pom.xml
===================================================================
--- projects/spec/branches/jbpm-spec-1.0.0-Alpha2/modules/dialects/xpdl21/pom.xml 2008-11-01 20:47:56 UTC (rev 2751)
+++ projects/spec/branches/jbpm-spec-1.0.0-Alpha2/modules/dialects/xpdl21/pom.xml 2008-11-01 20:49:28 UTC (rev 2752)
@@ -22,6 +22,6 @@
<parent>
<groupId>org.jbpm.jbpm4</groupId>
<artifactId>jbpm-spec-dialects</artifactId>
- <version>1.0.0-SNAPSHOT</version>
+ <version>1.0.0.Alpha2</version>
</parent>
</project>
\ No newline at end of file
Modified: projects/spec/branches/jbpm-spec-1.0.0-Alpha2/modules/ri/pom.xml
===================================================================
--- projects/spec/branches/jbpm-spec-1.0.0-Alpha2/modules/ri/pom.xml 2008-11-01 20:47:56 UTC (rev 2751)
+++ projects/spec/branches/jbpm-spec-1.0.0-Alpha2/modules/ri/pom.xml 2008-11-01 20:49:28 UTC (rev 2752)
@@ -24,7 +24,7 @@
<parent>
<groupId>org.jbpm.jbpm4</groupId>
<artifactId>jbpm-spec</artifactId>
- <version>1.0.0-SNAPSHOT</version>
+ <version>1.0.0.Alpha2</version>
<relativePath>../../pom.xml</relativePath>
</parent>
Modified: projects/spec/branches/jbpm-spec-1.0.0-Alpha2/modules/samples/airticket/client/pom.xml
===================================================================
--- projects/spec/branches/jbpm-spec-1.0.0-Alpha2/modules/samples/airticket/client/pom.xml 2008-11-01 20:47:56 UTC (rev 2751)
+++ projects/spec/branches/jbpm-spec-1.0.0-Alpha2/modules/samples/airticket/client/pom.xml 2008-11-01 20:49:28 UTC (rev 2752)
@@ -23,7 +23,7 @@
<parent>
<groupId>org.jbpm.jbpm4</groupId>
<artifactId>jbpm-spec-sample-airticket</artifactId>
- <version>1.0.0-SNAPSHOT</version>
+ <version>1.0.0.Alpha2</version>
</parent>
<!-- Dependencies -->
Modified: projects/spec/branches/jbpm-spec-1.0.0-Alpha2/modules/samples/airticket/pom.xml
===================================================================
--- projects/spec/branches/jbpm-spec-1.0.0-Alpha2/modules/samples/airticket/pom.xml 2008-11-01 20:47:56 UTC (rev 2751)
+++ projects/spec/branches/jbpm-spec-1.0.0-Alpha2/modules/samples/airticket/pom.xml 2008-11-01 20:49:28 UTC (rev 2752)
@@ -10,7 +10,7 @@
<parent>
<groupId>org.jbpm.jbpm4</groupId>
<artifactId>jbpm-spec</artifactId>
- <version>1.0.0-SNAPSHOT</version>
+ <version>1.0.0.Alpha2</version>
<relativePath>../../../pom.xml</relativePath>
</parent>
Modified: projects/spec/branches/jbpm-spec-1.0.0-Alpha2/modules/samples/airticket/server/pom.xml
===================================================================
--- projects/spec/branches/jbpm-spec-1.0.0-Alpha2/modules/samples/airticket/server/pom.xml 2008-11-01 20:47:56 UTC (rev 2751)
+++ projects/spec/branches/jbpm-spec-1.0.0-Alpha2/modules/samples/airticket/server/pom.xml 2008-11-01 20:49:28 UTC (rev 2752)
@@ -22,7 +22,7 @@
<parent>
<groupId>org.jbpm.jbpm4</groupId>
<artifactId>jbpm-spec-sample-airticket</artifactId>
- <version>1.0.0-SNAPSHOT</version>
+ <version>1.0.0.Alpha2</version>
<relativePath>../pom.xml</relativePath>
</parent>
Modified: projects/spec/branches/jbpm-spec-1.0.0-Alpha2/pom.xml
===================================================================
--- projects/spec/branches/jbpm-spec-1.0.0-Alpha2/pom.xml 2008-11-01 20:47:56 UTC (rev 2751)
+++ projects/spec/branches/jbpm-spec-1.0.0-Alpha2/pom.xml 2008-11-01 20:49:28 UTC (rev 2752)
@@ -22,13 +22,13 @@
<artifactId>jbpm-spec</artifactId>
<packaging>pom</packaging>
- <version>1.0.0-SNAPSHOT</version>
+ <version>1.0.0.Alpha2</version>
<!-- Parent -->
<parent>
<groupId>org.jbpm</groupId>
<artifactId>jbpm-parent</artifactId>
- <version>1.0.1-SNAPSHOT</version>
+ <version>1.0.1.GA</version>
</parent>
<!-- Modules -->
17 years, 5 months
JBoss JBPM SVN: r2751 - projects/parent/trunk.
by do-not-reply@jboss.org
Author: thomas.diesler(a)jboss.com
Date: 2008-11-01 16:47:56 -0400 (Sat, 01 Nov 2008)
New Revision: 2751
Modified:
projects/parent/trunk/pom.xml
Log:
version=1.0.2-SNAPSHOT
Modified: projects/parent/trunk/pom.xml
===================================================================
--- projects/parent/trunk/pom.xml 2008-11-01 20:42:48 UTC (rev 2750)
+++ projects/parent/trunk/pom.xml 2008-11-01 20:47:56 UTC (rev 2751)
@@ -6,7 +6,7 @@
<groupId>org.jbpm</groupId>
<artifactId>jbpm-parent</artifactId>
<packaging>pom</packaging>
- <version>1.0.1.GA</version>
+ <version>1.0.2-SNAPSHOT</version>
<organization>
<name>JBoss, a division of Red Hat</name>
17 years, 5 months
JBoss JBPM SVN: r2750 - projects/parent/tags.
by do-not-reply@jboss.org
Author: thomas.diesler(a)jboss.com
Date: 2008-11-01 16:42:48 -0400 (Sat, 01 Nov 2008)
New Revision: 2750
Added:
projects/parent/tags/jbpm-parent-1.0.1.GA/
Log:
Release jbpm-parent-1.0.1.GA
Copied: projects/parent/tags/jbpm-parent-1.0.1.GA (from rev 2749, projects/parent/trunk)
17 years, 5 months
JBoss JBPM SVN: r2749 - projects/parent/trunk.
by do-not-reply@jboss.org
Author: thomas.diesler(a)jboss.com
Date: 2008-11-01 16:42:06 -0400 (Sat, 01 Nov 2008)
New Revision: 2749
Modified:
projects/parent/trunk/pom.xml
Log:
Release jbpm-parent-1.0.1.GA
Modified: projects/parent/trunk/pom.xml
===================================================================
--- projects/parent/trunk/pom.xml 2008-11-01 20:35:43 UTC (rev 2748)
+++ projects/parent/trunk/pom.xml 2008-11-01 20:42:06 UTC (rev 2749)
@@ -6,7 +6,7 @@
<groupId>org.jbpm</groupId>
<artifactId>jbpm-parent</artifactId>
<packaging>pom</packaging>
- <version>1.0.1-SNAPSHOT</version>
+ <version>1.0.1.GA</version>
<organization>
<name>JBoss, a division of Red Hat</name>
17 years, 5 months
JBoss JBPM SVN: r2748 - in projects/spec: tags and 1 other directory.
by do-not-reply@jboss.org
Author: thomas.diesler(a)jboss.com
Date: 2008-11-01 16:35:43 -0400 (Sat, 01 Nov 2008)
New Revision: 2748
Added:
projects/spec/branches/jbpm-spec-1.0.0-Alpha2/
Removed:
projects/spec/tags/jbpm-spec-1.0.0-Alpha2/
Log:
move to branches
Copied: projects/spec/branches/jbpm-spec-1.0.0-Alpha2 (from rev 2747, projects/spec/tags/jbpm-spec-1.0.0-Alpha2)
17 years, 5 months
JBoss JBPM SVN: r2747 - projects/spec/tags.
by do-not-reply@jboss.org
Author: thomas.diesler(a)jboss.com
Date: 2008-11-01 14:24:58 -0400 (Sat, 01 Nov 2008)
New Revision: 2747
Added:
projects/spec/tags/jbpm-spec-1.0.0-Alpha2/
Log:
Release jbpm-spec-1.0.0-Alpha2
Copied: projects/spec/tags/jbpm-spec-1.0.0-Alpha2 (from rev 2746, projects/spec/trunk)
17 years, 5 months
JBoss JBPM SVN: r2746 - in projects/spec/trunk/modules: ri/src/main/java/org/jbpm/ri/runtime and 1 other directory.
by do-not-reply@jboss.org
Author: thomas.diesler(a)jboss.com
Date: 2008-11-01 14:23:50 -0400 (Sat, 01 Nov 2008)
New Revision: 2746
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/runtime/TransactionInterceptor.java
Log:
Tx ok
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 17:37:34 UTC (rev 2745)
+++ projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/transaction/TxRequiredTest.java 2008-11-01 18:23:50 UTC (rev 2746)
@@ -55,39 +55,39 @@
public void testNoRollback() throws Exception
{
ProcessDefinition procDef = unregisterOnTearDown(getProcessDefinition());
-
+
Node taskA = procDef.getNode("TaskA");
Node taskB = procDef.getNode("TaskB");
Group group = procDef.getGroup("TxRequired");
Group groupA = taskA.getGroupRef();
Group groupB = taskB.getGroupRef();
-
+
assertNotNull("Group not null", group);
assertSame("Group same", group, groupA);
assertSame("Group same", group, groupB);
-
+
Process proc = procDef.newInstance();
proc.startProcess();
proc.waitForEnd();
-
+
List<Message> messages = getMessages();
assertEquals("Message expected", 1, messages.size());
}
- public void _testRollback() throws Exception
+ 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());
+ assertEquals("No messages expected", 0, messages.size());
}
protected ProcessDefinition getProcessDefinition() throws IOException
@@ -102,23 +102,20 @@
procBuilder.addProcessMessage("TaskAMessage").addToRef(getTestID()).addProperty("msgProp", "msgA");
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();
- }
+ Boolean doRollback = token.getExecutionContext().getAttachment(Boolean.class, "rollback");
+ if (doRollback == Boolean.TRUE)
+ tx.rollback();
}
@Override
Modified: projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/runtime/TransactionInterceptor.java
===================================================================
--- projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/runtime/TransactionInterceptor.java 2008-11-01 17:37:34 UTC (rev 2745)
+++ projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/runtime/TransactionInterceptor.java 2008-11-01 18:23:50 UTC (rev 2746)
@@ -25,8 +25,14 @@
import org.hibernate.Session;
import org.hibernate.Transaction;
+import org.jbpm.api.Constants;
+import org.jbpm.api.NotImplementedException;
+import org.jbpm.api.Constants.TxType;
import org.jbpm.api.client.ProcessEngine;
+import org.jbpm.api.model.Group;
import org.jbpm.api.model.Node;
+import org.jbpm.api.model.Property;
+import org.jbpm.api.model.Group.GroupType;
import org.jbpm.api.runtime.Token;
import org.jbpm.api.service.PersistenceService;
import org.slf4j.Logger;
@@ -47,12 +53,31 @@
{
Node node = rtContext.getNode();
Token token = rtContext.getToken();
+ Session session = token.getSession();
- // Begin the Tx
- Session session = token.getSession();
- Transaction tx = session.beginTransaction();
+ // Get the Thread associated Tx
+ Transaction tx = TransactionAssociation.getTransaction();
+
+ TxType txType = getTxType(node);
+ if (txType == TxType.REQUIRESNEW)
+ {
+ tx = session.beginTransaction();
+ }
+ else if (txType == TxType.REQUIRED)
+ {
+ // Only create a new Tx if there is none already
+ if (tx == null)
+ tx = session.beginTransaction();
+ }
+ else
+ {
+ throw new NotImplementedException("NotImplemented: " + txType);
+ }
+
+ // Associate the Tx with the Thread
TransactionAssociation.setTransaction(tx);
+ TxType txTypeNext = null;
try
{
// Load the node
@@ -63,9 +88,22 @@
// Call the next interceptor in the chain
rtContext.next();
- // Save the node and commit the Tx
+ // Save the node
service.saveNode(session, node);
- tx.commit();
+
+ // Get TxType of the next node
+ String targetRef = token.getSequenceFlow().getTargetRef();
+ if (targetRef != null)
+ {
+ Node nextNode = node.getProcess().getNode(targetRef);
+ txTypeNext = getTxType(nextNode);
+ }
+
+ // Commit the Tx if it was not rolled back already
+ if (!tx.wasRolledBack() && txTypeNext != TxType.REQUIRED)
+ {
+ tx.commit();
+ }
}
catch (RuntimeException rte)
{
@@ -82,7 +120,28 @@
}
finally
{
- TransactionAssociation.setTransaction(null);
+ // Reset the associated Tx
+ if (txTypeNext != TxType.REQUIRED)
+ TransactionAssociation.setTransaction(null);
}
}
+
+ private TxType getTxType(Node node)
+ {
+ // Initialize with the default
+ TxType txType = TxType.REQUIRESNEW;
+
+ // Get the TxType from the group
+ Group groupRef = node.getGroupRef();
+ if (groupRef != null && groupRef.getGroupType() == GroupType.Transaction)
+ {
+ Property typeProp = groupRef.getProperty(Constants.PROP_TX_TYPE);
+ if (typeProp == null)
+ throw new IllegalStateException("Cannot obtain '" + Constants.PROP_TX_TYPE + "' from group: " + groupRef);
+
+ txType = Constants.TxType.valueOf(typeProp.getValue());
+ }
+
+ return txType;
+ }
}
17 years, 5 months
JBoss JBPM SVN: r2745 - in projects/spec/trunk/modules: ri/src/main/java/org/jbpm/ri/runtime and 2 other directories.
by do-not-reply@jboss.org
Author: thomas.diesler(a)jboss.com
Date: 2008-11-01 13:37:34 -0400 (Sat, 01 Nov 2008)
New Revision: 2745
Added:
projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/runtime/PersistenceSessionInterceptor.java
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/runtime/DelegatingToken.java
projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/runtime/MutableToken.java
projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/runtime/TokenExecutorImpl.java
projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/runtime/TokenImpl.java
projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/runtime/TransactionInterceptor.java
projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/service/HibernatePersistenceServiceImpl.java
projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/service/MessageServiceImpl.java
projects/spec/trunk/modules/ri/src/main/resources/jbpm-cfg-beans.xml
Log:
Add PersistenceSessionInterceptor
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:50:41 UTC (rev 2744)
+++ projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/transaction/TxRequiredTest.java 2008-11-01 17:37:34 UTC (rev 2745)
@@ -38,7 +38,6 @@
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;
@@ -70,13 +69,13 @@
Process proc = procDef.newInstance();
proc.startProcess();
- proc.waitForEnd(5000);
+ proc.waitForEnd();
List<Message> messages = getMessages();
- assertEquals("Two messages expected", 2, messages.size());
+ assertEquals("Message expected", 1, messages.size());
}
- public void testRollback() throws Exception
+ public void _testRollback() throws Exception
{
ProcessDefinition procDef = unregisterOnTearDown(getProcessDefinition());
Process proc = procDef.newInstance();
@@ -97,12 +96,10 @@
procBuilder.addProcess("RequiresTxTest");
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.addTask("TaskB").addGroupRef("TxRequired").addSequenceFlow("End").addExecutionHandler(TextExecutionHandler.class);
+ procBuilder.addEndEvent("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/trunk/modules/ri/src/main/java/org/jbpm/ri/runtime/DelegatingToken.java
===================================================================
--- projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/runtime/DelegatingToken.java 2008-11-01 12:50:41 UTC (rev 2744)
+++ projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/runtime/DelegatingToken.java 2008-11-01 17:37:34 UTC (rev 2745)
@@ -112,9 +112,9 @@
}
@Override
- public void closeSession()
+ public void setSession(Session session)
{
- delegateToken.closeSession();
+ delegateToken.setSession(session);
}
public String toString()
Modified: projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/runtime/MutableToken.java
===================================================================
--- projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/runtime/MutableToken.java 2008-11-01 12:50:41 UTC (rev 2744)
+++ projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/runtime/MutableToken.java 2008-11-01 17:37:34 UTC (rev 2745)
@@ -23,6 +23,7 @@
//$Id$
+import org.hibernate.Session;
import org.jbpm.api.model.SequenceFlow;
import org.jbpm.api.runtime.Token;
@@ -40,6 +41,11 @@
void setTokenStatus(TokenStatus status);
/**
+ * Set the associated session
+ */
+ void setSession(Session session);
+
+ /**
* Set the current SequenceFlow
*/
void setSequenceFlow(SequenceFlow flow);
@@ -54,9 +60,4 @@
* Merge this Token with another token.
*/
void mergeToken(Token token);
-
- /**
- * Close the current session
- */
- void closeSession();
}
\ No newline at end of file
Added: projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/runtime/PersistenceSessionInterceptor.java
===================================================================
--- projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/runtime/PersistenceSessionInterceptor.java (rev 0)
+++ projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/runtime/PersistenceSessionInterceptor.java 2008-11-01 17:37:34 UTC (rev 2745)
@@ -0,0 +1,75 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jbpm.ri.runtime;
+
+//$Id$
+
+import org.hibernate.Session;
+import org.jbpm.api.client.ProcessEngine;
+import org.jbpm.api.model.Node;
+import org.jbpm.api.runtime.Token.TokenStatus;
+import org.jbpm.api.service.PersistenceService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * An interceptor that associates the persistence session with the Token
+ *
+ * @author thomas.diesler(a)jboss.com
+ * @since 10-Nov-2008
+ */
+public class PersistenceSessionInterceptor implements NodeInterceptor
+{
+ final static Logger log = LoggerFactory.getLogger(PersistenceSessionInterceptor.class);
+
+ @Override
+ public void execute(RuntimeContext rtContext)
+ {
+ Node node = rtContext.getNode();
+ MutableToken token = (MutableToken)rtContext.getToken();
+
+ Session session = token.getSession();
+ try
+ {
+ // Create the session if needed
+ if (session == null)
+ {
+ ProcessEngine engine = node.getProcessEngine();
+ PersistenceService service = engine.getService(PersistenceService.class);
+ session = service.createSession();
+ token.setSession(session);
+ }
+
+ // Call the next interceptor in the chain
+ rtContext.next();
+ }
+ finally
+ {
+ TokenStatus status = token.getTokenStatus();
+ if (status == TokenStatus.Destroyed || status == TokenStatus.Suspended)
+ {
+ session.close();
+ token.setSession(null);
+ }
+ }
+ }
+}
Property changes on: projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/runtime/PersistenceSessionInterceptor.java
___________________________________________________________________
Name: svn:keywords
+ Id Revision
Name: svn:eol-style
+ LF
Modified: projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/runtime/TokenExecutorImpl.java
===================================================================
--- projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/runtime/TokenExecutorImpl.java 2008-11-01 12:50:41 UTC (rev 2744)
+++ projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/runtime/TokenExecutorImpl.java 2008-11-01 17:37:34 UTC (rev 2745)
@@ -145,7 +145,6 @@
log.debug("Destroy Token: " + token);
MutableToken mutableToken = (MutableToken)token;
mutableToken.setTokenStatus(TokenStatus.Destroyed);
- mutableToken.closeSession();
runnableTokens.remove(token.getTokenID());
}
}
@@ -161,7 +160,6 @@
log.debug("Suspend Token: " + token);
MutableToken mutableToken = (MutableToken)token;
mutableToken.setTokenStatus(TokenStatus.Suspended);
- mutableToken.closeSession();
// Release the thread for a suspended token
rtToken.releaseThread();
Modified: projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/runtime/TokenImpl.java
===================================================================
--- projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/runtime/TokenImpl.java 2008-11-01 12:50:41 UTC (rev 2744)
+++ projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/runtime/TokenImpl.java 2008-11-01 17:37:34 UTC (rev 2745)
@@ -25,7 +25,6 @@
import org.hibernate.Session;
import org.jboss.util.id.UID;
-import org.jbpm.api.client.ProcessEngine;
import org.jbpm.api.model.Process;
import org.jbpm.api.model.SequenceFlow;
import org.jbpm.api.runtime.Attachments;
@@ -33,7 +32,6 @@
import org.jbpm.api.runtime.ExecutionContext;
import org.jbpm.api.runtime.Token;
import org.jbpm.api.runtime.Attachments.Key;
-import org.jbpm.api.service.PersistenceService;
/**
* A Token is a descriptive construct used to describe how the flow of a Process will proceed at runtime.
@@ -112,25 +110,15 @@
@Override
public Session getSession()
{
- if (session == null)
- {
- ProcessEngine engine = process.getProcessEngine();
- PersistenceService service = engine.getService(PersistenceService.class);
- session = service.createSession();
- }
return session;
}
-
+
@Override
- public void closeSession()
+ public void setSession(Session session)
{
- if (session != null)
- {
- session.close();
- session = null;
- }
+ this.session = session;
}
-
+
@Override
public MutableToken copyToken()
{
Modified: projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/runtime/TransactionInterceptor.java
===================================================================
--- projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/runtime/TransactionInterceptor.java 2008-11-01 12:50:41 UTC (rev 2744)
+++ projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/runtime/TransactionInterceptor.java 2008-11-01 17:37:34 UTC (rev 2745)
@@ -33,7 +33,7 @@
import org.slf4j.LoggerFactory;
/**
- * An interceptor that handles Node transactions
+ * An interceptor that handles Node transactions
*
* @author thomas.diesler(a)jboss.com
* @since 07-Oct-2008
@@ -41,42 +41,38 @@
public class TransactionInterceptor implements NodeInterceptor
{
final static Logger log = LoggerFactory.getLogger(TransactionInterceptor.class);
-
+
@Override
public void execute(RuntimeContext rtContext)
{
Node node = rtContext.getNode();
Token token = rtContext.getToken();
-
+
// Begin the Tx
Session session = token.getSession();
Transaction tx = session.beginTransaction();
TransactionAssociation.setTransaction(tx);
-
+
try
{
// Load the node
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
rtContext.next();
-
+
// Save the node and commit the Tx
- if (session.isOpen())
- {
- service.saveNode(session, node);
- tx.commit();
- }
+ service.saveNode(session, node);
+ tx.commit();
}
catch (RuntimeException rte)
{
try
{
// Rollback the Tx
- if (session.isOpen())
- tx.rollback();
+ tx.rollback();
}
catch (RuntimeException rbex)
{
Modified: projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/service/HibernatePersistenceServiceImpl.java
===================================================================
--- projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/service/HibernatePersistenceServiceImpl.java 2008-11-01 12:50:41 UTC (rev 2744)
+++ projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/service/HibernatePersistenceServiceImpl.java 2008-11-01 17:37:34 UTC (rev 2745)
@@ -32,7 +32,6 @@
import org.hibernate.ObjectNotFoundException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
-import org.hibernate.StaleStateException;
import org.hibernate.Transaction;
import org.hibernate.cfg.AnnotationConfiguration;
import org.jbpm.api.NodeNotFoundException;
@@ -209,10 +208,6 @@
session.delete(proc);
tx.commit();
}
- catch (StaleStateException ex)
- {
- System.out.println("FIXME: intermitent " + ex);
- }
finally
{
session.close();
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:50:41 UTC (rev 2744)
+++ projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/service/MessageServiceImpl.java 2008-11-01 17:37:34 UTC (rev 2745)
@@ -66,6 +66,7 @@
{
if (tx != null)
{
+ log.debug("Register message with Tx: " + msg);
tx.registerSynchronization(new MessageWrapper(this, msg));
}
else
@@ -89,14 +90,14 @@
@Override
public void afterCompletion(int status)
{
- if (status != Status.STATUS_COMMITTED)
+ if (status == Status.STATUS_COMMITTED)
{
- log.debug("Ignore message after completion: status=" + status + "," + msg);
+ log.debug("Send message on Tx commit: " + msg);
+ service.sendMessageTx(msg, null);
}
else
{
- log.debug("Send message after completion " + msg);
- service.sendMessageTx(msg, null);
+ log.warn("Ignore message on Tx completion: status=" + status + "," + msg);
}
}
Modified: projects/spec/trunk/modules/ri/src/main/resources/jbpm-cfg-beans.xml
===================================================================
--- projects/spec/trunk/modules/ri/src/main/resources/jbpm-cfg-beans.xml 2008-11-01 12:50:41 UTC (rev 2744)
+++ projects/spec/trunk/modules/ri/src/main/resources/jbpm-cfg-beans.xml 2008-11-01 17:37:34 UTC (rev 2745)
@@ -62,7 +62,8 @@
<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.PersistenceSessionInterceptor</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>
17 years, 5 months
JBoss JBPM SVN: r2744 - in projects/spec/trunk/modules: ri/src/main/java/org/jbpm/ri/service and 1 other directory.
by do-not-reply@jboss.org
Author: thomas.diesler(a)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)
17 years, 5 months