[jbpm-commits] JBoss JBPM SVN: r1949 - in jbossbpm/spec/trunk/modules: ri/src/main/java/org/jboss/bpm/ri/client and 3 other directories.
do-not-reply at jboss.org
do-not-reply at jboss.org
Thu Aug 21 04:28:05 EDT 2008
Author: thomas.diesler at jboss.com
Date: 2008-08-21 04:28:04 -0400 (Thu, 21 Aug 2008)
New Revision: 1949
Removed:
jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/ri/client/RunnableToken.java
jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/cts/process/ProcessStartTest.java
Modified:
jbossbpm/spec/trunk/modules/dialects/api10/src/test/java/org/jboss/bpm/dialect/api10/include/ProcessIncludeTest.java
jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/ri/client/ExecutionManagerImpl.java
jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/ri/model/impl/InclusiveGatewayImpl.java
jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/ri/model/impl/ParallelGatewayImpl.java
jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/ri/model/impl/TokenExecutorImpl.java
jbossbpm/spec/trunk/modules/ri/src/test/java/org/jboss/bpm/runtime/ExecutionManagerTest.java
Log:
Fix parallel token creation
Modified: jbossbpm/spec/trunk/modules/dialects/api10/src/test/java/org/jboss/bpm/dialect/api10/include/ProcessIncludeTest.java
===================================================================
--- jbossbpm/spec/trunk/modules/dialects/api10/src/test/java/org/jboss/bpm/dialect/api10/include/ProcessIncludeTest.java 2008-08-21 07:28:15 UTC (rev 1948)
+++ jbossbpm/spec/trunk/modules/dialects/api10/src/test/java/org/jboss/bpm/dialect/api10/include/ProcessIncludeTest.java 2008-08-21 08:28:04 UTC (rev 1949)
@@ -23,9 +23,10 @@
// $Id$
-import org.jboss.bpm.ProcessTimeoutException;
import org.jboss.bpm.client.ProcessManager;
+import org.jboss.bpm.model.Message;
import org.jboss.bpm.model.Process;
+import org.jboss.bpm.model.Property;
import org.jboss.bpm.test.DefaultEngineTestCase;
/**
@@ -36,21 +37,18 @@
*/
public class ProcessIncludeTest extends DefaultEngineTestCase
{
-
+ /**
+ * Test the the process contains the message definition from the include
+ */
public void testInclude() throws Exception
{
ProcessManager pm = ProcessManager.locateProcessManager();
Process proc = pm.createProcess(getResourceURL("include/proc-api10.xml"));
- proc.startProcess();
- try
- {
- proc.waitForEnd(500);
- fail("ProcessTimeoutException expected");
- }
- catch (ProcessTimeoutException ex)
- {
- // expected
- }
+ Message procMsg = proc.getMessage("FooMsg");
+ assertNotNull(procMsg);
+
+ Property prop = procMsg.getProperty("foo");
+ assertEquals("bar", prop.getValue());
}
}
Modified: jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/ri/client/ExecutionManagerImpl.java
===================================================================
--- jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/ri/client/ExecutionManagerImpl.java 2008-08-21 07:28:15 UTC (rev 1948)
+++ jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/ri/client/ExecutionManagerImpl.java 2008-08-21 08:28:04 UTC (rev 1949)
@@ -74,17 +74,26 @@
@Override
public void startProcess(Process proc, Attachments att)
{
+ // Prepare the process for start
+ startProcessPrepare(proc);
+
// Get the None Start Event if there is one and start the initial flow
StartEvent start = getNoneStartEvent(proc);
- if (start == null)
- startProcessPrepare(proc);
- else
+ if (start != null)
+ {
+ if (proc.getProcessStatus() == ProcessStatus.Active)
+ throw new IllegalStateException("Cannot start an already active process");
+
startProcessInternal(start, att);
+ }
}
@Override
public void startProcess(StartEvent start, Attachments att)
{
+ // Prepare the process for start
+ startProcessPrepare(start.getProcess());
+
startProcessInternal(start, att);
}
@@ -104,9 +113,6 @@
RuntimeProcess rtProc = getRuntimeProcess(proc, false);
boolean startProcessThread = (rtProc == null);
- // Prepare for start
- startProcessPrepare(proc);
-
// Create initial Token
TokenImpl initialToken = new TokenImpl(att);
InitialFlow initialFlow = new InitialFlow(start);
Deleted: jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/ri/client/RunnableToken.java
===================================================================
--- jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/ri/client/RunnableToken.java 2008-08-21 07:28:15 UTC (rev 1948)
+++ jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/ri/client/RunnableToken.java 2008-08-21 08:28:04 UTC (rev 1949)
@@ -1,150 +0,0 @@
-/*
- * 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.jboss.bpm.ri.client;
-
-// $Id$
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.jboss.bpm.model.ConnectingObject;
-import org.jboss.bpm.model.FlowObject;
-import org.jboss.bpm.model.Process;
-import org.jboss.bpm.model.Process.ProcessStatus;
-import org.jboss.bpm.ri.model.impl.FlowObjectImpl;
-import org.jboss.bpm.ri.model.impl.ProcessImpl;
-import org.jboss.bpm.ri.runtime.DelegatingToken;
-import org.jboss.bpm.ri.runtime.MutableToken;
-import org.jboss.bpm.ri.runtime.RuntimeProcess;
-import org.jboss.bpm.runtime.HandlerSupport;
-import org.jboss.bpm.runtime.SignalHandler;
-import org.jboss.bpm.runtime.Token;
-import org.jboss.bpm.runtime.TokenExecutor;
-import org.jboss.bpm.runtime.Token.TokenStatus;
-
-/**
- * The RunnableToken implements the logic to move the token from one FlowObject to the next.
- *
- * @author thomas.diesler at jboss.com
- * @since 18-Jun-2008
- */
-public class RunnableToken implements Runnable
-{
- // provide logging
- private static final Log log = LogFactory.getLog(RunnableToken.class);
-
- private RuntimeProcess rtProc;
- private MutableToken token;
-
- public RunnableToken(RuntimeProcess rtProc, MutableToken token)
- {
- this.rtProc = rtProc;
- this.token = token;
- }
-
- public Token getToken()
- {
- return token;
- }
-
- public void run()
- {
- TokenExecutor tokenExecutor = rtProc.getTokenExecutor();
- Process proc = rtProc.getProcess();
- try
- {
- ConnectingObject flow = token.getFlow();
- if (flow == null)
- throw new IllegalStateException("Cannot obtain initial flow");
-
- TokenStatus tokStatus = token.getTokenStatus();
- ProcessStatus procStatus = proc.getProcessStatus();
- while (procStatus == ProcessStatus.Active && tokStatus == TokenStatus.Started)
- {
- flow = token.getFlow();
-
- // Get the target and its handlers
- FlowObjectImpl targetFlowObject = (FlowObjectImpl)flow.getTargetRef();
- SignalHandler sigHandler = getSignalHandler(targetFlowObject);
-
- // Synchronize execution on the target FlowObject
- synchronized (targetFlowObject)
- {
- try
- {
- // Execute the FlowObject
- sigHandler.throwEnterSignal();
-
- // Create a Token that includes properties from the current Activity
- DelegatingToken delToken = new DelegatingToken(token);
-
- // Execute the target FlowObject
- targetFlowObject.execute(delToken);
-
- // Transfer the token to the FlowHandler
- targetFlowObject.executeFlowHandler(tokenExecutor, delToken);
- }
- catch (RuntimeException rte)
- {
- log.error("Process error", rte);
- targetFlowObject.reset();
- throw rte;
- }
- finally
- {
- sigHandler.throwExitSignal();
- }
-
- tokStatus = token.getTokenStatus();
- procStatus = proc.getProcessStatus();
- }
- }
- }
- catch (RuntimeException rte)
- {
- log.error("Process aborted: " + proc, rte);
- ((ProcessImpl)proc).setRuntimeException(rte);
- tokenExecutor.destroy(token);
- }
- finally
- {
- if (token.getTokenStatus() != TokenStatus.Suspended)
- tokenExecutor.destroy(token);
- }
- }
-
- private SignalHandler getSignalHandler(FlowObject target)
- {
- HandlerSupport handlerSupport = getHandlerSupport(target);
- SignalHandler handler = handlerSupport.getSignalHandler();
- if (handler == null)
- throw new IllegalStateException("Cannot obtain signal handler from: " + target);
-
- return handler;
- }
-
- private HandlerSupport getHandlerSupport(FlowObject fo)
- {
- if (fo instanceof HandlerSupport == false)
- throw new IllegalStateException("Flow object does not implement handler support: " + fo);
- return (HandlerSupport)fo;
- }
-}
\ No newline at end of file
Modified: jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/ri/model/impl/InclusiveGatewayImpl.java
===================================================================
--- jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/ri/model/impl/InclusiveGatewayImpl.java 2008-08-21 07:28:15 UTC (rev 1948)
+++ jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/ri/model/impl/InclusiveGatewayImpl.java 2008-08-21 08:28:04 UTC (rev 1949)
@@ -72,32 +72,38 @@
{
FlowObject sourceRef = token.getFlow().getSourceRef();
log.debug("Propagate token comming from: " + sourceRef);
-
+
// Get the applicable gates
List<Gate> applicableGates = getApplicableGates(token);
log.debug("applicableGates: " + applicableGates);
-
- // Destroy the incomming token if there are
+
+ // Destroy the incomming token if there are
// more than one applicable gates
if (applicableGates.size() > 1)
tokenExecutor.destroy(token);
-
- for (Gate aux : applicableGates)
+
+ if (applicableGates.size() == 1)
{
- SequenceFlow outFlow = aux.getOutgoingSequenceFlow();
- if (applicableGates.size() == 1)
+ SequenceFlow outFlow = applicableGates.get(0).getOutgoingSequenceFlow();
+ tokenExecutor.move(token, outFlow);
+ }
+ else
+ {
+ List<Token> outTokens = new ArrayList<Token>();
+ for (Gate aux : applicableGates)
{
- tokenExecutor.move(token, outFlow);
+ SequenceFlow outFlow = aux.getOutgoingSequenceFlow();
+ Token outToken = token.copyToken();
+ tokenExecutor.create(outToken, outFlow);
+ outTokens.add(outToken);
}
- else
+ for (Token outToken : outTokens)
{
- Token outToken = token.copyToken();
- tokenExecutor.create(outToken, outFlow);
tokenExecutor.start(outToken);
}
}
}
-
+
// Get applicable gates which' condition evaluates to TRUE
// Fall back to the default gate if there is one
// Choke if there is no applicable gate
Modified: jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/ri/model/impl/ParallelGatewayImpl.java
===================================================================
--- jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/ri/model/impl/ParallelGatewayImpl.java 2008-08-21 07:28:15 UTC (rev 1948)
+++ jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/ri/model/impl/ParallelGatewayImpl.java 2008-08-21 08:28:04 UTC (rev 1949)
@@ -23,7 +23,9 @@
//$Id$
+import java.util.ArrayList;
import java.util.HashSet;
+import java.util.List;
import java.util.Set;
import org.apache.commons.logging.Log;
@@ -109,13 +111,18 @@
if (outToken != null)
{
// Start a copy of the outgoing token for every gate
+ List<Token> outTokens = new ArrayList<Token>();
for(Gate gate : getGates())
{
SequenceFlow outFlow = gate.getOutgoingSequenceFlow();
- Token copyToken = outToken.copyToken();
- tokenExecutor.create(copyToken, outFlow);
- tokenExecutor.start(copyToken);
+ outToken = outToken.copyToken();
+ tokenExecutor.create(outToken, outFlow);
+ outTokens.add(outToken);
}
+ for (Token auxToken : outTokens)
+ {
+ tokenExecutor.start(auxToken);
+ }
// Destroy the received tokens
for (Token auxToken : receivedTokens)
Modified: jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/ri/model/impl/TokenExecutorImpl.java
===================================================================
--- jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/ri/model/impl/TokenExecutorImpl.java 2008-08-21 07:28:15 UTC (rev 1948)
+++ jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/ri/model/impl/TokenExecutorImpl.java 2008-08-21 08:28:04 UTC (rev 1949)
@@ -98,7 +98,7 @@
mutableToken.setFlow(initialFlow);
log.debug("Create Token: " + token);
-
+
RunnableToken rtToken = new RunnableToken(rtProc, mutableToken);
runnableTokens.put(token.getTokenID(), rtToken);
}
@@ -254,40 +254,36 @@
}
// Notify Process on token termination
- terminateToken(proc, false);
+ terminateToken(proc);
}
catch (RuntimeException rte)
{
log.error("Process aborted: " + proc, rte);
((ProcessImpl)proc).setRuntimeException(rte);
+ log.debug("Terminate all suspended tokens");
+ Set<String> keySet = new HashSet<String>(runnableTokens.keySet());
+ for (String tokID : keySet)
+ {
+ RunnableToken rtTok = runnableTokens.get(tokID);
+ Token auxToken = rtTok.getToken();
+ if (auxToken.getTokenStatus() == TokenStatus.Suspended)
+ tokenExecutor.destroy(auxToken);
+ }
+
// Notify Process on token termination
- terminateToken(proc, true);
+ terminateToken(proc);
}
}
- private void terminateToken(Process proc, boolean allTokens)
+ private void terminateToken(Process proc)
{
// Destroy the token if not already done
synchronized (runnableTokens)
{
- if (allTokens)
- {
- log.debug("Terminate all tokens: " + runnableTokens);
- Set<String> keySet = new HashSet<String>(runnableTokens.keySet());
- for (String tokID : keySet)
- {
- RunnableToken rtTok = runnableTokens.get(tokID);
- Token auxToken = rtTok.getToken();
- tokenExecutor.destroy(auxToken);
- }
- }
- else
- {
- TokenStatus status = token.getTokenStatus();
- if (status != TokenStatus.Suspended && status != TokenStatus.Destroyed)
- tokenExecutor.destroy(token);
- }
+ TokenStatus status = token.getTokenStatus();
+ if (status != TokenStatus.Suspended && status != TokenStatus.Destroyed)
+ tokenExecutor.destroy(token);
}
// Notify the runtime process
Modified: jbossbpm/spec/trunk/modules/ri/src/test/java/org/jboss/bpm/runtime/ExecutionManagerTest.java
===================================================================
--- jbossbpm/spec/trunk/modules/ri/src/test/java/org/jboss/bpm/runtime/ExecutionManagerTest.java 2008-08-21 07:28:15 UTC (rev 1948)
+++ jbossbpm/spec/trunk/modules/ri/src/test/java/org/jboss/bpm/runtime/ExecutionManagerTest.java 2008-08-21 08:28:04 UTC (rev 1949)
@@ -26,6 +26,7 @@
import org.jboss.bpm.ProcessTimeoutException;
import org.jboss.bpm.client.ExecutionManager;
import org.jboss.bpm.client.ProcessManager;
+import org.jboss.bpm.client.SignalListener;
import org.jboss.bpm.client.SignalManager;
import org.jboss.bpm.model.EventBuilder;
import org.jboss.bpm.model.Process;
@@ -45,6 +46,9 @@
*/
public class ExecutionManagerTest extends DefaultEngineTestCase
{
+ /**
+ * Test the normal sequence flow
+ */
public void testSequenceFlow() throws Exception
{
ProcessBuilder procBuilder = ProcessBuilderFactory.newInstance().newProcessBuilder();
@@ -62,6 +66,9 @@
assertNull("Process should be unregistered", pm.getProcessByID(proc.getID()));
}
+ /**
+ * Test restart of the proces after completion
+ */
public void testRestartSequenceFlow() throws Exception
{
ProcessBuilder procBuilder = ProcessBuilderFactory.newInstance().newProcessBuilder();
@@ -84,11 +91,14 @@
assertNull("Process should be unregistered", pm.getProcessByID(proc.getID()));
}
+ /**
+ * Test process aboertion after RTE in Task
+ */
public void testTaskRuntimeException() throws Exception
{
ProcessBuilder procBuilder = ProcessBuilderFactory.newInstance().newProcessBuilder();
procBuilder.addProcess(getName()).addStartEvent("Start").addSequenceFlow("Task");
- procBuilder.addTask("Task").addExecutionHandler(TaskHandler.class).addSequenceFlow("End").addEndEvent("End");
+ procBuilder.addTask("Task").addExecutionHandler(ThrowHandler.class).addSequenceFlow("End").addEndEvent("End");
Process proc = procBuilder.getProcess();
ExecutionManager em = ExecutionManager.locateExecutionManager();
@@ -111,6 +121,9 @@
assertNull("Process should be unregistered", pm.getProcessByID(proc.getID()));
}
+ /**
+ * Test proces start from SignalStartEvent
+ */
public void testStartSignal() throws Exception
{
ProcessBuilder procBuilder = ProcessBuilderFactory.newInstance().newProcessBuilder();
@@ -132,6 +145,9 @@
assertNull("Process should be unregistered", pm.getProcessByID(proc.getID()));
}
+ /**
+ * Test proces timeout with no start signal
+ */
public void testStartSignalTimeout() throws Exception
{
ProcessBuilder procBuilder = ProcessBuilderFactory.newInstance().newProcessBuilder();
@@ -160,8 +176,45 @@
assertNull("Process should be unregistered", pm.getProcessByID(proc.getID()));
}
+ public void testStartTwice() throws Exception
+ {
+ ProcessBuilder procBuilder = ProcessBuilderFactory.newInstance().newProcessBuilder();
+ procBuilder.addProcess(getName()).addStartEvent("Start").addSequenceFlow("TaskA").
+ addTask("TaskA").addSequenceFlow("End").addEndEvent("End");
+ final Process proc = procBuilder.getProcess();
+
+ class TestSignalListener implements SignalListener
+ {
+ RuntimeException signalException;
+
+ public void catchSignal(Signal signal)
+ {
+ if (signal.getSignalType() == SignalType.SYSTEM_TASK_ENTER)
+ {
+ try
+ {
+ proc.startProcess();
+ fail("Cannot start process twice");
+ }
+ catch (RuntimeException rte)
+ {
+ signalException = rte;
+ }
+ }
+ }
+ }
+ TestSignalListener sigListener = new TestSignalListener();
+ SignalManager sm = SignalManager.locateSignalManager();
+ sm.addSignalListener(getName(), sigListener);
+
+ proc.startProcess();
+ proc.waitForEnd();
+
+ assertNotNull("Signal Exception expected", sigListener.signalException);
+ }
+
@SuppressWarnings("serial")
- public static class TaskHandler implements ExecutionHandler
+ public static class ThrowHandler implements ExecutionHandler
{
public void execute(Token token)
{
Deleted: jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/cts/process/ProcessStartTest.java
===================================================================
--- jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/cts/process/ProcessStartTest.java 2008-08-21 07:28:15 UTC (rev 1948)
+++ jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/cts/process/ProcessStartTest.java 2008-08-21 08:28:04 UTC (rev 1949)
@@ -1,110 +0,0 @@
-/*
- * 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.jboss.bpm.cts.process;
-
-// $Id$
-
-import java.util.List;
-
-import javax.management.ObjectName;
-
-import org.jboss.bpm.client.SignalListener;
-import org.jboss.bpm.client.SignalManager;
-import org.jboss.bpm.model.Process;
-import org.jboss.bpm.model.ProcessBuilder;
-import org.jboss.bpm.model.ProcessBuilderFactory;
-import org.jboss.bpm.model.Signal;
-import org.jboss.bpm.model.Signal.SignalType;
-import org.jboss.bpm.test.DefaultEngineTestCase;
-
-/**
- * Test the process start opertaions
- *
- * @author thomas.diesler at jboss.com
- * @since 08-Jul-2008
- */
-public class ProcessStartTest extends DefaultEngineTestCase
-{
- private RuntimeException startException;
-
- public void testStartProcessReturn() throws Exception
- {
- Process proc = getProcess();
- ObjectName procID = proc.getID();
- assertEquals(procID, proc.startProcess());
- proc.waitForEnd();
- }
-
- public void testStartTwice() throws Exception
- {
- startException = null;
-
- final Process proc = getProcess();
- SignalListener signalListener = new SignalListener()
- {
- public void catchSignal(Signal signal)
- {
- if (signal.getSignalType() == SignalType.SYSTEM_TASK_ENTER)
- {
- try
- {
- proc.startProcess();
- fail("Cannot start process twice");
- }
- catch (RuntimeException rte)
- {
- startException = rte;
- }
- }
- }
- };
- SignalManager sm = SignalManager.locateSignalManager();
- sm.addSignalListener(getName(), signalListener);
-
- proc.startProcess();
- proc.waitForEnd();
-
- assertNotNull("Start exception expected", startException);
- }
-
- public void testProcessRestart() throws Exception
- {
- Process proc = getProcess();
-
- proc.startProcess();
- proc.waitForEnd();
-
- proc.startProcess();
- proc.waitForEnd();
-
- List<Signal> signals = getSignals(SignalType.SYSTEM_END_EVENT_EXIT);
- assertEquals(2, signals.size());
- }
-
- private Process getProcess()
- {
- ProcessBuilder builder = ProcessBuilderFactory.newInstance().newProcessBuilder();
- Process proc = builder.addProcess(getName()).addStartEvent("Start").addSequenceFlow("TaskA").
- addTask("TaskA").addSequenceFlow("End").addEndEvent("End").getProcess();
- return proc;
- }
-}
More information about the jbpm-commits
mailing list