JBoss JBPM SVN: r1871 - jbpm4/pvm/trunk/modules/core/src/main/java/org/jbpm/pvm/test/base.
by do-not-reply@jboss.org
Author: porcherg
Date: 2008-08-12 07:06:47 -0400 (Tue, 12 Aug 2008)
New Revision: 1871
Modified:
jbpm4/pvm/trunk/modules/core/src/main/java/org/jbpm/pvm/test/base/Db.java
Log:
remove unused code
Modified: jbpm4/pvm/trunk/modules/core/src/main/java/org/jbpm/pvm/test/base/Db.java
===================================================================
--- jbpm4/pvm/trunk/modules/core/src/main/java/org/jbpm/pvm/test/base/Db.java 2008-08-12 10:25:29 UTC (rev 1870)
+++ jbpm4/pvm/trunk/modules/core/src/main/java/org/jbpm/pvm/test/base/Db.java 2008-08-12 11:06:47 UTC (rev 1871)
@@ -25,7 +25,6 @@
import java.util.Iterator;
import java.util.List;
-import org.hibernate.FlushMode;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
@@ -109,7 +108,6 @@
}
Session session = sessionFactory.openSession();
- session.setFlushMode(FlushMode.COMMIT);
try {
for (String query : cleanSql) {
session.createSQLQuery(query).executeUpdate();
17 years, 8 months
JBoss JBPM SVN: r1870 - jbpm4/pvm/trunk/modules/core/src/test/java/org/jbpm/pvm/internal/jobexecutor.
by do-not-reply@jboss.org
Author: porcherg
Date: 2008-08-12 06:25:29 -0400 (Tue, 12 Aug 2008)
New Revision: 1870
Modified:
jbpm4/pvm/trunk/modules/core/src/test/java/org/jbpm/pvm/internal/jobexecutor/JobExecutorTest.java
Log:
use a command for areJobsAvailable() (the transaction was never completed)
Modified: jbpm4/pvm/trunk/modules/core/src/test/java/org/jbpm/pvm/internal/jobexecutor/JobExecutorTest.java
===================================================================
--- jbpm4/pvm/trunk/modules/core/src/test/java/org/jbpm/pvm/internal/jobexecutor/JobExecutorTest.java 2008-08-12 10:23:37 UTC (rev 1869)
+++ jbpm4/pvm/trunk/modules/core/src/test/java/org/jbpm/pvm/internal/jobexecutor/JobExecutorTest.java 2008-08-12 10:25:29 UTC (rev 1870)
@@ -284,22 +284,17 @@
}
boolean areJobsAvailable() {
- Environment environment = getEnvironmentFactory().openEnvironment();
- try {
- JobDbSession jobDbSession = environment.get(JobDbSession.class);
-
- JobImpl<?> firstAcquirableJob = jobDbSession.findFirstAcquirableJob();
- if (firstAcquirableJob!=null) {
- log.debug("found more jobs to process");
- return true;
+ return commandService.execute(new Command<Boolean>() {
+ public Boolean execute(Environment environment) throws Exception {
+ JobDbSession jobDbSession = environment.get(JobDbSession.class);
+
+ JobImpl<?> firstAcquirableJob = jobDbSession.findFirstAcquirableJob();
+ if (firstAcquirableJob!=null) {
+ log.debug("found more jobs to process");
+ return true;
+ }
+ return false;
}
- } catch (RuntimeException e) {
- environment.get(Transaction.class).setRollbackOnly();
- throw e;
- } finally {
- environment.close();
- }
- log.debug("no more jobs to process");
- return false;
+ });
}
}
17 years, 8 months
JBoss JBPM SVN: r1869 - jbpm4/pvm/trunk/modules/core/src/main/java/org/jbpm/pvm/test/base.
by do-not-reply@jboss.org
Author: porcherg
Date: 2008-08-12 06:23:37 -0400 (Tue, 12 Aug 2008)
New Revision: 1869
Modified:
jbpm4/pvm/trunk/modules/core/src/main/java/org/jbpm/pvm/test/base/Db.java
Log:
don't open environment to clean the db (get objects from environmentFactory)
Modified: jbpm4/pvm/trunk/modules/core/src/main/java/org/jbpm/pvm/test/base/Db.java
===================================================================
--- jbpm4/pvm/trunk/modules/core/src/main/java/org/jbpm/pvm/test/base/Db.java 2008-08-12 10:20:33 UTC (rev 1868)
+++ jbpm4/pvm/trunk/modules/core/src/main/java/org/jbpm/pvm/test/base/Db.java 2008-08-12 10:23:37 UTC (rev 1869)
@@ -25,6 +25,7 @@
import java.util.Iterator;
import java.util.List;
+import org.hibernate.FlushMode;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
@@ -33,8 +34,6 @@
import org.hibernate.engine.SessionFactoryImplementor;
import org.hibernate.mapping.ForeignKey;
import org.hibernate.mapping.Table;
-import org.jbpm.pvm.env.Context;
-import org.jbpm.pvm.env.Environment;
import org.jbpm.pvm.env.EnvironmentFactory;
@@ -46,81 +45,77 @@
private static final String CLEAN_SQL_KEY = "cleanSql";
public static void clean(EnvironmentFactory environmentFactory) {
- Environment environment = environmentFactory.openEnvironment();
- try {
- SessionFactory sessionFactory = environment.get(SessionFactory.class);
- String[] cleanSql = (String[]) environment.getContext(Context.CONTEXTNAME_ENVIRONMENT_FACTORY).get(CLEAN_SQL_KEY);
-
- if (cleanSql == null) {
- Configuration configuration = environment.get(Configuration.class);
-
- SessionFactoryImplementor sessionFactoryImplementor = (SessionFactoryImplementor) sessionFactory;
- Dialect dialect = sessionFactoryImplementor.getDialect();
-
- // loop over all foreign key constraints
- List<String> dropForeignKeysSql = new ArrayList<String>();
- List<String> createForeignKeysSql = new ArrayList<String>();
- Iterator<Table> iter = configuration.getTableMappings();
- while (iter.hasNext()) {
- Table table = (Table) iter.next();
- if (table.isPhysicalTable()) {
- String catalog = table.getCatalog();
- String schema = table.getSchema();
- Iterator<ForeignKey> subIter = table.getForeignKeyIterator();
- while (subIter.hasNext()) {
- ForeignKey fk = (ForeignKey) subIter.next();
- if (fk.isPhysicalConstraint()) {
- // collect the drop foreign key constraint sql
- dropForeignKeysSql.add(fk.sqlDropString(dialect, catalog, schema));
- // MySQLDialect creates an index for each foreign key.
- // see
- // http://opensource.atlassian.com/projects/hibernate/browse/HHH-2155
- // This index should be dropped or an error will be thrown during
- // the creation phase
- if (dialect instanceof MySQLDialect) {
- dropForeignKeysSql.add("alter table " + table.getName() + " drop key " + fk.getName());
- }
- // and collect the create foreign key constraint sql
- createForeignKeysSql.add(fk.sqlCreateString(dialect, sessionFactoryImplementor, catalog, schema));
+ SessionFactory sessionFactory = environmentFactory.get(SessionFactory.class);
+ String[] cleanSql = (String[]) environmentFactory.get(CLEAN_SQL_KEY);
+
+ if (cleanSql == null) {
+ Configuration configuration = environmentFactory.get(Configuration.class);
+
+ SessionFactoryImplementor sessionFactoryImplementor = (SessionFactoryImplementor) sessionFactory;
+ Dialect dialect = sessionFactoryImplementor.getDialect();
+
+ // loop over all foreign key constraints
+ List<String> dropForeignKeysSql = new ArrayList<String>();
+ List<String> createForeignKeysSql = new ArrayList<String>();
+ Iterator<Table> iter = configuration.getTableMappings();
+ while (iter.hasNext()) {
+ Table table = (Table) iter.next();
+ if (table.isPhysicalTable()) {
+ String catalog = table.getCatalog();
+ String schema = table.getSchema();
+ Iterator<ForeignKey> subIter = table.getForeignKeyIterator();
+ while (subIter.hasNext()) {
+ ForeignKey fk = (ForeignKey) subIter.next();
+ if (fk.isPhysicalConstraint()) {
+ // collect the drop foreign key constraint sql
+ dropForeignKeysSql.add(fk.sqlDropString(dialect, catalog, schema));
+ // MySQLDialect creates an index for each foreign key.
+ // see
+ // http://opensource.atlassian.com/projects/hibernate/browse/HHH-2155
+ // This index should be dropped or an error will be thrown during
+ // the creation phase
+ if (dialect instanceof MySQLDialect) {
+ dropForeignKeysSql.add("alter table " + table.getName() + " drop key " + fk.getName());
}
+ // and collect the create foreign key constraint sql
+ createForeignKeysSql.add(fk.sqlCreateString(dialect, sessionFactoryImplementor, catalog, schema));
}
}
}
-
- List<String> deleteSql = new ArrayList<String>();
- iter = configuration.getTableMappings();
- while (iter.hasNext()) {
- Table table = (Table) iter.next();
- if (table.isPhysicalTable()) {
- deleteSql.add("delete from " + table.getName());
- }
- }
-
- // glue
- // - drop foreign key constraints
- // - delete contents of all tables
- // - create foreign key constraints
- // together to form the clean script
- List<String> cleanSqlList = new ArrayList<String>();
- cleanSqlList.addAll(dropForeignKeysSql);
- cleanSqlList.addAll(deleteSql);
- cleanSqlList.addAll(createForeignKeysSql);
-
- cleanSql = (String[]) cleanSqlList.toArray(new String[cleanSqlList.size()]);
-
- environment.getContext(Context.CONTEXTNAME_ENVIRONMENT_FACTORY).set(CLEAN_SQL_KEY, cleanSql);
}
-
- Session session = sessionFactory.openSession();
- try {
- for (String query : cleanSql) {
- session.createSQLQuery(query).executeUpdate();
+
+ List<String> deleteSql = new ArrayList<String>();
+ iter = configuration.getTableMappings();
+ while (iter.hasNext()) {
+ Table table = (Table) iter.next();
+ if (table.isPhysicalTable()) {
+ deleteSql.add("delete from " + table.getName());
}
- } finally {
- session.close();
}
+
+ // glue
+ // - drop foreign key constraints
+ // - delete contents of all tables
+ // - create foreign key constraints
+ // together to form the clean script
+ List<String> cleanSqlList = new ArrayList<String>();
+ cleanSqlList.addAll(dropForeignKeysSql);
+ cleanSqlList.addAll(deleteSql);
+ cleanSqlList.addAll(createForeignKeysSql);
+
+ cleanSql = (String[]) cleanSqlList.toArray(new String[cleanSqlList.size()]);
+
+ environmentFactory.set(CLEAN_SQL_KEY, cleanSql);
+ }
+
+ Session session = sessionFactory.openSession();
+ session.setFlushMode(FlushMode.COMMIT);
+ try {
+ for (String query : cleanSql) {
+ session.createSQLQuery(query).executeUpdate();
+ }
} finally {
- environment.close();
+ session.close();
}
}
17 years, 8 months
JBoss JBPM SVN: r1868 - jbpm4/pvm/trunk/modules/core/src/test/java/org/jbpm/pvm/api/db/svc.
by do-not-reply@jboss.org
Author: porcherg
Date: 2008-08-12 06:20:33 -0400 (Tue, 12 Aug 2008)
New Revision: 1868
Modified:
jbpm4/pvm/trunk/modules/core/src/test/java/org/jbpm/pvm/api/db/svc/ExecutionServiceTest.java
jbpm4/pvm/trunk/modules/core/src/test/java/org/jbpm/pvm/api/db/svc/ManagementServiceTest.java
jbpm4/pvm/trunk/modules/core/src/test/java/org/jbpm/pvm/api/db/svc/ProcessServiceTest.java
Log:
svc db tests use only DbTestCase (don't use environment but services)
Modified: jbpm4/pvm/trunk/modules/core/src/test/java/org/jbpm/pvm/api/db/svc/ExecutionServiceTest.java
===================================================================
--- jbpm4/pvm/trunk/modules/core/src/test/java/org/jbpm/pvm/api/db/svc/ExecutionServiceTest.java 2008-08-11 16:55:55 UTC (rev 1867)
+++ jbpm4/pvm/trunk/modules/core/src/test/java/org/jbpm/pvm/api/db/svc/ExecutionServiceTest.java 2008-08-12 10:20:33 UTC (rev 1868)
@@ -32,13 +32,13 @@
import org.jbpm.pvm.ProcessService;
import org.jbpm.pvm.internal.model.ProcessDefinitionImpl;
import org.jbpm.pvm.model.ProcessDefinition;
-import org.jbpm.pvm.test.base.EnvironmentDbTestCase;
+import org.jbpm.pvm.test.base.DbTestCase;
/**
* @author Tom Baeyens
*/
-public class ExecutionServiceTest extends EnvironmentDbTestCase {
+public class ExecutionServiceTest extends DbTestCase {
public void testStartExecutionByName() {
ProcessService processService = getEnvironmentFactory().get(ProcessService.class);
Modified: jbpm4/pvm/trunk/modules/core/src/test/java/org/jbpm/pvm/api/db/svc/ManagementServiceTest.java
===================================================================
--- jbpm4/pvm/trunk/modules/core/src/test/java/org/jbpm/pvm/api/db/svc/ManagementServiceTest.java 2008-08-11 16:55:55 UTC (rev 1867)
+++ jbpm4/pvm/trunk/modules/core/src/test/java/org/jbpm/pvm/api/db/svc/ManagementServiceTest.java 2008-08-12 10:20:33 UTC (rev 1868)
@@ -22,13 +22,13 @@
package org.jbpm.pvm.api.db.svc;
import org.jbpm.pvm.ManagementService;
-import org.jbpm.pvm.test.base.EnvironmentDbTestCase;
+import org.jbpm.pvm.test.base.DbTestCase;
/**
* @author Tom Baeyens
*/
-public class ManagementServiceTest extends EnvironmentDbTestCase {
+public class ManagementServiceTest extends DbTestCase {
public void testGetJobs() {
Modified: jbpm4/pvm/trunk/modules/core/src/test/java/org/jbpm/pvm/api/db/svc/ProcessServiceTest.java
===================================================================
--- jbpm4/pvm/trunk/modules/core/src/test/java/org/jbpm/pvm/api/db/svc/ProcessServiceTest.java 2008-08-11 16:55:55 UTC (rev 1867)
+++ jbpm4/pvm/trunk/modules/core/src/test/java/org/jbpm/pvm/api/db/svc/ProcessServiceTest.java 2008-08-12 10:20:33 UTC (rev 1868)
@@ -29,12 +29,12 @@
import org.jbpm.pvm.PvmException;
import org.jbpm.pvm.internal.model.ProcessDefinitionImpl;
import org.jbpm.pvm.model.ProcessDefinition;
-import org.jbpm.pvm.test.base.EnvironmentDbTestCase;
+import org.jbpm.pvm.test.base.DbTestCase;
/**
* @author Tom Baeyens
*/
-public class ProcessServiceTest extends EnvironmentDbTestCase {
+public class ProcessServiceTest extends DbTestCase {
public void testDuplicateDeployment() {
17 years, 8 months
JBoss JBPM SVN: r1867 - in jbossbpm/spec/trunk/modules: api/src/main/java/org/jboss/bpm/model and 5 other directories.
by do-not-reply@jboss.org
Author: thomas.diesler(a)jboss.com
Date: 2008-08-11 12:55:55 -0400 (Mon, 11 Aug 2008)
New Revision: 1867
Modified:
jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/client/ExecutionManager.java
jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/EventBuilder.java
jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/Signal.java
jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/runtime/FlowScheduler.java
jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/runtime/RuntimeProcess.java
jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/client/internal/ExecutionManagerImpl.java
jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/ActivityImpl.java
jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/EventBuilderImpl.java
jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/ExclusiveGatewayImpl.java
jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/FlowSchedulerImpl.java
jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/IntermediateEventImpl.java
jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/ParallelGatewayImpl.java
jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/ProcessImpl.java
jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/RuntimeProcessImpl.java
jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/StartEventImpl.java
jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/runtime/internal/TokenImpl.java
jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/cts/gateway/exclusive/ExclusiveMergeTest.java
Log:
WIP
Modified: jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/client/ExecutionManager.java
===================================================================
--- jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/client/ExecutionManager.java 2008-08-11 12:30:14 UTC (rev 1866)
+++ jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/client/ExecutionManager.java 2008-08-11 16:55:55 UTC (rev 1867)
@@ -23,75 +23,73 @@
// $Id$
-import org.jboss.bpm.model.FlowObject;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.management.ObjectName;
+
import org.jboss.bpm.model.Process;
import org.jboss.bpm.runtime.Attachments;
-import org.jboss.bpm.runtime.ExecutionHandler;
-import org.jboss.bpm.runtime.FlowHandler;
-import org.jboss.bpm.runtime.HandlerSupport;
-import org.jboss.bpm.runtime.SignalHandler;
+import org.jboss.bpm.runtime.RuntimeProcess;
/**
- * The ExecutionManager executes processes
+ * The ExecutionManager executes processes
*
* @author thomas.diesler(a)jboss.com
* @since 18-Jun-2008
*/
public abstract class ExecutionManager
{
+ // The map of active runtime processes
+ private Map<ObjectName, RuntimeProcess> runtimeProcesses = new HashMap<ObjectName, RuntimeProcess>();
+
// Hide public constructor
protected ExecutionManager()
{
}
- /**
+ /**
* Get the ProcessEngine
*/
public ProcessEngine getProcessEngine()
{
return ProcessEngineLocator.locateProcessEngine();
}
+
+ /**
+ * Locate the ExecutionManager
+ */
+ public static ExecutionManager locateExecutionManager()
+ {
+ ProcessEngine engine = ProcessEngineLocator.locateProcessEngine();
+ return engine.getExecutionManager();
+ }
/**
* Start the Process and return a Future
+ *
* @param proc The Process to start
* @param att The Attachments in the ExecutionContext
*/
public abstract void startProcess(Process proc, Attachments att);
- protected ExecutionHandler getExecutionHandler(FlowObject target)
+ /**
+ * Get a {@link RuntimeProcess} for a given processID
+ * @return null if there is no such process
+ */
+ public RuntimeProcess getRuntimeProcess(ObjectName procID)
{
- HandlerSupport exfo = getHandlerSupport(target);
- ExecutionHandler handler = exfo.getExecutionHandler();
- if (handler == null)
- throw new IllegalStateException("Cannot obtain execution handler from: " + target);
- return handler;
+ return runtimeProcesses.get(procID);
}
-
- protected SignalHandler getSignalHandler(FlowObject target)
+
+ protected void addRuntimeProcess(RuntimeProcess rtProc)
{
- HandlerSupport exfo = getHandlerSupport(target);
- SignalHandler handler = exfo.getSignalHandler();
- if (handler == null)
- throw new IllegalStateException("Cannot obtain signal handler from: " + target);
-
- return handler;
+ ObjectName procID = rtProc.getProcess().getID();
+ runtimeProcesses.put(procID, rtProc);
}
-
- protected FlowHandler getFlowHandler(FlowObject target)
+
+ protected void removeRuntimeProcess(ObjectName procID)
{
- HandlerSupport exfo = getHandlerSupport(target);
- FlowHandler handler = exfo.getFlowHandler();
- if (handler == null)
- throw new IllegalStateException("Cannot obtain flow handler from: " + target);
-
- return handler;
+ runtimeProcesses.remove(procID);
}
-
- private HandlerSupport getHandlerSupport(FlowObject fo)
- {
- if (fo instanceof HandlerSupport == false)
- throw new IllegalStateException("Flow object is not executable: " + fo);
- return (HandlerSupport)fo;
- }
-}
\ No newline at end of file
+}
Modified: jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/EventBuilder.java
===================================================================
--- jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/EventBuilder.java 2008-08-11 12:30:14 UTC (rev 1866)
+++ jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/EventBuilder.java 2008-08-11 16:55:55 UTC (rev 1867)
@@ -36,5 +36,5 @@
/**
* Add a signal trigger to the last added {@link Event}
*/
- EventBuilder addSignalTrigger(String fromRef, SignalType signalType, String signalMessage);
+ EventBuilder addSignalTrigger(SignalType signalType, String signalMessage);
}
\ No newline at end of file
Modified: jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/Signal.java
===================================================================
--- jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/Signal.java 2008-08-11 12:30:14 UTC (rev 1866)
+++ jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/Signal.java 2008-08-11 16:55:55 UTC (rev 1867)
@@ -21,6 +21,8 @@
*/
package org.jboss.bpm.model;
+import java.io.Serializable;
+
//$Id$
/**
@@ -29,8 +31,10 @@
* @author Thomas.Diesler(a)jboss.com
* @since 08-Jul-2008
*/
-public class Signal
+public class Signal implements Serializable
{
+ private static final long serialVersionUID = 1L;
+
/**
* Defines the types of supported Signals
*/
Modified: jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/runtime/FlowScheduler.java
===================================================================
--- jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/runtime/FlowScheduler.java 2008-08-11 12:30:14 UTC (rev 1866)
+++ jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/runtime/FlowScheduler.java 2008-08-11 16:55:55 UTC (rev 1867)
@@ -26,8 +26,8 @@
import org.jboss.bpm.model.ConnectingObject;
/**
- * The {@link FlowHandler} invokes the FlowScheduler to schedule
- * {@link ConnectingObject} objects together with their associated {@link Token}.
+ * The {@link FlowHandler} invokes the FlowScheduler to schedule {@link Token}s
+ * together with their associated {@link ConnectingObject}.
*
* @author thomas.diesler(a)jboss.com
* @since 08-Jul-2008
@@ -35,8 +35,12 @@
public interface FlowScheduler
{
/**
- * Schedule the given {@link ConnectingObject} and {@link Token}
- * @param flow TODO
+ * Start a given {@link Token} along a {@link ConnectingObject}.
*/
- void scheduleTuple(ConnectingObject flow, Token token);
+ void startToken(ConnectingObject flow, Token token);
+
+ /**
+ * Continue a given {@link Token} along a {@link ConnectingObject}.
+ */
+ void continueToken(ConnectingObject flow, Token token);
}
Modified: jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/runtime/RuntimeProcess.java
===================================================================
--- jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/runtime/RuntimeProcess.java 2008-08-11 12:30:14 UTC (rev 1866)
+++ jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/runtime/RuntimeProcess.java 2008-08-11 16:55:55 UTC (rev 1867)
@@ -42,5 +42,5 @@
/**
* Get the {@link FlowScheduler} for this {@link Process}
*/
- MutableFlowScheduler getFlowScheduler();
+ FlowScheduler getFlowScheduler();
}
\ No newline at end of file
Modified: jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/client/internal/ExecutionManagerImpl.java
===================================================================
--- jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/client/internal/ExecutionManagerImpl.java 2008-08-11 12:30:14 UTC (rev 1866)
+++ jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/client/internal/ExecutionManagerImpl.java 2008-08-11 16:55:55 UTC (rev 1867)
@@ -25,6 +25,7 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.jboss.bpm.InvalidProcessException;
import org.jboss.bpm.client.ExecutionManager;
import org.jboss.bpm.client.SignalManager;
import org.jboss.bpm.model.ConnectingObject;
@@ -34,12 +35,14 @@
import org.jboss.bpm.model.StartEvent;
import org.jboss.bpm.model.Process.Status;
import org.jboss.bpm.model.Signal.SignalType;
+import org.jboss.bpm.model.internal.FlowSchedulerImpl;
import org.jboss.bpm.model.internal.ProcessImpl;
import org.jboss.bpm.model.internal.RuntimeProcessImpl;
import org.jboss.bpm.model.internal.SequenceFlowImpl;
import org.jboss.bpm.runtime.Attachments;
import org.jboss.bpm.runtime.Executable;
import org.jboss.bpm.runtime.FlowHandler;
+import org.jboss.bpm.runtime.HandlerSupport;
import org.jboss.bpm.runtime.MutableFlowScheduler;
import org.jboss.bpm.runtime.RuntimeProcess;
import org.jboss.bpm.runtime.SignalHandler;
@@ -60,29 +63,40 @@
@Override
public void startProcess(Process proc, Attachments att)
{
- ProcessImpl procImpl = (ProcessImpl)proc;
- procImpl.setStatus(Status.Active);
+ ((ProcessImpl)proc).setStatus(Status.Active);
- // Run the process in a thread
- // TODO: one thread per process is not scalable
- ProcessRunner runner = new ProcessRunner(procImpl, att);
- new Thread(runner).start();
+ RuntimeProcessImpl rtProc = new RuntimeProcessImpl(proc);
+ final ProcessRunner runner = new ProcessRunner(rtProc, att);
+ FlowSchedulerImpl.StartCallback callback = new FlowSchedulerImpl.StartCallback()
+ {
+ public void start(Token token)
+ {
+ new Thread(runner).start();
+ }
+ };
+ FlowSchedulerImpl flowScheduler = new FlowSchedulerImpl(callback);
+ rtProc.setScheduler(flowScheduler);
+ addRuntimeProcess(rtProc);
+
+ StartEvent start = getStartEvent(proc);
+ if (start != null)
+ {
+ Token initalToken = new TokenImpl(att);
+ flowScheduler.startToken(new InitialFlow(start), initalToken);
+ }
}
- private void startProcessInternal(ProcessImpl proc, Attachments att)
+ private void startProcessInternal(RuntimeProcess rtProc, Attachments att)
{
- RuntimeProcess rtProc = new RuntimeProcessImpl(proc);
+ ProcessImpl proc = (ProcessImpl)rtProc.getProcess();
String procName = proc.getName();
SignalManager signalManager = getProcessEngine().getSignalManager();
signalManager.throwSignal(procName, new Signal(procName, SignalType.ENTER_PROCESS));
- MutableFlowScheduler flowScheduler = rtProc.getFlowScheduler();
+ MutableFlowScheduler flowScheduler = (MutableFlowScheduler)rtProc.getFlowScheduler();
+
try
{
- Token initalToken = new TokenImpl(att);
- StartEvent start = proc.getStartEvent();
- flowScheduler.scheduleTuple(new InitialFlow(start), initalToken);
-
while (flowScheduler.peekHeadTuple() != null)
{
// Peek the head flow
@@ -123,6 +137,7 @@
finally
{
signalManager.throwSignal(procName, new Signal(procName, Signal.SignalType.EXIT_PROCESS));
+ removeRuntimeProcess(proc.getID());
}
}
@@ -130,10 +145,52 @@
{
if (target instanceof Executable == false)
throw new IllegalStateException("Flow Object is not executable: " + target);
-
+
return (Executable)target;
}
+ private StartEvent getStartEvent(Process proc)
+ {
+ StartEvent start = null;
+ for (StartEvent aux : proc.getFlowObjects(StartEvent.class))
+ {
+ if (aux.getTrigger().size() == 0)
+ {
+ if (start != null)
+ throw new InvalidProcessException("Process cannot have multiple start events with no trigger");
+ start = aux;
+ }
+ }
+ return start;
+ }
+
+ 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 FlowHandler getFlowHandler(FlowObject target)
+ {
+ HandlerSupport handlerSupport = getHandlerSupport(target);
+ FlowHandler handler = handlerSupport.getFlowHandler();
+ if (handler == null)
+ throw new IllegalStateException("Cannot obtain flow 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;
+ }
+
/**
* The initial flow 'to' the StartEvent
*/
@@ -142,25 +199,25 @@
{
InitialFlow(StartEvent start)
{
- super("start");
+ super(start.getName());
setTargetRef(start);
}
}
class ProcessRunner implements Runnable
{
- ProcessImpl proc;
+ RuntimeProcess rtProc;
Attachments att;
- public ProcessRunner(ProcessImpl proc, Attachments att)
+ public ProcessRunner(RuntimeProcess rtProc, Attachments att)
{
- this.proc = proc;
+ this.rtProc = rtProc;
this.att = att;
}
public void run()
{
- startProcessInternal(proc, att);
+ startProcessInternal(rtProc, att);
}
}
}
\ No newline at end of file
Modified: jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/ActivityImpl.java
===================================================================
--- jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/ActivityImpl.java 2008-08-11 12:30:14 UTC (rev 1866)
+++ jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/ActivityImpl.java 2008-08-11 16:55:55 UTC (rev 1867)
@@ -309,7 +309,7 @@
{
public void execute(FlowScheduler scheduler, Token token)
{
- scheduler.scheduleTuple(outFlow, token);
+ scheduler.continueToken(outFlow, token);
}
};
}
Modified: jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/EventBuilderImpl.java
===================================================================
--- jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/EventBuilderImpl.java 2008-08-11 12:30:14 UTC (rev 1866)
+++ jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/EventBuilderImpl.java 2008-08-11 16:55:55 UTC (rev 1867)
@@ -43,13 +43,13 @@
super(proc, flowObject);
}
- public EventBuilder addSignalTrigger(String fromRef, SignalType signalType, String message)
+ public EventBuilder addSignalTrigger(SignalType signalType, String message)
{
EventImpl event = getEvent();
if (event instanceof StartEvent)
{
StartEventImpl start = (StartEventImpl)event;
- Signal signal = new Signal(fromRef, signalType, message);
+ Signal signal = new Signal(event.getName(), signalType, message);
start.addTrigger(new SignalEventDetailImpl(signal));
}
else
Modified: jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/ExclusiveGatewayImpl.java
===================================================================
--- jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/ExclusiveGatewayImpl.java 2008-08-11 12:30:14 UTC (rev 1866)
+++ jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/ExclusiveGatewayImpl.java 2008-08-11 16:55:55 UTC (rev 1867)
@@ -54,7 +54,7 @@
{
// provide logging
private static final Log log = LogFactory.getLog(ExclusiveGatewayImpl.class);
-
+
public ExclusiveGatewayImpl(String name)
{
super(name);
@@ -81,19 +81,19 @@
{
public void execute(FlowScheduler scheduler, Token token)
{
- // Schedule the first token that arrives
+ // Schedule the first token that arrives
if (receivedTokens.size() == 1)
{
Gate selectedGate = getSelectedGate(token);
SequenceFlow outFlow = selectedGate.getOutgoingSequenceFlow();
- scheduler.scheduleTuple(outFlow, token);
+ scheduler.continueToken(outFlow, token);
}
- // Ignore all other tokens
+ // Ignore all other tokens
else
{
log.debug("Ignore token: " + token);
}
-
+
// Reset the gateway
if (expectedFlows.size() == 0)
{
@@ -142,8 +142,8 @@
}
}
}
-
- // Fallback to the default gate if there is one
+
+ // Use to the default gate if there is one
if (selectedGate == null)
{
for (Gate auxGate : getGates())
@@ -156,13 +156,24 @@
}
}
}
-
+
+ // Fallback to the single outgoing gate that is not conditional
+ if (selectedGate == null && getGates().size() == 1)
+ {
+ Gate auxGate = getGates().get(0);
+ SequenceFlow seqFlow = auxGate.getOutgoingSequenceFlow();
+ if (seqFlow.getConditionType() == ConditionType.None)
+ {
+ selectedGate = auxGate;
+ }
+ }
+
if (selectedGate == null)
throw new IllegalStateException("Cannot select applicable gate in: " + this);
-
+
return selectedGate;
}
-
+
public String toString()
{
return "ExclusiveGateway[" + getName() + "]";
Modified: jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/FlowSchedulerImpl.java
===================================================================
--- jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/FlowSchedulerImpl.java 2008-08-11 12:30:14 UTC (rev 1866)
+++ jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/FlowSchedulerImpl.java 2008-08-11 16:55:55 UTC (rev 1867)
@@ -42,11 +42,27 @@
public class FlowSchedulerImpl implements MutableFlowScheduler
{
private Queue<Token> flowQueue = new ConcurrentLinkedQueue<Token>();
+ private StartCallback startCallback;
- public void scheduleTuple(ConnectingObject flow, Token token)
+ public FlowSchedulerImpl(StartCallback startCallback)
{
+ this.startCallback = startCallback;
+ }
+
+ public void startToken(ConnectingObject flow, Token token)
+ {
TokenImpl tokenImpl = (TokenImpl)token;
tokenImpl.setFlow(flow);
+ flowQueue.add(tokenImpl);
+
+ if (startCallback != null)
+ startCallback.start(token);
+ }
+
+ public void continueToken(ConnectingObject flow, Token token)
+ {
+ TokenImpl tokenImpl = (TokenImpl)token;
+ tokenImpl.setFlow(flow);
flowQueue.add(tokenImpl);
}
@@ -59,4 +75,9 @@
{
return flowQueue.remove();
}
+
+ public interface StartCallback
+ {
+ void start(Token token);
+ }
}
\ No newline at end of file
Modified: jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/IntermediateEventImpl.java
===================================================================
--- jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/IntermediateEventImpl.java 2008-08-11 12:30:14 UTC (rev 1866)
+++ jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/IntermediateEventImpl.java 2008-08-11 16:55:55 UTC (rev 1867)
@@ -101,7 +101,7 @@
{
public void execute(FlowScheduler scheduler, Token token)
{
- scheduler.scheduleTuple(getOutFlow(), token);
+ scheduler.continueToken(getOutFlow(), token);
}
};
}
Modified: jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/ParallelGatewayImpl.java
===================================================================
--- jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/ParallelGatewayImpl.java 2008-08-11 12:30:14 UTC (rev 1866)
+++ jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/ParallelGatewayImpl.java 2008-08-11 16:55:55 UTC (rev 1867)
@@ -110,7 +110,7 @@
if (outstandingFlows.size() == 0)
{
Token mergedToken = mergeTokens(token);
- scheduler.scheduleTuple(outFlow, mergedToken);
+ scheduler.continueToken(outFlow, mergedToken);
outstandingFlows = null;
mergeTokens = null;
}
@@ -131,7 +131,7 @@
}
else
{
- scheduler.scheduleTuple(outFlow, token);
+ scheduler.continueToken(outFlow, token);
}
}
};
@@ -145,7 +145,7 @@
for(Gate gate : getGates())
{
SequenceFlow outFlow = gate.getOutgoingSequenceFlow();
- scheduler.scheduleTuple(outFlow, token.copyToken());
+ scheduler.startToken(outFlow, token.copyToken());
}
}
};
Modified: jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/ProcessImpl.java
===================================================================
--- jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/ProcessImpl.java 2008-08-11 12:30:14 UTC (rev 1866)
+++ jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/ProcessImpl.java 2008-08-11 16:55:55 UTC (rev 1867)
@@ -38,7 +38,6 @@
import org.jboss.bpm.client.ProcessManager;
import org.jboss.bpm.client.internal.ProcessManagerImpl;
import org.jboss.bpm.model.EndEvent;
-import org.jboss.bpm.model.EventDetail;
import org.jboss.bpm.model.FlowObject;
import org.jboss.bpm.model.InputSet;
import org.jboss.bpm.model.Message;
@@ -158,57 +157,6 @@
this.runtimeException = rte;
}
- public StartEvent getStartEvent()
- {
- StartEvent start = null;
- for (FlowObject aux : flowObjects)
- {
- if (aux instanceof StartEvent)
- {
- StartEvent tmpStart = (StartEvent)aux;
- List<EventDetail> triggers = tmpStart.getTrigger();
- if (triggers.size() == 0)
- {
- if (start != null)
- throw new InvalidProcessException("Process cannot have multiple start events with no trigger");
- start = tmpStart;
- }
- }
- }
- return start;
- }
-
- public StartEvent getStartEvent(String name)
- {
- FlowObject fo = getFlowObject(name);
- if (fo instanceof StartEvent == false)
- throw new IllegalArgumentException("Is not a start event: " + fo);
-
- return (StartEvent)fo;
- }
-
- public List<EndEvent> getEndEvents()
- {
- List<EndEvent> ends = new ArrayList<EndEvent>();
- for (FlowObject aux : flowObjects)
- {
- if (aux instanceof EndEvent)
- {
- ends.add((EndEvent)aux);
- }
- }
- return Collections.unmodifiableList(ends);
- }
-
- public EndEvent getEndEvent(String name)
- {
- FlowObject fo = getFlowObject(name);
- if (fo instanceof EndEvent == false)
- throw new IllegalArgumentException("Is not an end event: " + fo);
-
- return (EndEvent)fo;
- }
-
public List<FlowObject> getFlowObjects()
{
Modified: jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/RuntimeProcessImpl.java
===================================================================
--- jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/RuntimeProcessImpl.java 2008-08-11 12:30:14 UTC (rev 1866)
+++ jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/RuntimeProcessImpl.java 2008-08-11 16:55:55 UTC (rev 1867)
@@ -24,7 +24,7 @@
//$Id$
import org.jboss.bpm.model.Process;
-import org.jboss.bpm.runtime.MutableFlowScheduler;
+import org.jboss.bpm.runtime.FlowScheduler;
import org.jboss.bpm.runtime.RuntimeProcess;
/**
@@ -36,7 +36,7 @@
public class RuntimeProcessImpl implements RuntimeProcess
{
private Process process;
- private MutableFlowScheduler scheduler = new FlowSchedulerImpl();
+ private FlowScheduler scheduler;
public RuntimeProcessImpl(Process process)
{
@@ -48,8 +48,13 @@
return process;
}
- public MutableFlowScheduler getFlowScheduler()
+ public FlowScheduler getFlowScheduler()
{
return scheduler;
}
+
+ public void setScheduler(FlowScheduler scheduler)
+ {
+ this.scheduler = scheduler;
+ }
}
\ No newline at end of file
Modified: jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/StartEventImpl.java
===================================================================
--- jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/StartEventImpl.java 2008-08-11 12:30:14 UTC (rev 1866)
+++ jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/StartEventImpl.java 2008-08-11 16:55:55 UTC (rev 1867)
@@ -29,15 +29,22 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.jboss.bpm.client.ExecutionManager;
+import org.jboss.bpm.client.SignalListener;
+import org.jboss.bpm.client.SignalManager;
import org.jboss.bpm.model.ConnectingObject;
import org.jboss.bpm.model.EventDetail;
+import org.jboss.bpm.model.Process;
import org.jboss.bpm.model.Signal;
+import org.jboss.bpm.model.SignalEventDetail;
import org.jboss.bpm.model.StartEvent;
import org.jboss.bpm.runtime.ExecutionHandler;
import org.jboss.bpm.runtime.FlowHandler;
import org.jboss.bpm.runtime.FlowScheduler;
+import org.jboss.bpm.runtime.RuntimeProcess;
import org.jboss.bpm.runtime.SignalHandler;
import org.jboss.bpm.runtime.Token;
+import org.jboss.bpm.runtime.internal.TokenImpl;
/**
* A Start Event indicates where a particular Process will start. In terms of Sequence Flow, the Start Event starts the
@@ -55,6 +62,7 @@
private ConnectingObject outFlow;
private List<EventDetail> triggers = new ArrayList<EventDetail>();
+ private Signal startSignal;
public StartEventImpl(String name)
{
@@ -69,6 +77,12 @@
public void addTrigger(EventDetail eventDetail)
{
triggers.add(eventDetail);
+
+ if (eventDetail instanceof SignalEventDetail)
+ {
+ SignalEventDetail signalDetail = (SignalEventDetail)eventDetail;
+ startSignal = signalDetail.getSignalRef();
+ }
}
public ConnectingObject getOutFlow()
@@ -106,7 +120,7 @@
{
public void execute(FlowScheduler scheduler, Token token)
{
- scheduler.scheduleTuple(outFlow, token);
+ scheduler.continueToken(outFlow, token);
}
};
}
@@ -134,6 +148,40 @@
return handler;
}
+ @Override
+ protected void initialize(Process proc)
+ {
+ super.initialize(proc);
+
+ // Setup the start signal handler
+ if (startSignal != null)
+ {
+ final StartEvent start = this;
+ SignalListener listener = new SignalListener()
+ {
+ public void catchSignal(Signal signal)
+ {
+ if (startSignal.getType() == signal.getType() && startSignal.getMessage().equals(signal.getMessage()))
+ {
+ log.debug("Start process from signal: " + signal);
+
+ Token initalToken = new TokenImpl(null);
+ SequenceFlowImpl seqFlow = new SequenceFlowImpl(start.getName());
+ seqFlow.setTargetRef(start);
+
+ ExecutionManager exManager = ExecutionManager.locateExecutionManager();
+ RuntimeProcess rtProc = exManager.getRuntimeProcess(start.getProcess().getID());
+ FlowScheduler flowScheduler = rtProc.getFlowScheduler();
+ flowScheduler.startToken(seqFlow, initalToken);
+ }
+ }
+ };
+ SignalManager signalManager = SignalManager.locateSignalManager();
+ signalManager.addSignalListener(getProcess().getName(), listener);
+ }
+ }
+
+
public String toString()
{
return "StartEvent[]";
Modified: jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/runtime/internal/TokenImpl.java
===================================================================
--- jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/runtime/internal/TokenImpl.java 2008-08-11 12:30:14 UTC (rev 1866)
+++ jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/runtime/internal/TokenImpl.java 2008-08-11 16:55:55 UTC (rev 1867)
@@ -27,7 +27,6 @@
import org.jboss.bpm.model.FlowObject;
import org.jboss.bpm.model.InputSet;
import org.jboss.bpm.model.OutputSet;
-import org.jboss.bpm.model.Process;
import org.jboss.bpm.runtime.Attachments;
import org.jboss.bpm.runtime.BasicAttachments;
import org.jboss.bpm.runtime.ExecutionContext;
@@ -56,7 +55,7 @@
private OutputSet outputSet;
/**
- * Construct a Token with a given {@link Process} and {@link Attachments}
+ * Construct a Token with given {@link Attachments}
*/
public TokenImpl(Attachments att)
{
Modified: jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/cts/gateway/exclusive/ExclusiveMergeTest.java
===================================================================
--- jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/cts/gateway/exclusive/ExclusiveMergeTest.java 2008-08-11 12:30:14 UTC (rev 1866)
+++ jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/cts/gateway/exclusive/ExclusiveMergeTest.java 2008-08-11 16:55:55 UTC (rev 1867)
@@ -23,8 +23,6 @@
// $Id$
-import java.util.List;
-
import org.jboss.bpm.client.SignalManager;
import org.jboss.bpm.model.EventBuilder;
import org.jboss.bpm.model.Process;
@@ -33,7 +31,6 @@
import org.jboss.bpm.model.Signal;
import org.jboss.bpm.model.Gateway.GatewayType;
import org.jboss.bpm.model.Signal.SignalType;
-import org.jboss.bpm.runtime.BasicAttachments;
import org.jboss.bpm.test.DefaultEngineTestCase;
/**
@@ -60,35 +57,23 @@
proc.startProcess();
SignalManager signalManager = SignalManager.locateSignalManager();
+ Signal signal = new Signal(getName(), SignalType.START_TRIGGER, "A");
+ signalManager.throwSignal(proc.getName(), signal);
proc.waitForEnd();
-
- List<Signal> endSignals = getSignals(Signal.SignalType.EXIT_END_EVENT);
- assertEquals(1, endSignals.size());
- assertEquals("EndA", endSignals.get(0).getFromRef());
}
public void testGateB() throws Exception
{
- Process proc = getProcess();
-
- BasicAttachments att = new BasicAttachments();
- att.addAttachment("foo", "15");
- proc.startProcess(att);
- proc.waitForEnd();
-
- List<Signal> endSignals = getSignals(Signal.SignalType.EXIT_END_EVENT);
- assertEquals(1, endSignals.size());
- assertEquals("EndB", endSignals.get(0).getFromRef());
}
private Process getProcess()
{
ProcessBuilder procBuilder = ProcessBuilderFactory.newInstance().newProcessBuilder();
EventBuilder eventBuilder = procBuilder.addProcess(getName()).addStartEvent("StartA");
- eventBuilder.addSignalTrigger(getName(), SignalType.START_TRIGGER, "A").addSequenceFlow("Merge");
+ eventBuilder.addSignalTrigger(SignalType.START_TRIGGER, "A").addSequenceFlow("Merge");
eventBuilder = procBuilder.addStartEvent("StartB");
- eventBuilder.addSignalTrigger(getName(), SignalType.START_TRIGGER, "B").addSequenceFlow("Merge");
+ eventBuilder.addSignalTrigger(SignalType.START_TRIGGER, "B").addSequenceFlow("Merge");
procBuilder.addGateway("Merge", GatewayType.Exclusive);
procBuilder.addSequenceFlow("End").addEndEvent("End");
Process proc = procBuilder.getProcess();
17 years, 8 months
JBoss JBPM SVN: r1866 - in jbossbpm/spec/trunk/modules: testsuite/src/test/java/org/jboss/bpm/cts/gateway/exclusive and 5 other directories.
by do-not-reply@jboss.org
Author: thomas.diesler(a)jboss.com
Date: 2008-08-11 08:30:14 -0400 (Mon, 11 Aug 2008)
New Revision: 1866
Modified:
jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/GatewayImpl.java
jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/cts/gateway/exclusive/ExclusiveMergeTest.java
jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/cts/gateway/exclusive/ExclusiveSplitTest.java
jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/cts/gateway/inclusive/InclusiveMergeTest.java
jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/cts/gateway/inclusive/InclusiveSplitTest.java
jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/cts/gateway/parallel/ParallelMergeTest.java
jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/cts/gateway/parallel/ParallelSplitTest.java
jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/samples/parallelsplit/ParallelSplitTest.java
jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/samples/sequence/BasicSequenceTest.java
jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/samples/task/BasicTaskTest.java
Log:
WIP
Modified: jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/GatewayImpl.java
===================================================================
--- jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/GatewayImpl.java 2008-08-11 12:26:17 UTC (rev 1865)
+++ jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/GatewayImpl.java 2008-08-11 12:30:14 UTC (rev 1866)
@@ -34,7 +34,6 @@
import org.jboss.bpm.model.ConnectingObject;
import org.jboss.bpm.model.Gate;
import org.jboss.bpm.model.Gateway;
-import org.jboss.bpm.model.Process;
import org.jboss.bpm.model.SequenceFlow;
import org.jboss.bpm.model.Signal;
import org.jboss.bpm.model.SequenceFlow.ConditionType;
Modified: jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/cts/gateway/exclusive/ExclusiveMergeTest.java
===================================================================
--- jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/cts/gateway/exclusive/ExclusiveMergeTest.java 2008-08-11 12:26:17 UTC (rev 1865)
+++ jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/cts/gateway/exclusive/ExclusiveMergeTest.java 2008-08-11 12:30:14 UTC (rev 1866)
@@ -23,13 +23,17 @@
// $Id$
+import java.util.List;
+
import org.jboss.bpm.client.SignalManager;
import org.jboss.bpm.model.EventBuilder;
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.Gateway.GatewayType;
import org.jboss.bpm.model.Signal.SignalType;
+import org.jboss.bpm.runtime.BasicAttachments;
import org.jboss.bpm.test.DefaultEngineTestCase;
/**
@@ -46,16 +50,38 @@
protected void setUp() throws Exception
{
super.setUp();
- SignalManager engine = SignalManager.locateSignalManager();
- engine.addSignalListener(getName(), this);
+ SignalManager signalManager = SignalManager.locateSignalManager();
+ signalManager.addSignalListener(getName(), this);
}
public void testGateA() throws Exception
{
Process proc = getProcess();
- assertNotNull(proc);
+ proc.startProcess();
+
+ SignalManager signalManager = SignalManager.locateSignalManager();
+
+ proc.waitForEnd();
+
+ List<Signal> endSignals = getSignals(Signal.SignalType.EXIT_END_EVENT);
+ assertEquals(1, endSignals.size());
+ assertEquals("EndA", endSignals.get(0).getFromRef());
}
+ public void testGateB() throws Exception
+ {
+ Process proc = getProcess();
+
+ BasicAttachments att = new BasicAttachments();
+ att.addAttachment("foo", "15");
+ proc.startProcess(att);
+ proc.waitForEnd();
+
+ List<Signal> endSignals = getSignals(Signal.SignalType.EXIT_END_EVENT);
+ assertEquals(1, endSignals.size());
+ assertEquals("EndB", endSignals.get(0).getFromRef());
+ }
+
private Process getProcess()
{
ProcessBuilder procBuilder = ProcessBuilderFactory.newInstance().newProcessBuilder();
Modified: jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/cts/gateway/exclusive/ExclusiveSplitTest.java
===================================================================
--- jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/cts/gateway/exclusive/ExclusiveSplitTest.java 2008-08-11 12:26:17 UTC (rev 1865)
+++ jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/cts/gateway/exclusive/ExclusiveSplitTest.java 2008-08-11 12:30:14 UTC (rev 1866)
@@ -49,8 +49,8 @@
protected void setUp() throws Exception
{
super.setUp();
- SignalManager engine = SignalManager.locateSignalManager();
- engine.addSignalListener(getName(), this);
+ SignalManager signalManager = SignalManager.locateSignalManager();
+ signalManager.addSignalListener(getName(), this);
}
public void testGateA() throws Exception
Modified: jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/cts/gateway/inclusive/InclusiveMergeTest.java
===================================================================
--- jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/cts/gateway/inclusive/InclusiveMergeTest.java 2008-08-11 12:26:17 UTC (rev 1865)
+++ jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/cts/gateway/inclusive/InclusiveMergeTest.java 2008-08-11 12:30:14 UTC (rev 1866)
@@ -40,8 +40,8 @@
protected void setUp() throws Exception
{
super.setUp();
- SignalManager engine = SignalManager.locateSignalManager();
- engine.addSignalListener(getName(), this);
+ SignalManager signalManager = SignalManager.locateSignalManager();
+ signalManager.addSignalListener(getName(), this);
}
public void testGateA() throws Exception
Modified: jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/cts/gateway/inclusive/InclusiveSplitTest.java
===================================================================
--- jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/cts/gateway/inclusive/InclusiveSplitTest.java 2008-08-11 12:26:17 UTC (rev 1865)
+++ jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/cts/gateway/inclusive/InclusiveSplitTest.java 2008-08-11 12:30:14 UTC (rev 1866)
@@ -39,8 +39,8 @@
protected void setUp() throws Exception
{
super.setUp();
- SignalManager engine = SignalManager.locateSignalManager();
- engine.addSignalListener(getName(), this);
+ SignalManager signalManager = SignalManager.locateSignalManager();
+ signalManager.addSignalListener(getName(), this);
}
public void testGateA() throws Exception
Modified: jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/cts/gateway/parallel/ParallelMergeTest.java
===================================================================
--- jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/cts/gateway/parallel/ParallelMergeTest.java 2008-08-11 12:26:17 UTC (rev 1865)
+++ jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/cts/gateway/parallel/ParallelMergeTest.java 2008-08-11 12:30:14 UTC (rev 1866)
@@ -40,8 +40,8 @@
protected void setUp() throws Exception
{
super.setUp();
- SignalManager engine = SignalManager.locateSignalManager();
- engine.addSignalListener(getName(), this);
+ SignalManager signalManager = SignalManager.locateSignalManager();
+ signalManager.addSignalListener(getName(), this);
}
public void testGateA() throws Exception
Modified: jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/cts/gateway/parallel/ParallelSplitTest.java
===================================================================
--- jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/cts/gateway/parallel/ParallelSplitTest.java 2008-08-11 12:26:17 UTC (rev 1865)
+++ jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/cts/gateway/parallel/ParallelSplitTest.java 2008-08-11 12:30:14 UTC (rev 1866)
@@ -39,8 +39,8 @@
protected void setUp() throws Exception
{
super.setUp();
- SignalManager engine = SignalManager.locateSignalManager();
- engine.addSignalListener(getName(), this);
+ SignalManager signalManager = SignalManager.locateSignalManager();
+ signalManager.addSignalListener(getName(), this);
}
public void testGateA() throws Exception
Modified: jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/samples/parallelsplit/ParallelSplitTest.java
===================================================================
--- jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/samples/parallelsplit/ParallelSplitTest.java 2008-08-11 12:26:17 UTC (rev 1865)
+++ jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/samples/parallelsplit/ParallelSplitTest.java 2008-08-11 12:30:14 UTC (rev 1866)
@@ -50,8 +50,8 @@
protected void setUp() throws Exception
{
super.setUp();
- SignalManager engine = SignalManager.locateSignalManager();
- engine.addSignalListener(getName(), this);
+ SignalManager signalManager = SignalManager.locateSignalManager();
+ signalManager.addSignalListener(getName(), this);
}
/**
Modified: jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/samples/sequence/BasicSequenceTest.java
===================================================================
--- jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/samples/sequence/BasicSequenceTest.java 2008-08-11 12:26:17 UTC (rev 1865)
+++ jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/samples/sequence/BasicSequenceTest.java 2008-08-11 12:30:14 UTC (rev 1866)
@@ -47,8 +47,8 @@
protected void setUp() throws Exception
{
super.setUp();
- SignalManager engine = SignalManager.locateSignalManager();
- engine.addSignalListener(getName(), this);
+ SignalManager signalManager = SignalManager.locateSignalManager();
+ signalManager.addSignalListener(getName(), this);
}
/**
Modified: jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/samples/task/BasicTaskTest.java
===================================================================
--- jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/samples/task/BasicTaskTest.java 2008-08-11 12:26:17 UTC (rev 1865)
+++ jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/samples/task/BasicTaskTest.java 2008-08-11 12:30:14 UTC (rev 1866)
@@ -47,8 +47,8 @@
protected void setUp() throws Exception
{
super.setUp();
- SignalManager engine = SignalManager.locateSignalManager();
- engine.addSignalListener(getName(), this);
+ SignalManager signalManager = SignalManager.locateSignalManager();
+ signalManager.addSignalListener(getName(), this);
}
/**
17 years, 8 months
JBoss JBPM SVN: r1865 - in jbpm4/pvm/trunk: modules/core and 1 other directory.
by do-not-reply@jboss.org
Author: porcherg
Date: 2008-08-11 08:26:17 -0400 (Mon, 11 Aug 2008)
New Revision: 1865
Modified:
jbpm4/pvm/trunk/assembly.xml
jbpm4/pvm/trunk/modules/core/pom.xml
Log:
- generate xsd docs: JBPM-1462
- fix package generation (pvm groupId was renamed)
Modified: jbpm4/pvm/trunk/assembly.xml
===================================================================
--- jbpm4/pvm/trunk/assembly.xml 2008-08-11 10:56:42 UTC (rev 1864)
+++ jbpm4/pvm/trunk/assembly.xml 2008-08-11 12:26:17 UTC (rev 1865)
@@ -9,7 +9,7 @@
<moduleSets>
<moduleSet>
<includes>
- <include>org.jboss.jbpm.pvm:pvm</include>
+ <include>org.jbpm:pvm</include>
</includes>
<binaries>
<outputDirectory></outputDirectory>
@@ -27,7 +27,7 @@
<fileSets>
<fileSet>
<directory>modules/core/target/apidocs</directory>
- <outputDirectory>javadoc</outputDirectory>
+ <outputDirectory>doc/api</outputDirectory>
</fileSet>
<fileSet>
<directory>modules/core/src/main/java</directory>
@@ -39,12 +39,19 @@
</fileSet>
<fileSet>
<directory>modules/core/target/manual</directory>
- <outputDirectory>manual</outputDirectory>
+ <outputDirectory>doc/reference</outputDirectory>
<excludes>
<exclude>**/*.fo</exclude>
</excludes>
</fileSet>
<fileSet>
+ <directory>modules/core/target/doc/wirexsd</directory>
+ <outputDirectory>doc/wirexsd</outputDirectory>
+ <excludes>
+ <exclude>**/*.fo</exclude>
+ </excludes>
+ </fileSet>
+ <fileSet>
<directory>modules/core/src/test/java</directory>
<includes>
<include>org/jbpm/pvm/samples/**/*.*</include>
Modified: jbpm4/pvm/trunk/modules/core/pom.xml
===================================================================
--- jbpm4/pvm/trunk/modules/core/pom.xml 2008-08-11 10:56:42 UTC (rev 1864)
+++ jbpm4/pvm/trunk/modules/core/pom.xml 2008-08-11 12:26:17 UTC (rev 1865)
@@ -188,6 +188,40 @@
</configuration>
</execution>
</executions>
+ </plugin>
+ <plugin>
+ <artifactId>maven-antrun-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>generate-wirexsd-doc</id>
+ <phase>package</phase>
+ <goals>
+ <goal>run</goal>
+ </goals>
+ <configuration>
+ <tasks>
+ <taskdef name="xsddoc" classname="net.sf.xframe.xsddoc.Task" classpathref="maven.plugin.classpath" />
+ <mkdir dir="${basedir}/target/doc/wirexsd" />
+ <xsddoc file="${basedir}/src/main/resources/org/jbpm/pvm/wire.xsd"
+ out="${basedir}/target/doc/wirexsd"
+ title="Process Virtual Machine: Wiring Schema"
+ verbose="false" />
+ </tasks>
+ </configuration>
+ </execution>
+ </executions>
+ <dependencies>
+ <dependency>
+ <groupId>xsddoc</groupId>
+ <artifactId>xsddoc</artifactId>
+ <version>1.0</version>
+ </dependency>
+ <dependency>
+ <groupId>xalan</groupId>
+ <artifactId>xalan</artifactId>
+ <version>2.7.0</version>
+ </dependency>
+ </dependencies>
</plugin>
<plugin>
<groupId>com.agilejava.docbkx</groupId>
17 years, 8 months
JBoss JBPM SVN: r1864 - in jbossbpm/spec/trunk/modules: api/src/main/java/org/jboss/bpm/model and 18 other directories.
by do-not-reply@jboss.org
Author: thomas.diesler(a)jboss.com
Date: 2008-08-11 06:56:42 -0400 (Mon, 11 Aug 2008)
New Revision: 1864
Added:
jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/EventBuilder.java
jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/EventBuilderImpl.java
jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/SignalEventDetailImpl.java
Removed:
jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/NoneEventDetail.java
jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/NoneEventDetailImpl.java
Modified:
jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/client/MessageManager.java
jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/client/ProcessManager.java
jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/Activity.java
jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/EndEvent.java
jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/EventDetail.java
jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/FlowObject.java
jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/Gateway.java
jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/IntermediateEvent.java
jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/Process.java
jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/ProcessBuilder.java
jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/Signal.java
jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/runtime/FlowHandler.java
jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/test/AbstractAPITestCase.java
jbossbpm/spec/trunk/modules/dialects/api10/src/main/java/org/jboss/bpm/dialect/api10/ProcessUnmarshaller.java
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/message/ProcessMessageTest.java
jbossbpm/spec/trunk/modules/dialects/jpdl32/src/main/java/org/jboss/bpm/dialect/jpdl32/ProcessDefinitionAdapter.java
jbossbpm/spec/trunk/modules/dialects/stp/src/main/java/org/jboss/bpm/dialect/stp/ProcessUnmarshaller.java
jbossbpm/spec/trunk/modules/dialects/xpdl21/src/main/java/org/jboss/bpm/dialect/xpdl21/WorkflowProcessAdapter.java
jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/client/internal/ExecutionManagerImpl.java
jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/client/internal/ProcessManagerImpl.java
jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/ActivityImpl.java
jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/EndEventImpl.java
jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/EventImpl.java
jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/ExclusiveGatewayImpl.java
jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/FlowObjectImpl.java
jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/GatewayBuilderImpl.java
jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/GatewayImpl.java
jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/IntermediateEventImpl.java
jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/ParallelGatewayImpl.java
jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/ProcessBuilderImpl.java
jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/ProcessImpl.java
jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/SequenceFlowImpl.java
jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/StartEventImpl.java
jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/SubProcessImpl.java
jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/TaskImpl.java
jbossbpm/spec/trunk/modules/samples/airticket/server/src/main/java/org/jboss/bpm/samples/airticket/AirticketProcessBuilder.java
jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/cts/gateway/exclusive/ExclusiveMergeTest.java
jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/cts/gateway/exclusive/ExclusiveSplitTest.java
jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/cts/process/ProcessIntegrityTest.java
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/processmanager/ProcessRegistryTest.java
jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/cts/task/TaskMessageTest.java
jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/samples/parallelsplit/ParallelSplitTest.java
jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/samples/sequence/BasicSequenceTest.java
jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/samples/task/BasicTaskTest.java
Log:
More work on Gateway CTS
Modified: jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/client/MessageManager.java
===================================================================
--- jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/client/MessageManager.java 2008-08-11 10:47:13 UTC (rev 1863)
+++ jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/client/MessageManager.java 2008-08-11 10:56:42 UTC (rev 1864)
@@ -96,7 +96,7 @@
{
ProcessManager pm = getProcessEngine().getProcessManager();
Process proc = pm.getProcessByID(procID);
- FlowObject target = proc.getFlowObjectByName(targetName);
+ FlowObject target = proc.getFlowObject(targetName);
if (target == null)
throw new IllegalArgumentException("Cannot find message target: " + targetName);
if (target instanceof MessageListener == false)
Modified: jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/client/ProcessManager.java
===================================================================
--- jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/client/ProcessManager.java 2008-08-11 10:47:13 UTC (rev 1863)
+++ jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/client/ProcessManager.java 2008-08-11 10:56:42 UTC (rev 1864)
@@ -40,7 +40,6 @@
import org.apache.commons.logging.LogFactory;
import org.jboss.bpm.BPMException;
import org.jboss.bpm.EngineShutdownException;
-import org.jboss.bpm.ProcessTimeoutException;
import org.jboss.bpm.model.Process;
import org.jboss.bpm.model.Process.Status;
import org.jboss.bpm.runtime.Attachments;
@@ -70,14 +69,14 @@
{
}
- /**
+ /**
* Get the ProcessEngine
*/
public ProcessEngine getProcessEngine()
{
return ProcessEngineLocator.locateProcessEngine();
}
-
+
/**
* Locate the ProcessManager
*/
@@ -86,7 +85,7 @@
ProcessEngine engine = ProcessEngineLocator.locateProcessEngine();
return engine.getProcessManager();
}
-
+
/**
* Create a Process from a XML string in one of the supported formats
*/
@@ -130,7 +129,7 @@
* @param status The optional process status
* @return An empty set if the process cannot be found
*/
- public Set<Process> findProcessByName(String name, Process.Status status)
+ public Set<Process> getProcesses(String name, Process.Status status)
{
Set<Process> procSet = new HashSet<Process>();
for (Process aux : procs)
@@ -160,17 +159,16 @@
}
/**
- * Register a Process.
- * This is not part of the API.
+ * Register a Process. This is not part of the API.
*/
protected void registerProcess(Process proc)
{
+ log.debug("registerProcess: " + proc);
procs.add(proc);
}
/**
- * Remove a Process
- * This is not part of the API.
+ * Remove a Process This is not part of the API.
*/
protected void removeProcess(Process proc)
{
@@ -182,60 +180,6 @@
*/
public abstract ObjectName startProcess(String name, Attachments att);
- /**
- * Wait for the Process to end. All Tokens that are generated at the Start Event for that Process must eventually
- * arrive at an End Event. The Process will be in a running state until all Tokens are consumed.
- * <p/>
- * If the process was aborted this method throws the causing RuntimeException if avaialable.
- *
- */
- public Status waitForEnd(ObjectName procID, long timeout)
- {
- Process proc = getProcessByID(procID);
- Status status = proc.getStatus();
-
- if (status == Status.None || status == Status.Ready)
- throw new IllegalStateException("Cannot wait for process in state: " + status);
-
- // Wait a little for the process to end
- boolean forever = (timeout < 1);
- long now = System.currentTimeMillis();
- long until = now + timeout;
- try
- {
- while (forever || now < until)
- {
- status = proc.getStatus();
- if (status == Status.Cancelled || status == Status.Completed)
- {
- return status;
- }
- else if (status == Status.Aborted)
- {
- RuntimeException rte = proc.getRuntimeException();
- if (rte == null)
- return status;
- else
- throw rte;
- }
- Thread.sleep(100);
- now = System.currentTimeMillis();
- }
- }
- catch (InterruptedException ex)
- {
- log.warn(ex);
- }
- finally
- {
- // Remove the process
- removeProcess(proc);
- }
-
- // Throw timeout exception if it took too long
- throw new ProcessTimeoutException("Process timeout for: " + procID);
- }
-
private String getNamespaceURI(InputStream inStream)
{
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
@@ -259,9 +203,17 @@
return nsURI;
}
- /**
- * Get the handler for the dialect with the given namespace URI
+ /**
+ * Wait for the Process to end. All Tokens that are generated at the Start Event for that Process must eventually
+ * arrive at an End Event. The Process will be in a running state until all Tokens are consumed. <p/> If the process
+ * was aborted this method throws the causing RuntimeException if avaialable.
+ *
*/
+ public abstract Status waitForEnd(ObjectName procID, long timeout);
+
+ /**
+ * Get the handler for the dialect with the given namespace URI
+ */
public DialectHandler getDialectHandler(String nsURI)
{
String dialectId = dialectRegistry.getDialect(nsURI);
Modified: jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/Activity.java
===================================================================
--- jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/Activity.java 2008-08-11 10:47:13 UTC (rev 1863)
+++ jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/Activity.java 2008-08-11 10:56:42 UTC (rev 1864)
@@ -32,7 +32,7 @@
* @author thomas.diesler(a)jboss.com
* @since 08-Jul-2008
*/
-public interface Activity extends FlowObject, NameSupport, PropertySupport
+public interface Activity extends FlowObject, PropertySupport
{
/**
* The ActivityType MUST be of type Task or Sub-Process.
Modified: jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/EndEvent.java
===================================================================
--- jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/EndEvent.java 2008-08-11 10:47:13 UTC (rev 1863)
+++ jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/EndEvent.java 2008-08-11 10:56:42 UTC (rev 1864)
@@ -35,7 +35,7 @@
* @author thomas.diesler(a)jboss.com
* @since 08-Jul-2008
*/
-public interface EndEvent extends Event, NameSupport, SingleInFlowSupport
+public interface EndEvent extends Event, SingleInFlowSupport
{
/**
* Result defines the type of result expected for an End Event.
Copied: jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/EventBuilder.java (from rev 1863, jbossbpm/spec/branches/tdiesler/modules/api/src/main/java/org/jboss/bpm/model/EventBuilder.java)
===================================================================
--- jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/EventBuilder.java (rev 0)
+++ jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/EventBuilder.java 2008-08-11 10:56:42 UTC (rev 1864)
@@ -0,0 +1,40 @@
+/*
+ * 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.model;
+
+//$Id$
+
+import org.jboss.bpm.model.Signal.SignalType;
+
+/**
+ * The EventBuilder can be used to build an {@link Event} dynamically.
+ *
+ * @author thomas.diesler(a)jboss.com
+ * @since 08-Jul-2008
+ */
+public interface EventBuilder extends ProcessBuilder
+{
+ /**
+ * Add a signal trigger to the last added {@link Event}
+ */
+ EventBuilder addSignalTrigger(String fromRef, SignalType signalType, String signalMessage);
+}
\ No newline at end of file
Modified: jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/EventDetail.java
===================================================================
--- jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/EventDetail.java 2008-08-11 10:47:13 UTC (rev 1863)
+++ jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/EventDetail.java 2008-08-11 10:56:42 UTC (rev 1864)
@@ -36,7 +36,7 @@
*/
public enum EventDetailType
{
- None, Message, Timer, Error, Conditional, Link, Signal, Compensate, Cancel, Terminate
+ Message, Timer, Error, Conditional, Link, Signal, Compensate, Cancel, Terminate
};
/**
Modified: jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/FlowObject.java
===================================================================
--- jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/FlowObject.java 2008-08-11 10:47:13 UTC (rev 1863)
+++ jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/FlowObject.java 2008-08-11 10:56:42 UTC (rev 1864)
@@ -30,7 +30,7 @@
* @author thomas.diesler(a)jboss.com
* @since 08-Jul-2008
*/
-public interface FlowObject extends GraphicalElement
+public interface FlowObject extends GraphicalElement, NameSupport
{
/**
* Get the associated Process
Modified: jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/Gateway.java
===================================================================
--- jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/Gateway.java 2008-08-11 10:47:13 UTC (rev 1863)
+++ jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/Gateway.java 2008-08-11 10:56:42 UTC (rev 1864)
@@ -35,7 +35,7 @@
* @author thomas.diesler(a)jboss.com
* @since 08-Jul-2008
*/
-public interface Gateway extends FlowObject, NameSupport, MultipleInFlowSupport
+public interface Gateway extends FlowObject, MultipleInFlowSupport
{
/**
* The GatewayType
Modified: jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/IntermediateEvent.java
===================================================================
--- jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/IntermediateEvent.java 2008-08-11 10:47:13 UTC (rev 1863)
+++ jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/IntermediateEvent.java 2008-08-11 10:56:42 UTC (rev 1864)
@@ -33,6 +33,6 @@
* @author thomas.diesler(a)jboss.com
* @since 08-Jul-2008
*/
-public interface IntermediateEvent extends Event, NameSupport, SingleInFlowSupport, SingleOutFlowSupport
+public interface IntermediateEvent extends Event, SingleInFlowSupport, SingleOutFlowSupport
{
}
\ No newline at end of file
Deleted: jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/NoneEventDetail.java
===================================================================
--- jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/NoneEventDetail.java 2008-08-11 10:47:13 UTC (rev 1863)
+++ jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/NoneEventDetail.java 2008-08-11 10:56:42 UTC (rev 1864)
@@ -1,35 +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.model;
-
-//$Id$
-
-/**
- * The Cancel event detail
- *
- * @author thomas.diesler(a)jboss.com
- * @since 21-Jul-2008
- */
-public interface NoneEventDetail extends EventDetail
-{
-
-}
Modified: jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/Process.java
===================================================================
--- jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/Process.java 2008-08-11 10:47:13 UTC (rev 1863)
+++ jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/Process.java 2008-08-11 10:56:42 UTC (rev 1864)
@@ -27,7 +27,6 @@
import javax.management.ObjectName;
-import org.jboss.bpm.BPMException;
import org.jboss.bpm.runtime.Attachments;
/**
@@ -70,6 +69,17 @@
List<FlowObject> getFlowObjects();
/**
+ * Get a list of flow objects of a given type.
+ */
+ <T extends FlowObject> List<T> getFlowObjects(Class<T> clazz);
+
+ /**
+ * Get a flow object by name.
+ * @return null if not found
+ */
+ FlowObject getFlowObject(String name);
+
+ /**
* One or more Performers MAY be entered. The Performers attribute defines the resource that will be responsible for
* the Process. The Performers entry could be in the form of a specific individual, a group, an organization role or
* position, or an organization.
@@ -97,42 +107,26 @@
*/
List<OutputSet> getOutputSets();
- // Not Part of BPMN ========================================================================
-
/**
- * Make a deep copy of the process
+ * Get the list of associated {@link Message} objects.
+ * @return An empty list if there are none
*/
- Process copyProcess();
-
- /**
- * Get the possible runtime exception when the process was aborted.
- */
- RuntimeException getRuntimeException();
+ List<Message> getMessages();
/**
- * Get the start event
- * @throws BPMException if there are other than exactly one start event of type None
+ * Get an associated {@link Message} by name.
+ * @return null if not found
*/
- StartEvent getStartEvent();
+ Message getMessage(String msgName);
+
+ // Not Part of BPMN ========================================================================
/**
- * Get a start event by name
- * @return null if there is none
+ * Make a deep copy of the process
*/
- StartEvent getStartEvent(String name);
-
+ Process copyProcess();
+
/**
- * Get the set of end events
- */
- List<EndEvent> getEndEvents();
-
- /**
- * Get an end event by name
- * @return null if there is none
- */
- EndEvent getEndEvent(String name);
-
- /**
* Start the process
*/
ObjectName startProcess();
@@ -143,24 +137,6 @@
ObjectName startProcess(Attachments att);
/**
- * Find a flow object by name
- * @return null if not found
- */
- FlowObject getFlowObjectByName(String name);
-
- /**
- * Get the list of associated {@link Message} objects.
- * @return An empty list if there are none
- */
- List<Message> getMessages();
-
- /**
- * Get an associated {@link Message} by name.
- * @return null if not found
- */
- Message getMessageByName(String msgName);
-
- /**
* All Tokens that are generated at the Start Event for that Process must eventually arrive at an End Event.
* The Process will be in a running state until all Tokens are consumed.
* <p/>
Modified: jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/ProcessBuilder.java
===================================================================
--- jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/ProcessBuilder.java 2008-08-11 10:47:13 UTC (rev 1863)
+++ jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/ProcessBuilder.java 2008-08-11 10:56:42 UTC (rev 1864)
@@ -76,19 +76,19 @@
ProcessBuilder addMessageFlow(String targetName);
/**
- * Add a {@link StartEvent}
+ * Add a {@link StartEvent} with a given name
*/
- ProcessBuilder addStartEvent();
+ EventBuilder addStartEvent(String name);
/**
* Add an {@link IntermediateEvent} with a given name
*/
- ProcessBuilder addEvent(String name);
+ EventBuilder addEvent(String name);
/**
* Add an {@link EndEvent} with a given name
*/
- ProcessBuilder addEndEvent(String name);
+ EventBuilder addEndEvent(String name);
/**
* Add a {@link Task} of {@link TaskType} NONE with a given name
Modified: jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/Signal.java
===================================================================
--- jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/Signal.java 2008-08-11 10:47:13 UTC (rev 1863)
+++ jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/model/Signal.java 2008-08-11 10:56:42 UTC (rev 1864)
@@ -34,17 +34,24 @@
/**
* Defines the types of supported Signals
*/
- public enum Type
+ public enum SignalType
{
- ENTER_START_EVENT, EXIT_START_EVENT, ENTER_EVENT, EXIT_EVENT, ENTER_END_EVENT, EXIT_END_EVENT, ENTER_GATEWAY, EXIT_GATEWAY, ENTER_PROCESS, EXIT_PROCESS, ENTER_SUB_PROCESS, EXIT_SUB_PROCESS, ENTER_TASK, EXIT_TASK, USER_SIGNAL
+ ENTER_START_EVENT, EXIT_START_EVENT, START_TRIGGER,
+ ENTER_EVENT, EXIT_EVENT, EVENT_TRIGGER,
+ ENTER_END_EVENT, EXIT_END_EVENT, END_TRIGGER,
+ ENTER_GATEWAY, EXIT_GATEWAY,
+ ENTER_PROCESS, EXIT_PROCESS,
+ ENTER_SUB_PROCESS, EXIT_SUB_PROCESS,
+ ENTER_TASK, EXIT_TASK, TASK_TRIGGER,
+ USER_SIGNAL
}
- private Type type;
+ private SignalType type;
private String message;
private String fromRef;
/** Create the signal for a given process */
- public Signal(String fromRef, Type type)
+ public Signal(String fromRef, SignalType type)
{
this.fromRef = fromRef;
this.type = type;
@@ -55,7 +62,7 @@
}
/** Create the signal for a given process */
- public Signal(String fromRef, Type type, String message)
+ public Signal(String fromRef, SignalType type, String message)
{
this(fromRef, type);
this.message = message;
@@ -66,7 +73,7 @@
return fromRef;
}
- public Type getType()
+ public SignalType getType()
{
return type;
}
Modified: jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/runtime/FlowHandler.java
===================================================================
--- jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/runtime/FlowHandler.java 2008-08-11 10:47:13 UTC (rev 1863)
+++ jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/runtime/FlowHandler.java 2008-08-11 10:56:42 UTC (rev 1864)
@@ -24,8 +24,8 @@
//$Id$
import org.jboss.bpm.client.ProcessEngine;
-import org.jboss.bpm.model.ConnectingObject;
import org.jboss.bpm.model.FlowObject;
+import org.jboss.bpm.model.SequenceFlow;
/**
* The {@link ProcessEngine} invokes the FlowHandler on an {@link HandlerSupport}
@@ -39,8 +39,8 @@
/**
* Execute the the FlowHandler.
* <p/>
- * The FlowHandler will add the active outgoing {@link ConnectingObject}s to
- * some {@link ConnectingObject} queue for the {@link ProcessEngine} to execute.
+ * The FlowHandler will add the active outgoing {@link SequenceFlow}s to
+ * the the {@link FlowScheduler} for the {@link ProcessEngine} to execute.
*/
void execute(FlowScheduler scheduler, Token token);
Modified: jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/test/AbstractAPITestCase.java
===================================================================
--- jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/test/AbstractAPITestCase.java 2008-08-11 10:47:13 UTC (rev 1863)
+++ jbossbpm/spec/trunk/modules/api/src/main/java/org/jboss/bpm/test/AbstractAPITestCase.java 2008-08-11 10:56:42 UTC (rev 1864)
@@ -121,7 +121,7 @@
return Collections.unmodifiableList(signals);
}
- public List<Signal> getSignals(Signal.Type type)
+ public List<Signal> getSignals(Signal.SignalType type)
{
List<Signal> retSignals = new ArrayList<Signal>();
for (Signal sig : signals)
Modified: jbossbpm/spec/trunk/modules/dialects/api10/src/main/java/org/jboss/bpm/dialect/api10/ProcessUnmarshaller.java
===================================================================
--- jbossbpm/spec/trunk/modules/dialects/api10/src/main/java/org/jboss/bpm/dialect/api10/ProcessUnmarshaller.java 2008-08-11 10:47:13 UTC (rev 1863)
+++ jbossbpm/spec/trunk/modules/dialects/api10/src/main/java/org/jboss/bpm/dialect/api10/ProcessUnmarshaller.java 2008-08-11 10:56:42 UTC (rev 1864)
@@ -184,7 +184,7 @@
{
if (jaxb instanceof JAXBStartEvent)
{
- procBuilder.addStartEvent();
+ procBuilder.addStartEvent("Start");
JAXBStartEvent jaxbStart = (JAXBStartEvent)jaxb;
addOutFlow(procBuilder, jaxbStart.getOutFlow());
}
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-11 10:47:13 UTC (rev 1863)
+++ jbossbpm/spec/trunk/modules/dialects/api10/src/test/java/org/jboss/bpm/dialect/api10/include/ProcessIncludeTest.java 2008-08-11 10:56:42 UTC (rev 1864)
@@ -42,7 +42,7 @@
ProcessManager pm = ProcessManager.locateProcessManager();
Process proc = pm.createProcess(getResourceURL("include/proc-api10.xml"));
- ReceiveTask recTask = (ReceiveTask)proc.getFlowObjectByName("A");
+ ReceiveTask recTask = (ReceiveTask)proc.getFlowObject("A");
Message msg = recTask.getMessageRef();
assertEquals("FooMsg", msg.getName());
assertEquals("bar", msg.getPropertyValue("foo"));
Modified: jbossbpm/spec/trunk/modules/dialects/api10/src/test/java/org/jboss/bpm/dialect/api10/message/ProcessMessageTest.java
===================================================================
--- jbossbpm/spec/trunk/modules/dialects/api10/src/test/java/org/jboss/bpm/dialect/api10/message/ProcessMessageTest.java 2008-08-11 10:47:13 UTC (rev 1863)
+++ jbossbpm/spec/trunk/modules/dialects/api10/src/test/java/org/jboss/bpm/dialect/api10/message/ProcessMessageTest.java 2008-08-11 10:56:42 UTC (rev 1864)
@@ -48,7 +48,7 @@
public void testProcessMessage() throws Exception
{
ProcessBuilder procBuilder = ProcessBuilderFactory.newInstance().newProcessBuilder();
- procBuilder.addProcess(getName()).addStartEvent().addSequenceFlow("End").addEndEvent("End");
+ procBuilder.addProcess(getName()).addStartEvent("Start").addSequenceFlow("End").addEndEvent("End");
MessageBuilder msgBuilder = procBuilder.addMessage("FooMsg");
msgBuilder.addProperty("foo", "bar");
Process expProc = procBuilder.getProcess();
@@ -60,14 +60,14 @@
dh.marshallProcess(expProc, strwr);
Process wasProc = dh.createProcess(strwr.toString(), false);
- Message msg = wasProc.getMessageByName("FooMsg");
+ Message msg = wasProc.getMessage("FooMsg");
assertEquals("bar", msg.getPropertyValue("foo"));
}
public void testReceiveTaskWithMessage() throws Exception
{
ProcessBuilder procBuilder = ProcessBuilderFactory.newInstance().newProcessBuilder();
- procBuilder.addProcess(getName()).addStartEvent().addSequenceFlow("A");
+ procBuilder.addProcess(getName()).addStartEvent("Start").addSequenceFlow("A");
TaskBuilder taskBuilder = procBuilder.addTask("A", TaskType.Receive);
MessageBuilder msgBuilder = taskBuilder.addMessage("FooMsg");
msgBuilder.addProperty("foo", "bar");
@@ -81,7 +81,7 @@
dh.marshallProcess(expProc, strwr);
Process wasProc = dh.createProcess(strwr.toString(), false);
- ReceiveTask recTask = (ReceiveTask)wasProc.getFlowObjectByName("A");
+ ReceiveTask recTask = (ReceiveTask)wasProc.getFlowObject("A");
Message msg = recTask.getMessageRef();
assertEquals("FooMsg", msg.getName());
assertEquals("bar", msg.getPropertyValue("foo"));
@@ -90,7 +90,7 @@
public void testReceiveTaskWithMessageRef() throws Exception
{
ProcessBuilder procBuilder = ProcessBuilderFactory.newInstance().newProcessBuilder();
- procBuilder.addProcess(getName()).addStartEvent().addSequenceFlow("A");
+ procBuilder.addProcess(getName()).addStartEvent("Start").addSequenceFlow("A");
MessageBuilder msgBuilder = procBuilder.addMessage("FooMsg");
msgBuilder.addProperty("foo", "bar");
TaskBuilder taskBuilder = procBuilder.addTask("A", TaskType.Receive);
@@ -105,7 +105,7 @@
dh.marshallProcess(expProc, strwr);
Process wasProc = dh.createProcess(strwr.toString(), false);
- ReceiveTask recTask = (ReceiveTask)wasProc.getFlowObjectByName("A");
+ ReceiveTask recTask = (ReceiveTask)wasProc.getFlowObject("A");
Message msg = recTask.getMessageRef();
assertEquals("FooMsg", msg.getName());
assertEquals("bar", msg.getPropertyValue("foo"));
Modified: jbossbpm/spec/trunk/modules/dialects/jpdl32/src/main/java/org/jboss/bpm/dialect/jpdl32/ProcessDefinitionAdapter.java
===================================================================
--- jbossbpm/spec/trunk/modules/dialects/jpdl32/src/main/java/org/jboss/bpm/dialect/jpdl32/ProcessDefinitionAdapter.java 2008-08-11 10:47:13 UTC (rev 1863)
+++ jbossbpm/spec/trunk/modules/dialects/jpdl32/src/main/java/org/jboss/bpm/dialect/jpdl32/ProcessDefinitionAdapter.java 2008-08-11 10:56:42 UTC (rev 1864)
@@ -84,7 +84,7 @@
private void adaptStartState(ProcessBuilder builder, JPDL32StartState jpdlStart)
{
- builder.addStartEvent();
+ builder.addStartEvent("Start");
adaptTransitions(builder, jpdlStart.getDescriptionOrTaskOrTransition());
}
Modified: jbossbpm/spec/trunk/modules/dialects/stp/src/main/java/org/jboss/bpm/dialect/stp/ProcessUnmarshaller.java
===================================================================
--- jbossbpm/spec/trunk/modules/dialects/stp/src/main/java/org/jboss/bpm/dialect/stp/ProcessUnmarshaller.java 2008-08-11 10:47:13 UTC (rev 1863)
+++ jbossbpm/spec/trunk/modules/dialects/stp/src/main/java/org/jboss/bpm/dialect/stp/ProcessUnmarshaller.java 2008-08-11 10:56:42 UTC (rev 1864)
@@ -157,7 +157,7 @@
ActivityType activityType = stpActivity.getActivityType();
if (activityType == ActivityType.EVENT_START_EMPTY)
{
- builder.addStartEvent();
+ builder.addStartEvent("Start");
adaptOutgoingEdges(builder, stpActivity);
}
else if (activityType == ActivityType.EVENT_END_EMPTY)
Modified: jbossbpm/spec/trunk/modules/dialects/xpdl21/src/main/java/org/jboss/bpm/dialect/xpdl21/WorkflowProcessAdapter.java
===================================================================
--- jbossbpm/spec/trunk/modules/dialects/xpdl21/src/main/java/org/jboss/bpm/dialect/xpdl21/WorkflowProcessAdapter.java 2008-08-11 10:47:13 UTC (rev 1863)
+++ jbossbpm/spec/trunk/modules/dialects/xpdl21/src/main/java/org/jboss/bpm/dialect/xpdl21/WorkflowProcessAdapter.java 2008-08-11 10:56:42 UTC (rev 1864)
@@ -53,7 +53,7 @@
{
if (xpdlEvent.getStartEvent() != null)
{
- builder.addStartEvent();
+ builder.addStartEvent("Start");
}
else if (xpdlEvent.getEndEvent() != null)
{
Modified: jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/client/internal/ExecutionManagerImpl.java
===================================================================
--- jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/client/internal/ExecutionManagerImpl.java 2008-08-11 10:47:13 UTC (rev 1863)
+++ jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/client/internal/ExecutionManagerImpl.java 2008-08-11 10:56:42 UTC (rev 1864)
@@ -33,6 +33,7 @@
import org.jboss.bpm.model.Signal;
import org.jboss.bpm.model.StartEvent;
import org.jboss.bpm.model.Process.Status;
+import org.jboss.bpm.model.Signal.SignalType;
import org.jboss.bpm.model.internal.ProcessImpl;
import org.jboss.bpm.model.internal.RuntimeProcessImpl;
import org.jboss.bpm.model.internal.SequenceFlowImpl;
@@ -74,7 +75,7 @@
String procName = proc.getName();
SignalManager signalManager = getProcessEngine().getSignalManager();
- signalManager.throwSignal(procName, new Signal(procName, Signal.Type.ENTER_PROCESS));
+ signalManager.throwSignal(procName, new Signal(procName, SignalType.ENTER_PROCESS));
MutableFlowScheduler flowScheduler = rtProc.getFlowScheduler();
try
{
@@ -121,7 +122,7 @@
}
finally
{
- signalManager.throwSignal(procName, new Signal(procName, Signal.Type.EXIT_PROCESS));
+ signalManager.throwSignal(procName, new Signal(procName, Signal.SignalType.EXIT_PROCESS));
}
}
Modified: jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/client/internal/ProcessManagerImpl.java
===================================================================
--- jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/client/internal/ProcessManagerImpl.java 2008-08-11 10:47:13 UTC (rev 1863)
+++ jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/client/internal/ProcessManagerImpl.java 2008-08-11 10:56:42 UTC (rev 1864)
@@ -28,11 +28,15 @@
import javax.management.ObjectName;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.jboss.bpm.ProcessTimeoutException;
import org.jboss.bpm.client.DialectHandler;
import org.jboss.bpm.client.DialectRegistry;
import org.jboss.bpm.client.ExecutionManager;
import org.jboss.bpm.client.ProcessManager;
import org.jboss.bpm.model.Process;
+import org.jboss.bpm.model.internal.ProcessImpl;
import org.jboss.bpm.model.Process.Status;
import org.jboss.bpm.runtime.Attachments;
@@ -44,6 +48,9 @@
*/
public class ProcessManagerImpl extends ProcessManager
{
+ // provide logging
+ private static final Log log = LogFactory.getLog(ProcessManagerImpl.class);
+
public void setDialectHandlers(Map<String, DialectHandler> dialectHandlers)
{
this.dialectHandlers = dialectHandlers;
@@ -70,7 +77,7 @@
public ObjectName startProcess(String name, Attachments att)
{
- Set<Process> procSet = findProcessByName(name, Status.Ready);
+ Set<Process> procSet = getProcesses(name, Status.Ready);
if (procSet.size() == 0)
throw new IllegalStateException("Cannot obtain process with name: " + name);
if (procSet.size() > 1)
@@ -91,4 +98,52 @@
return proc.getID();
}
+
+ @Override
+ public Status waitForEnd(ObjectName procID, long timeout)
+ {
+ ProcessImpl proc = (ProcessImpl)getProcessByID(procID);
+ Status status = proc.getStatus();
+
+ if (status == Status.None || status == Status.Ready)
+ throw new IllegalStateException("Cannot wait for process in state: " + status);
+
+ // Wait a little for the process to end
+ boolean forever = (timeout < 1);
+ long now = System.currentTimeMillis();
+ long until = now + timeout;
+ try
+ {
+ while (forever || now < until)
+ {
+ status = proc.getStatus();
+ if (status == Status.Cancelled || status == Status.Completed)
+ {
+ return status;
+ }
+ else if (status == Status.Aborted)
+ {
+ RuntimeException rte = proc.getRuntimeException();
+ if (rte == null)
+ return status;
+ else
+ throw rte;
+ }
+ Thread.sleep(100);
+ now = System.currentTimeMillis();
+ }
+ }
+ catch (InterruptedException ex)
+ {
+ log.warn(ex);
+ }
+ finally
+ {
+ // Remove the process
+ removeProcess(proc);
+ }
+
+ // Throw timeout exception if it took too long
+ throw new ProcessTimeoutException("Process timeout for: " + procID);
+ }
}
Modified: jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/ActivityImpl.java
===================================================================
--- jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/ActivityImpl.java 2008-08-11 10:47:13 UTC (rev 1863)
+++ jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/ActivityImpl.java 2008-08-11 10:56:42 UTC (rev 1864)
@@ -56,7 +56,6 @@
public abstract class ActivityImpl extends FlowObjectImpl implements Activity, MutablePropertySupport,
SingleInFlowSetterSupport, SingleOutFlowSetterSupport
{
- private String name;
private List<InputSet> inputSets = new ArrayList<InputSet>();
private List<OutputSet> outputSets = new ArrayList<OutputSet>();
private List<Expression> ioRules = new ArrayList<Expression>();
@@ -66,19 +65,9 @@
public ActivityImpl(String name)
{
- this.name = name;
+ super(name);
}
- public String getName()
- {
- return name;
- }
-
- public void setName(String name)
- {
- this.name = name;
- }
-
public int getStartQuantity()
{
throw new NotImplementedException();
Modified: jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/EndEventImpl.java
===================================================================
--- jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/EndEventImpl.java 2008-08-11 10:47:13 UTC (rev 1863)
+++ jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/EndEventImpl.java 2008-08-11 10:56:42 UTC (rev 1864)
@@ -51,20 +51,14 @@
// provide logging
private static final Log log = LogFactory.getLog(EndEventImpl.class);
- private String name;
private Set<EventDetail> result;
private ConnectingObject inFlow;
public EndEventImpl(String name)
{
- this.name = name;
+ super(name);
}
- public String getName()
- {
- return name;
- }
-
public ConnectingObject getInFlow()
{
return inFlow;
@@ -108,12 +102,12 @@
{
public Signal getEnterSignal()
{
- return new Signal(getName(), Signal.Type.ENTER_END_EVENT);
+ return new Signal(getName(), Signal.SignalType.ENTER_END_EVENT);
}
public Signal getExitSignal()
{
- return new Signal(getName(), Signal.Type.EXIT_END_EVENT);
+ return new Signal(getName(), Signal.SignalType.EXIT_END_EVENT);
}
};
}
Copied: jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/EventBuilderImpl.java (from rev 1863, jbossbpm/spec/branches/tdiesler/modules/ri/src/main/java/org/jboss/bpm/model/internal/EventBuilderImpl.java)
===================================================================
--- jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/EventBuilderImpl.java (rev 0)
+++ jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/EventBuilderImpl.java 2008-08-11 10:56:42 UTC (rev 1864)
@@ -0,0 +1,68 @@
+/*
+ * 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.model.internal;
+
+//$Id$
+
+import org.jboss.bpm.NotImplementedException;
+import org.jboss.bpm.model.Event;
+import org.jboss.bpm.model.EventBuilder;
+import org.jboss.bpm.model.Signal;
+import org.jboss.bpm.model.StartEvent;
+import org.jboss.bpm.model.Signal.SignalType;
+
+/**
+ * The EventBuilder can be used to build an {@link Event} dynamically.
+ *
+ * @author thomas.diesler(a)jboss.com
+ * @since 08-Jul-2008
+ */
+public class EventBuilderImpl extends ProcessBuilderImpl implements EventBuilder
+{
+ public EventBuilderImpl(ProcessImpl proc, FlowObjectImpl flowObject)
+ {
+ super(proc, flowObject);
+ }
+
+ public EventBuilder addSignalTrigger(String fromRef, SignalType signalType, String message)
+ {
+ EventImpl event = getEvent();
+ if (event instanceof StartEvent)
+ {
+ StartEventImpl start = (StartEventImpl)event;
+ Signal signal = new Signal(fromRef, signalType, message);
+ start.addTrigger(new SignalEventDetailImpl(signal));
+ }
+ else
+ {
+ throw new NotImplementedException("Trigger on: " + event);
+ }
+ return this;
+ }
+
+ private EventImpl getEvent()
+ {
+ if (flowObject instanceof Event == false)
+ throw new IllegalStateException("Last added flow object is not an Event: " + flowObject);
+ return (EventImpl)flowObject;
+ }
+}
\ No newline at end of file
Modified: jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/EventImpl.java
===================================================================
--- jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/EventImpl.java 2008-08-11 10:47:13 UTC (rev 1863)
+++ jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/EventImpl.java 2008-08-11 10:56:42 UTC (rev 1864)
@@ -36,5 +36,8 @@
@SuppressWarnings("serial")
public abstract class EventImpl extends FlowObjectImpl implements Event
{
-
+ public EventImpl(String name)
+ {
+ super(name);
+ }
}
\ No newline at end of file
Modified: jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/ExclusiveGatewayImpl.java
===================================================================
--- jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/ExclusiveGatewayImpl.java 2008-08-11 10:47:13 UTC (rev 1863)
+++ jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/ExclusiveGatewayImpl.java 2008-08-11 10:56:42 UTC (rev 1864)
@@ -26,12 +26,12 @@
import java.util.HashMap;
import java.util.Map;
-import org.jboss.bpm.NotImplementedException;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.jboss.bpm.model.ConnectingObject;
import org.jboss.bpm.model.ExclusiveGateway;
import org.jboss.bpm.model.Expression;
-import org.jboss.bpm.model.ConnectingObject;
import org.jboss.bpm.model.Gate;
-import org.jboss.bpm.model.Gateway;
import org.jboss.bpm.model.SequenceFlow;
import org.jboss.bpm.model.Expression.ExpressionLanguage;
import org.jboss.bpm.model.SequenceFlow.ConditionType;
@@ -52,6 +52,9 @@
@SuppressWarnings("serial")
public abstract class ExclusiveGatewayImpl extends GatewayImpl implements ExclusiveGateway
{
+ // provide logging
+ private static final Log log = LogFactory.getLog(ExclusiveGatewayImpl.class);
+
public ExclusiveGatewayImpl(String name)
{
super(name);
@@ -65,80 +68,101 @@
@Override
public void addInFlow(ConnectingObject inFlow)
{
- if (getInFlows().size() > 0)
- throw new NotImplementedException("ExclusiveGateway with multiple inFlows");
-
super.addInFlow(inFlow);
}
@Override
public FlowHandler getFlowHandler()
{
- final Gateway gateway = this;
FlowHandler handler = super.getFlowHandler();
- if (handler == null && getGates().size() > 1)
+ if (handler == null)
{
handler = new FlowHandler()
{
public void execute(FlowScheduler scheduler, Token token)
{
- Gate selectedGate = null;
- for (Gate auxGate : getGates())
+ // Schedule the first token that arrives
+ if (receivedTokens.size() == 1)
{
- SequenceFlow seqFlow = auxGate.getOutgoingSequenceFlow();
- if (seqFlow.getConditionType() == ConditionType.Expression)
- {
- Expression expr = seqFlow.getConditionExpression();
- if (expr.getExpressionLanguage() == ExpressionLanguage.MVEL)
- {
- String mvel = expr.getExpressionBody();
- ExecutionContext exContext = token.getExecutionContext();
- Map<String, Object> vars = new HashMap<String, Object>();
- for (Key key : exContext.getAttachmentKeys())
- {
- String name = key.getNamePart();
- Object value = exContext.getAttachment(name);
- vars.put(name, value);
- }
- Boolean result = (Boolean)MVEL.eval(mvel, vars);
- if (result == true)
- {
- selectedGate = auxGate;
- break;
- }
- }
- else
- {
- throw new IllegalStateException("Unsupported expression language: " + expr.getExpressionLanguage());
- }
- }
+ Gate selectedGate = getSelectedGate(token);
+ SequenceFlow outFlow = selectedGate.getOutgoingSequenceFlow();
+ scheduler.scheduleTuple(outFlow, token);
}
-
- // Fallback to the default gate if there is one
- if (selectedGate == null)
+ // Ignore all other tokens
+ else
{
- for (Gate auxGate : getGates())
- {
- SequenceFlow seqFlow = auxGate.getOutgoingSequenceFlow();
- if (seqFlow.getConditionType() == ConditionType.Default)
- {
- selectedGate = auxGate;
- break;
- }
- }
+ log.debug("Ignore token: " + token);
}
- if (selectedGate == null)
- throw new IllegalStateException("Cannot select applicable gate in: " + gateway);
-
- SequenceFlow outFlow = selectedGate.getOutgoingSequenceFlow();
- scheduler.scheduleTuple(outFlow, token);
+ // Reset the gateway
+ if (expectedFlows.size() == 0)
+ {
+ expectedFlows.addAll(inFlows);
+ receivedTokens.clear();
+ }
}
};
}
return handler;
}
+ // Get a single selected gate which' condition evaluates to TRUE
+ // Fall back to the default gate if there is one
+ // Choke if there is no selected gate
+ private Gate getSelectedGate(Token token)
+ {
+ Gate selectedGate = null;
+ for (Gate auxGate : getGates())
+ {
+ SequenceFlow seqFlow = auxGate.getOutgoingSequenceFlow();
+ if (seqFlow.getConditionType() == ConditionType.Expression)
+ {
+ Expression expr = seqFlow.getConditionExpression();
+ if (expr.getExpressionLanguage() == ExpressionLanguage.MVEL)
+ {
+ String mvel = expr.getExpressionBody();
+ ExecutionContext exContext = token.getExecutionContext();
+ Map<String, Object> vars = new HashMap<String, Object>();
+ for (Key key : exContext.getAttachmentKeys())
+ {
+ String name = key.getNamePart();
+ Object value = exContext.getAttachment(name);
+ vars.put(name, value);
+ }
+ Boolean result = (Boolean)MVEL.eval(mvel, vars);
+ if (result == true)
+ {
+ selectedGate = auxGate;
+ break;
+ }
+ }
+ else
+ {
+ throw new IllegalStateException("Unsupported expression language: " + expr.getExpressionLanguage());
+ }
+ }
+ }
+
+ // Fallback to the default gate if there is one
+ if (selectedGate == null)
+ {
+ for (Gate auxGate : getGates())
+ {
+ SequenceFlow seqFlow = auxGate.getOutgoingSequenceFlow();
+ if (seqFlow.getConditionType() == ConditionType.Default)
+ {
+ selectedGate = auxGate;
+ break;
+ }
+ }
+ }
+
+ if (selectedGate == null)
+ throw new IllegalStateException("Cannot select applicable gate in: " + this);
+
+ return selectedGate;
+ }
+
public String toString()
{
return "ExclusiveGateway[" + getName() + "]";
Modified: jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/FlowObjectImpl.java
===================================================================
--- jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/FlowObjectImpl.java 2008-08-11 10:47:13 UTC (rev 1863)
+++ jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/FlowObjectImpl.java 2008-08-11 10:56:42 UTC (rev 1864)
@@ -50,16 +50,32 @@
@SuppressWarnings("serial")
public abstract class FlowObjectImpl extends GraphicalElementImpl implements FlowObject, HandlerSetterSupport, Executable
{
+ private String name;
private Process proc;
private FlowHandler flowHandler;
private SignalHandler signalHandler;
private ExecutionHandler executionHandler;
+ public FlowObjectImpl(String name)
+ {
+ this.name = name;
+ }
+
public Process getProcess()
{
return proc;
}
+ public String getName()
+ {
+ return name;
+ }
+
+ public void setName(String name)
+ {
+ this.name = name;
+ }
+
public ExecutionHandler getExecutionHandler()
{
return executionHandler;
@@ -171,7 +187,7 @@
if (flow != null)
{
String name = flow.getTargetName();
- FlowObject target = proc.getFlowObjectByName(name);
+ FlowObject target = proc.getFlowObject(name);
if (target == null)
throw new InvalidProcessException("Cannot find target for out flow: " + name);
Modified: jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/GatewayBuilderImpl.java
===================================================================
--- jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/GatewayBuilderImpl.java 2008-08-11 10:47:13 UTC (rev 1863)
+++ jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/GatewayBuilderImpl.java 2008-08-11 10:56:42 UTC (rev 1864)
@@ -68,7 +68,7 @@
private GatewayImpl getGateway()
{
if (flowObject instanceof Gateway == false)
- throw new IllegalStateException("Last added flow object is not a Gateway");
+ throw new IllegalStateException("Last added flow object is not a Gateway: " + flowObject);
return (GatewayImpl)flowObject;
}
}
\ No newline at end of file
Modified: jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/GatewayImpl.java
===================================================================
--- jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/GatewayImpl.java 2008-08-11 10:47:13 UTC (rev 1863)
+++ jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/GatewayImpl.java 2008-08-11 10:56:42 UTC (rev 1864)
@@ -25,28 +25,22 @@
import java.util.ArrayList;
import java.util.Collections;
-import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
-import java.util.Set;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.jboss.bpm.model.ConnectingObject;
import org.jboss.bpm.model.Gate;
import org.jboss.bpm.model.Gateway;
-import org.jboss.bpm.model.GraphicalElement;
-import org.jboss.bpm.model.NameSupport;
+import org.jboss.bpm.model.Process;
import org.jboss.bpm.model.SequenceFlow;
import org.jboss.bpm.model.Signal;
import org.jboss.bpm.model.SequenceFlow.ConditionType;
import org.jboss.bpm.runtime.ExecutionHandler;
-import org.jboss.bpm.runtime.FlowHandler;
-import org.jboss.bpm.runtime.FlowScheduler;
import org.jboss.bpm.runtime.SignalHandler;
import org.jboss.bpm.runtime.Token;
-import org.jboss.bpm.runtime.internal.TokenImpl;
/**
* Gateways are modelling elements that are used to control how Sequence Flow interact as they converge and diverge
@@ -61,24 +55,20 @@
// provide logging
private static final Log log = LogFactory.getLog(GatewayImpl.class);
- private String name;
+ // The list of incomming flows
protected List<ConnectingObject> inFlows = new ArrayList<ConnectingObject>();
+ // The list of outgoing gates
private Map<String, Gate> gates = new LinkedHashMap<String, Gate>();
+ // The list of flows from which a token is expected
+ protected List<ConnectingObject> expectedFlows;
+ // The list of received tokens
+ protected List<Token> receivedTokens;
- // Sync management
- private Set<ConnectingObject> outstandingFlows;
- private Set<Token> mergeTokens;
-
public GatewayImpl(String name)
{
- this.name = name;
+ super(name);
}
- public String getName()
- {
- return name;
- }
-
public List<Gate> getGates()
{
return Collections.unmodifiableList(new ArrayList<Gate>(gates.values()));
@@ -124,28 +114,27 @@
@Override
public void execute(Token token)
{
- // Multiple incomingFlows must be synchronized
- if (getInFlows().size() > 1)
+ // Initialize the gateway
+ if (expectedFlows == null)
{
- if (outstandingFlows == null)
- {
- outstandingFlows = new HashSet<ConnectingObject>(inFlows);
- mergeTokens = new HashSet<Token>();
- }
-
- ConnectingObject flow = token.getFlow();
- outstandingFlows.remove(flow);
-
- if (outstandingFlows.size() > 0)
- mergeTokens.add(token);
+ expectedFlows = new ArrayList<ConnectingObject>(inFlows);
+ receivedTokens = new ArrayList<Token>();
}
+
+ // Check that token from flow is valid
+ ConnectingObject flow = token.getFlow();
+ if (expectedFlows.contains(flow) == false)
+ throw new IllegalStateException("Unexpected token from: " + flow);
+
+ // Call execution handler
+ ExecutionHandler exHandler = getExecutionHandler();
+ exHandler.execute(token);
- // Call the execution handler with the InputSet
- ExecutionHandler handler = getExecutionHandler();
- if (handler != null)
- {
- handler.execute(token);
- }
+ // Remove the flow from the expected list
+ expectedFlows.remove(flow);
+
+ // Store the received token for processing in the FlowHandler
+ receivedTokens.add(token);
}
public ExecutionHandler getExecutionHandler()
@@ -164,60 +153,6 @@
return handler;
}
- public FlowHandler getFlowHandler()
- {
- FlowHandler handler = super.getFlowHandler();
- if (handler == null && gates.size() == 1)
- {
- Gate onlyGate = gates.values().iterator().next();
- final SequenceFlow outFlow = onlyGate.getOutgoingSequenceFlow();
- handler = new FlowHandler()
- {
- public void execute(FlowScheduler scheduler, Token token)
- {
- if (getInFlows().size() > 1)
- {
- if (outstandingFlows.size() == 0)
- {
- Token mergedToken = mergeTokens(token);
- scheduler.scheduleTuple(outFlow, mergedToken);
- outstandingFlows = null;
- mergeTokens = null;
- }
- else
- {
- // Log the list of outstanding flows
- Set<String> sourceNames = new HashSet<String>();
- for (ConnectingObject flow : outstandingFlows)
- {
- GraphicalElement sourceRef = flow.getSourceRef();
- if (sourceRef instanceof NameSupport)
- sourceNames.add(((NameSupport)sourceRef).getName());
- else
- sourceNames.add(sourceRef.getID().getCanonicalName());
- }
- log.debug("Waiting for " + outstandingFlows + " in gateway: " + sourceNames);
- }
- }
- else
- {
- scheduler.scheduleTuple(outFlow, token);
- }
- }
- };
- }
- return handler;
- }
-
- private Token mergeTokens(Token token)
- {
- TokenImpl mergedToken = new TokenImpl(null);
- for (Token auxToken : mergeTokens)
- mergedToken.mergeToken(auxToken);
-
- return mergedToken;
- }
-
public SignalHandler getSignalHandler()
{
SignalHandler handler = super.getSignalHandler();
@@ -227,12 +162,12 @@
{
public Signal getEnterSignal()
{
- return new Signal(getName(), Signal.Type.ENTER_GATEWAY);
+ return new Signal(getName(), Signal.SignalType.ENTER_GATEWAY);
}
public Signal getExitSignal()
{
- return new Signal(getName(), Signal.Type.EXIT_GATEWAY);
+ return new Signal(getName(), Signal.SignalType.EXIT_GATEWAY);
}
};
}
Modified: jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/IntermediateEventImpl.java
===================================================================
--- jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/IntermediateEventImpl.java 2008-08-11 10:47:13 UTC (rev 1863)
+++ jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/IntermediateEventImpl.java 2008-08-11 10:56:42 UTC (rev 1864)
@@ -48,20 +48,14 @@
// provide logging
private static final Log log = LogFactory.getLog(IntermediateEventImpl.class);
- private String name;
private ConnectingObject inFlow;
private ConnectingObject outFlow;
public IntermediateEventImpl(String name)
{
- this.name = name;
+ super(name);
}
- public String getName()
- {
- return name;
- }
-
public ConnectingObject getInFlow()
{
return inFlow;
@@ -123,12 +117,12 @@
{
public Signal getEnterSignal()
{
- return new Signal(getName(), Signal.Type.ENTER_EVENT);
+ return new Signal(getName(), Signal.SignalType.ENTER_EVENT);
}
public Signal getExitSignal()
{
- return new Signal(getName(), Signal.Type.EXIT_EVENT);
+ return new Signal(getName(), Signal.SignalType.EXIT_EVENT);
}
};
}
Deleted: jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/NoneEventDetailImpl.java
===================================================================
--- jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/NoneEventDetailImpl.java 2008-08-11 10:47:13 UTC (rev 1863)
+++ jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/NoneEventDetailImpl.java 2008-08-11 10:56:42 UTC (rev 1864)
@@ -1,41 +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.model.internal;
-
-//$Id$
-
-import org.jboss.bpm.model.NoneEventDetail;
-
-/**
- * The None event detail.
- *
- * @author thomas.diesler(a)jboss.com
- * @since 08-Jul-2008
- */
-@SuppressWarnings("serial")
-public class NoneEventDetailImpl extends EventDetailImpl implements NoneEventDetail
-{
- public EventDetailType getEventDetailType()
- {
- return EventDetailType.None;
- }
-}
\ No newline at end of file
Modified: jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/ParallelGatewayImpl.java
===================================================================
--- jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/ParallelGatewayImpl.java 2008-08-11 10:47:13 UTC (rev 1863)
+++ jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/ParallelGatewayImpl.java 2008-08-11 10:56:42 UTC (rev 1864)
@@ -23,12 +23,22 @@
//$Id$
+import java.util.HashSet;
+import java.util.Set;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.jboss.bpm.model.ConnectingObject;
import org.jboss.bpm.model.Gate;
+import org.jboss.bpm.model.GraphicalElement;
+import org.jboss.bpm.model.NameSupport;
import org.jboss.bpm.model.ParallelGateway;
import org.jboss.bpm.model.SequenceFlow;
+import org.jboss.bpm.runtime.ExecutionHandler;
import org.jboss.bpm.runtime.FlowHandler;
import org.jboss.bpm.runtime.FlowScheduler;
import org.jboss.bpm.runtime.Token;
+import org.jboss.bpm.runtime.internal.TokenImpl;
/**
@@ -40,6 +50,13 @@
@SuppressWarnings("serial")
public class ParallelGatewayImpl extends GatewayImpl implements ParallelGateway
{
+ // provide logging
+ private static final Log log = LogFactory.getLog(ParallelGatewayImpl.class);
+
+ // Sync management
+ private Set<ConnectingObject> outstandingFlows;
+ private Set<Token> mergeTokens;
+
public ParallelGatewayImpl(String name)
{
super(name);
@@ -50,18 +67,81 @@
return GatewayType.Parallel;
}
- /**
- * The default FlowHandler adds all out flows to the queue
- */
+ @Override
+ public void execute(Token token)
+ {
+ // Multiple incomingFlows must be synchronized
+ if (getInFlows().size() > 1)
+ {
+ if (outstandingFlows == null)
+ {
+ outstandingFlows = new HashSet<ConnectingObject>(inFlows);
+ mergeTokens = new HashSet<Token>();
+ }
+
+ ConnectingObject flow = token.getFlow();
+ outstandingFlows.remove(flow);
+
+ if (outstandingFlows.size() > 0)
+ mergeTokens.add(token);
+ }
+
+ // Call the execution handler with the InputSet
+ ExecutionHandler handler = getExecutionHandler();
+ if (handler != null)
+ {
+ handler.execute(token);
+ }
+ }
+
public FlowHandler getFlowHandler()
{
FlowHandler handler = super.getFlowHandler();
- if (handler == null)
+ if (handler == null && getGates().size() == 1)
{
+ Gate onlyGate = getGates().iterator().next();
+ final SequenceFlow outFlow = onlyGate.getOutgoingSequenceFlow();
handler = new FlowHandler()
{
public void execute(FlowScheduler scheduler, Token token)
{
+ if (getInFlows().size() > 1)
+ {
+ if (outstandingFlows.size() == 0)
+ {
+ Token mergedToken = mergeTokens(token);
+ scheduler.scheduleTuple(outFlow, mergedToken);
+ outstandingFlows = null;
+ mergeTokens = null;
+ }
+ else
+ {
+ // Log the list of outstanding flows
+ Set<String> sourceNames = new HashSet<String>();
+ for (ConnectingObject flow : outstandingFlows)
+ {
+ GraphicalElement sourceRef = flow.getSourceRef();
+ if (sourceRef instanceof NameSupport)
+ sourceNames.add(((NameSupport)sourceRef).getName());
+ else
+ sourceNames.add(sourceRef.getID().getCanonicalName());
+ }
+ log.debug("Waiting for " + outstandingFlows + " in gateway: " + sourceNames);
+ }
+ }
+ else
+ {
+ scheduler.scheduleTuple(outFlow, token);
+ }
+ }
+ };
+ }
+ else if (handler == null && getGates().size() > 1)
+ {
+ handler = new FlowHandler()
+ {
+ public void execute(FlowScheduler scheduler, Token token)
+ {
for(Gate gate : getGates())
{
SequenceFlow outFlow = gate.getOutgoingSequenceFlow();
@@ -73,6 +153,15 @@
return handler;
}
+ private Token mergeTokens(Token token)
+ {
+ TokenImpl mergedToken = new TokenImpl(null);
+ for (Token auxToken : mergeTokens)
+ mergedToken.mergeToken(auxToken);
+
+ return mergedToken;
+ }
+
public String toString()
{
return "ParallelGateway[" + getName() + "]";
Modified: jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/ProcessBuilderImpl.java
===================================================================
--- jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/ProcessBuilderImpl.java 2008-08-11 10:47:13 UTC (rev 1863)
+++ jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/ProcessBuilderImpl.java 2008-08-11 10:56:42 UTC (rev 1864)
@@ -24,6 +24,7 @@
//$Id$
import org.jboss.bpm.NotImplementedException;
+import org.jboss.bpm.model.EventBuilder;
import org.jboss.bpm.model.FlowObject;
import org.jboss.bpm.model.Gateway;
import org.jboss.bpm.model.GatewayBuilder;
@@ -136,26 +137,26 @@
return this;
}
- public ProcessBuilder addStartEvent()
+ public EventBuilder addStartEvent(String name)
{
- flowObject = addFlowObject(new StartEventImpl());
- return this;
+ flowObject = addFlowObject(new StartEventImpl(name));
+ return new EventBuilderImpl(proc, flowObject);
}
- public ProcessBuilder addEvent(String name)
+ public EventBuilder addEvent(String name)
{
- flowObject = (FlowObjectImpl)proc.getFlowObjectByName(name);
+ flowObject = (FlowObjectImpl)proc.getFlowObject(name);
if (flowObject == null)
flowObject = addFlowObject(new IntermediateEventImpl(name));
- return this;
+ return new EventBuilderImpl(proc, flowObject);
}
- public ProcessBuilder addEndEvent(String name)
+ public EventBuilder addEndEvent(String name)
{
- flowObject = (FlowObjectImpl)proc.getFlowObjectByName(name);
+ flowObject = (FlowObjectImpl)proc.getFlowObject(name);
if (flowObject == null)
flowObject = addFlowObject(new EndEventImpl(name));
- return this;
+ return new EventBuilderImpl(proc, flowObject);
}
public TaskBuilder addTask(String name)
@@ -165,7 +166,7 @@
public TaskBuilder addTask(String name, TaskType type)
{
- flowObject = (FlowObjectImpl)proc.getFlowObjectByName(name);
+ flowObject = (FlowObjectImpl)proc.getFlowObject(name);
if (flowObject == null)
{
if (type == TaskType.None || type == null)
@@ -191,7 +192,7 @@
public GatewayBuilder addGateway(String name, GatewayType type)
{
- flowObject = (FlowObjectImpl)proc.getFlowObjectByName(name);
+ flowObject = (FlowObjectImpl)proc.getFlowObject(name);
if (flowObject == null)
{
if (GatewayType.Exclusive == type)
Modified: jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/ProcessImpl.java
===================================================================
--- jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/ProcessImpl.java 2008-08-11 10:47:13 UTC (rev 1863)
+++ jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/ProcessImpl.java 2008-08-11 10:56:42 UTC (rev 1864)
@@ -180,7 +180,7 @@
public StartEvent getStartEvent(String name)
{
- FlowObject fo = getFlowObjectByName(name);
+ FlowObject fo = getFlowObject(name);
if (fo instanceof StartEvent == false)
throw new IllegalArgumentException("Is not a start event: " + fo);
@@ -202,7 +202,7 @@
public EndEvent getEndEvent(String name)
{
- FlowObject fo = getFlowObjectByName(name);
+ FlowObject fo = getFlowObject(name);
if (fo instanceof EndEvent == false)
throw new IllegalArgumentException("Is not an end event: " + fo);
@@ -253,7 +253,7 @@
throw new IllegalStateException("Cannot start process in state: " + getStatus());
// Register the process if needed
- if (pm.findProcessByName(getName(), null).size() == 0)
+ if (pm.getProcesses(getName(), null).size() == 0)
{
pm.registerProcess(this);
}
@@ -273,7 +273,7 @@
pm.waitForEnd(getID(), timeout);
}
- public FlowObject getFlowObjectByName(String name)
+ public FlowObject getFlowObject(String name)
{
if (name == null)
throw new IllegalArgumentException("Cannot find flow object with name: null");
@@ -294,6 +294,18 @@
return flowObject;
}
+ @SuppressWarnings("unchecked")
+ public <T extends FlowObject> List<T> getFlowObjects(Class<T> clazz)
+ {
+ List<T> retFlowObjects = new ArrayList<T>();
+ for (FlowObject fo : flowObjects)
+ {
+ if (clazz.isAssignableFrom(fo.getClass()))
+ retFlowObjects.add((T)fo);
+ }
+ return retFlowObjects;
+ }
+
public Status getStatus()
{
return status;
@@ -311,13 +323,13 @@
public void addMessage(Message msg)
{
- if (getMessageByName(msg.getName()) != null)
+ if (getMessage(msg.getName()) != null)
throw new InvalidProcessException("Duplicate message: " + msg);
messages.add(msg);
}
- public Message getMessageByName(String msgName)
+ public Message getMessage(String msgName)
{
for (Message msg : messages)
{
@@ -342,10 +354,10 @@
this.name = "AnonymousProcess#" + pm.getProcesses().size();
}
- if (getStartEvent() == null)
+ if (getFlowObjects(StartEvent.class).size() == 0)
throw new InvalidProcessException("Process does not have a start event");
- if (getEndEvents().size() == 0)
+ if (getFlowObjects(EndEvent.class).size() == 0)
throw new InvalidProcessException("Process does not have end events");
// Set the associated process
Modified: jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/SequenceFlowImpl.java
===================================================================
--- jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/SequenceFlowImpl.java 2008-08-11 10:47:13 UTC (rev 1863)
+++ jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/SequenceFlowImpl.java 2008-08-11 10:56:42 UTC (rev 1864)
@@ -24,6 +24,8 @@
//$Id$
import org.jboss.bpm.model.Expression;
+import org.jboss.bpm.model.GraphicalElement;
+import org.jboss.bpm.model.NameSupport;
import org.jboss.bpm.model.SequenceFlow;
/**
@@ -60,4 +62,13 @@
{
return conditionExpression;
}
+
+ public String toString()
+ {
+ GraphicalElement sourceRef = getSourceRef();
+ GraphicalElement targetRef = getTargetRef();
+ String srcName = (sourceRef instanceof NameSupport ? ((NameSupport)sourceRef).getName() : sourceRef.getID().getCanonicalName());
+ String tarName = (targetRef instanceof NameSupport ? ((NameSupport)targetRef).getName() : targetRef.getID().getCanonicalName());
+ return "SequenceFlow[" + srcName + "->" + tarName + "]";
+ }
}
\ No newline at end of file
Copied: jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/SignalEventDetailImpl.java (from rev 1863, jbossbpm/spec/branches/tdiesler/modules/ri/src/main/java/org/jboss/bpm/model/internal/SignalEventDetailImpl.java)
===================================================================
--- jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/SignalEventDetailImpl.java (rev 0)
+++ jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/SignalEventDetailImpl.java 2008-08-11 10:56:42 UTC (rev 1864)
@@ -0,0 +1,54 @@
+/*
+ * 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.model.internal;
+
+//$Id$
+
+import org.jboss.bpm.model.Signal;
+import org.jboss.bpm.model.SignalEventDetail;
+
+/**
+ * The Signal event detail
+ *
+ * @author thomas.diesler(a)jboss.com
+ * @since 08-Jul-2008
+ */
+@SuppressWarnings("serial")
+public class SignalEventDetailImpl extends SupportingElementImpl implements SignalEventDetail
+{
+ private Signal signal;
+
+ public SignalEventDetailImpl(Signal signal)
+ {
+ this.signal = signal;
+ }
+
+ public EventDetailType getEventDetailType()
+ {
+ return EventDetailType.Signal;
+ }
+
+ public Signal getSignalRef()
+ {
+ return signal;
+ }
+}
Modified: jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/StartEventImpl.java
===================================================================
--- jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/StartEventImpl.java 2008-08-11 10:47:13 UTC (rev 1863)
+++ jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/StartEventImpl.java 2008-08-11 10:56:42 UTC (rev 1864)
@@ -56,11 +56,21 @@
private ConnectingObject outFlow;
private List<EventDetail> triggers = new ArrayList<EventDetail>();
+ public StartEventImpl(String name)
+ {
+ super(name);
+ }
+
public List<EventDetail> getTrigger()
{
return Collections.unmodifiableList(triggers);
}
+ public void addTrigger(EventDetail eventDetail)
+ {
+ triggers.add(eventDetail);
+ }
+
public ConnectingObject getOutFlow()
{
return outFlow;
@@ -112,12 +122,12 @@
{
public Signal getEnterSignal()
{
- return new Signal("Start", Signal.Type.ENTER_START_EVENT);
+ return new Signal("Start", Signal.SignalType.ENTER_START_EVENT);
}
public Signal getExitSignal()
{
- return new Signal("Start", Signal.Type.EXIT_START_EVENT);
+ return new Signal("Start", Signal.SignalType.EXIT_START_EVENT);
}
};
}
Modified: jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/SubProcessImpl.java
===================================================================
--- jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/SubProcessImpl.java 2008-08-11 10:47:13 UTC (rev 1863)
+++ jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/SubProcessImpl.java 2008-08-11 10:56:42 UTC (rev 1864)
@@ -55,12 +55,12 @@
{
public Signal getEnterSignal()
{
- return new Signal(getName(), Signal.Type.ENTER_SUB_PROCESS);
+ return new Signal(getName(), Signal.SignalType.ENTER_SUB_PROCESS);
}
public Signal getExitSignal()
{
- return new Signal(getName(), Signal.Type.EXIT_SUB_PROCESS);
+ return new Signal(getName(), Signal.SignalType.EXIT_SUB_PROCESS);
}
};
}
Modified: jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/TaskImpl.java
===================================================================
--- jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/TaskImpl.java 2008-08-11 10:47:13 UTC (rev 1863)
+++ jbossbpm/spec/trunk/modules/ri/src/main/java/org/jboss/bpm/model/internal/TaskImpl.java 2008-08-11 10:56:42 UTC (rev 1864)
@@ -63,12 +63,12 @@
{
public Signal getEnterSignal()
{
- return new Signal(getName(), Signal.Type.ENTER_TASK);
+ return new Signal(getName(), Signal.SignalType.ENTER_TASK);
}
public Signal getExitSignal()
{
- return new Signal(getName(), Signal.Type.EXIT_TASK);
+ return new Signal(getName(), Signal.SignalType.EXIT_TASK);
}
};
}
@@ -83,7 +83,7 @@
protected void initializeMessageRef(Process proc, Message msg)
{
String msgName = msg.getName();
- MessageImpl procMsg = (MessageImpl)proc.getMessageByName(msgName);
+ MessageImpl procMsg = (MessageImpl)proc.getMessage(msgName);
if (procMsg != null)
{
MessageImpl msgImpl = (MessageImpl)msg;
Modified: jbossbpm/spec/trunk/modules/samples/airticket/server/src/main/java/org/jboss/bpm/samples/airticket/AirticketProcessBuilder.java
===================================================================
--- jbossbpm/spec/trunk/modules/samples/airticket/server/src/main/java/org/jboss/bpm/samples/airticket/AirticketProcessBuilder.java 2008-08-11 10:47:13 UTC (rev 1863)
+++ jbossbpm/spec/trunk/modules/samples/airticket/server/src/main/java/org/jboss/bpm/samples/airticket/AirticketProcessBuilder.java 2008-08-11 10:56:42 UTC (rev 1864)
@@ -98,7 +98,7 @@
procBuilder.addProcess(PROCESS_NAME);
// Add Start Event
- procBuilder.addStartEvent().addSequenceFlow(TASK_RECEIVE_REQUEST);
+ procBuilder.addStartEvent("Start").addSequenceFlow(TASK_RECEIVE_REQUEST);
// Build the ReceiveReqTask
TaskBuilder taskBuilder = procBuilder.addTask(TASK_RECEIVE_REQUEST, TaskType.Receive);
Modified: jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/cts/gateway/exclusive/ExclusiveMergeTest.java
===================================================================
--- jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/cts/gateway/exclusive/ExclusiveMergeTest.java 2008-08-11 10:47:13 UTC (rev 1863)
+++ jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/cts/gateway/exclusive/ExclusiveMergeTest.java 2008-08-11 10:56:42 UTC (rev 1864)
@@ -24,6 +24,12 @@
// $Id$
import org.jboss.bpm.client.SignalManager;
+import org.jboss.bpm.model.EventBuilder;
+import org.jboss.bpm.model.Process;
+import org.jboss.bpm.model.ProcessBuilder;
+import org.jboss.bpm.model.ProcessBuilderFactory;
+import org.jboss.bpm.model.Gateway.GatewayType;
+import org.jboss.bpm.model.Signal.SignalType;
import org.jboss.bpm.test.DefaultEngineTestCase;
/**
@@ -46,6 +52,20 @@
public void testGateA() throws Exception
{
- System.out.println("FIXME: ExclusiveMergeTest");
+ Process proc = getProcess();
+ assertNotNull(proc);
}
+
+ private Process getProcess()
+ {
+ ProcessBuilder procBuilder = ProcessBuilderFactory.newInstance().newProcessBuilder();
+ EventBuilder eventBuilder = procBuilder.addProcess(getName()).addStartEvent("StartA");
+ eventBuilder.addSignalTrigger(getName(), SignalType.START_TRIGGER, "A").addSequenceFlow("Merge");
+ eventBuilder = procBuilder.addStartEvent("StartB");
+ eventBuilder.addSignalTrigger(getName(), SignalType.START_TRIGGER, "B").addSequenceFlow("Merge");
+ procBuilder.addGateway("Merge", GatewayType.Exclusive);
+ procBuilder.addSequenceFlow("End").addEndEvent("End");
+ Process proc = procBuilder.getProcess();
+ return proc;
+ }
}
Modified: jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/cts/gateway/exclusive/ExclusiveSplitTest.java
===================================================================
--- jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/cts/gateway/exclusive/ExclusiveSplitTest.java 2008-08-11 10:47:13 UTC (rev 1863)
+++ jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/cts/gateway/exclusive/ExclusiveSplitTest.java 2008-08-11 10:56:42 UTC (rev 1864)
@@ -62,7 +62,7 @@
proc.startProcess(att);
proc.waitForEnd();
- List<Signal> endSignals = getSignals(Signal.Type.EXIT_END_EVENT);
+ List<Signal> endSignals = getSignals(Signal.SignalType.EXIT_END_EVENT);
assertEquals(1, endSignals.size());
assertEquals("EndA", endSignals.get(0).getFromRef());
}
@@ -76,7 +76,7 @@
proc.startProcess(att);
proc.waitForEnd();
- List<Signal> endSignals = getSignals(Signal.Type.EXIT_END_EVENT);
+ List<Signal> endSignals = getSignals(Signal.SignalType.EXIT_END_EVENT);
assertEquals(1, endSignals.size());
assertEquals("EndB", endSignals.get(0).getFromRef());
}
@@ -102,7 +102,7 @@
private Process getProcess()
{
ProcessBuilder procBuilder = ProcessBuilderFactory.newInstance().newProcessBuilder();
- procBuilder.addProcess(getName()).addStartEvent().addSequenceFlow("Split");
+ procBuilder.addProcess(getName()).addStartEvent("Start").addSequenceFlow("Split");
GatewayBuilder gatewayBuilder = procBuilder.addGateway("Split", GatewayType.Exclusive);
gatewayBuilder.addConditionalGate("EndA", ExpressionLanguage.MVEL, "foo < 10");
gatewayBuilder.addConditionalGate("EndB", ExpressionLanguage.MVEL, "foo > 10");
Modified: jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/cts/process/ProcessIntegrityTest.java
===================================================================
--- jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/cts/process/ProcessIntegrityTest.java 2008-08-11 10:47:13 UTC (rev 1863)
+++ jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/cts/process/ProcessIntegrityTest.java 2008-08-11 10:56:42 UTC (rev 1864)
@@ -23,8 +23,6 @@
// $Id$
-import java.util.List;
-
import org.jboss.bpm.InvalidProcessException;
import org.jboss.bpm.model.EndEvent;
import org.jboss.bpm.model.FlowObject;
@@ -47,19 +45,19 @@
{
// Create a Process through the ProcessBuilder
ProcessBuilder builder = ProcessBuilderFactory.newInstance().newProcessBuilder();
- Process proc = builder.addProcess(null).addStartEvent().addSequenceFlow("taskA").addTask("taskA").
- addSequenceFlow("end").addEndEvent("end").getProcess();
+ Process proc = builder.addProcess(null).addStartEvent("Start").addSequenceFlow("taskA").addTask("taskA").
+ addSequenceFlow("End").addEndEvent("End").getProcess();
assertEquals("AnonymousProcess#0", proc.getName());
- StartEvent start = proc.getStartEvent();
+ StartEvent start = (StartEvent)proc.getFlowObject("Start");
assertNotNull("Start expected", start);
- FlowObject nfo = proc.getFlowObjectByName("taskA");
+ FlowObject nfo = proc.getFlowObject("taskA");
assertNotNull("FlowObject expected", nfo);
assertTrue("Task expected", nfo instanceof Task);
- List<EndEvent> ends = proc.getEndEvents();
- assertEquals(1, ends.size());
+ EndEvent end = (EndEvent)proc.getFlowObject("End");
+ assertNotNull(end);
}
public void testNoStartState() throws Exception
@@ -83,7 +81,7 @@
{
// Create a Process through the ProcessBuilder
ProcessBuilder builder = ProcessBuilderFactory.newInstance().newProcessBuilder();
- builder.addProcess(null).addStartEvent().addSequenceFlow("taskA").addTask("taskA").addSequenceFlow("end").
+ builder.addProcess(null).addStartEvent("Start").addSequenceFlow("taskA").addTask("taskA").addSequenceFlow("end").
addTask("end").getProcess();
fail("InvalidProcessException expected");
}
Modified: 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-11 10:47:13 UTC (rev 1863)
+++ jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/cts/process/ProcessStartTest.java 2008-08-11 10:56:42 UTC (rev 1864)
@@ -65,7 +65,7 @@
private Process getProcess()
{
ProcessBuilder builder = ProcessBuilderFactory.newInstance().newProcessBuilder();
- Process proc = builder.addProcess(getName()).addStartEvent().addSequenceFlow("taskA").
+ Process proc = builder.addProcess(getName()).addStartEvent("Start").addSequenceFlow("taskA").
addTask("taskA").addSequenceFlow("end").addEndEvent("end").getProcess();
return proc;
}
Modified: jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/cts/processmanager/ProcessRegistryTest.java
===================================================================
--- jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/cts/processmanager/ProcessRegistryTest.java 2008-08-11 10:47:13 UTC (rev 1863)
+++ jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/cts/processmanager/ProcessRegistryTest.java 2008-08-11 10:56:42 UTC (rev 1864)
@@ -75,7 +75,7 @@
private Process getProcess()
{
ProcessBuilder builder = ProcessBuilderFactory.newInstance().newProcessBuilder();
- Process proc = builder.addProcess(getName()).addStartEvent().addSequenceFlow("taskA").
+ Process proc = builder.addProcess(getName()).addStartEvent("Start").addSequenceFlow("taskA").
addTask("taskA").addSequenceFlow("end").addEndEvent("end").getProcess();
return proc;
}
Modified: jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/cts/task/TaskMessageTest.java
===================================================================
--- jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/cts/task/TaskMessageTest.java 2008-08-11 10:47:13 UTC (rev 1863)
+++ jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/cts/task/TaskMessageTest.java 2008-08-11 10:56:42 UTC (rev 1864)
@@ -40,7 +40,7 @@
public void testReceiveTaskWithNoMessage() throws Exception
{
ProcessBuilder procBuilder = ProcessBuilderFactory.newInstance().newProcessBuilder();
- procBuilder.addProcess(getName()).addStartEvent().addSequenceFlow("A");
+ procBuilder.addProcess(getName()).addStartEvent("Start").addSequenceFlow("A");
procBuilder.addTask("A", TaskType.Receive).addSequenceFlow("End").addEndEvent("End");
try
{
@@ -56,7 +56,7 @@
public void testSendTaskWithNoMessage() throws Exception
{
ProcessBuilder procBuilder = ProcessBuilderFactory.newInstance().newProcessBuilder();
- procBuilder.addProcess(getName()).addStartEvent().addSequenceFlow("A");
+ procBuilder.addProcess(getName()).addStartEvent("Start").addSequenceFlow("A");
procBuilder.addTask("A", TaskType.Send).addSequenceFlow("End").addEndEvent("End");
try
{
Modified: jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/samples/parallelsplit/ParallelSplitTest.java
===================================================================
--- jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/samples/parallelsplit/ParallelSplitTest.java 2008-08-11 10:47:13 UTC (rev 1863)
+++ jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/samples/parallelsplit/ParallelSplitTest.java 2008-08-11 10:56:42 UTC (rev 1864)
@@ -72,7 +72,7 @@
{
// Create a Process through the ProcessBuilder
ProcessBuilder procBuilder = ProcessBuilderFactory.newInstance().newProcessBuilder();
- Process proc = procBuilder.addProcess(getName()).addStartEvent().addSequenceFlow("gateway").addGateway("gateway", GatewayType.Parallel).
+ Process proc = procBuilder.addProcess(getName()).addStartEvent("Start").addSequenceFlow("gateway").addGateway("gateway", GatewayType.Parallel).
addSequenceFlow("endA").addSequenceFlow("endB").addEndEvent("endA").addEndEvent("endB").getProcess();
runProcess(proc);
@@ -86,12 +86,12 @@
// Validate received signals
List<Signal> signals = getSignals();
- assertEquals(Signal.Type.ENTER_END_EVENT, signals.get(5).getType());
+ assertEquals(Signal.SignalType.ENTER_END_EVENT, signals.get(5).getType());
assertEquals("endA", signals.get(5).getFromRef());
- assertEquals(Signal.Type.EXIT_END_EVENT, signals.get(6).getType());
+ assertEquals(Signal.SignalType.EXIT_END_EVENT, signals.get(6).getType());
- assertEquals(Signal.Type.ENTER_END_EVENT, signals.get(7).getType());
+ assertEquals(Signal.SignalType.ENTER_END_EVENT, signals.get(7).getType());
assertEquals("endB", signals.get(7).getFromRef());
- assertEquals(Signal.Type.EXIT_END_EVENT, signals.get(8).getType());
+ assertEquals(Signal.SignalType.EXIT_END_EVENT, signals.get(8).getType());
}
}
Modified: jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/samples/sequence/BasicSequenceTest.java
===================================================================
--- jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/samples/sequence/BasicSequenceTest.java 2008-08-11 10:47:13 UTC (rev 1863)
+++ jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/samples/sequence/BasicSequenceTest.java 2008-08-11 10:56:42 UTC (rev 1864)
@@ -72,7 +72,7 @@
{
// Create a Process through the ProcessBuilder
ProcessBuilder procBuilder = ProcessBuilderFactory.newInstance().newProcessBuilder();
- Process proc = procBuilder.addProcess(getName()).addStartEvent().addSequenceFlow("stateA").addTask("stateA").
+ Process proc = procBuilder.addProcess(getName()).addStartEvent("Start").addSequenceFlow("stateA").addTask("stateA").
addSequenceFlow("end").addEndEvent("end").getProcess();
runProcess(proc);
@@ -86,13 +86,13 @@
// Validate received signals
List<Signal> signals = getSignals();
- assertEquals(Signal.Type.ENTER_PROCESS, signals.get(0).getType());
- assertEquals(Signal.Type.ENTER_START_EVENT, signals.get(1).getType());
- assertEquals(Signal.Type.EXIT_START_EVENT, signals.get(2).getType());
- assertEquals(Signal.Type.ENTER_TASK, signals.get(3).getType());
- assertEquals(Signal.Type.EXIT_TASK, signals.get(4).getType());
- assertEquals(Signal.Type.ENTER_END_EVENT, signals.get(5).getType());
- assertEquals(Signal.Type.EXIT_END_EVENT, signals.get(6).getType());
- assertEquals(Signal.Type.EXIT_PROCESS, signals.get(7).getType());
+ assertEquals(Signal.SignalType.ENTER_PROCESS, signals.get(0).getType());
+ assertEquals(Signal.SignalType.ENTER_START_EVENT, signals.get(1).getType());
+ assertEquals(Signal.SignalType.EXIT_START_EVENT, signals.get(2).getType());
+ assertEquals(Signal.SignalType.ENTER_TASK, signals.get(3).getType());
+ assertEquals(Signal.SignalType.EXIT_TASK, signals.get(4).getType());
+ assertEquals(Signal.SignalType.ENTER_END_EVENT, signals.get(5).getType());
+ assertEquals(Signal.SignalType.EXIT_END_EVENT, signals.get(6).getType());
+ assertEquals(Signal.SignalType.EXIT_PROCESS, signals.get(7).getType());
}
}
Modified: jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/samples/task/BasicTaskTest.java
===================================================================
--- jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/samples/task/BasicTaskTest.java 2008-08-11 10:47:13 UTC (rev 1863)
+++ jbossbpm/spec/trunk/modules/testsuite/src/test/java/org/jboss/bpm/samples/task/BasicTaskTest.java 2008-08-11 10:56:42 UTC (rev 1864)
@@ -72,7 +72,7 @@
{
// Create a Process through the ProcessBuilder
ProcessBuilder procBuilder = ProcessBuilderFactory.newInstance().newProcessBuilder();
- Process proc = procBuilder.addProcess(getName()).addStartEvent().addSequenceFlow("stateA").addTask("stateA").
+ Process proc = procBuilder.addProcess(getName()).addStartEvent("Start").addSequenceFlow("stateA").addTask("stateA").
addExecutionHandler(TaskA.class).addSequenceFlow("end").addEndEvent("end").getProcess();
runProcess(proc);
@@ -86,13 +86,13 @@
// Validate received signals
List<Signal> signals = getSignals();
- assertEquals(Signal.Type.ENTER_PROCESS, signals.get(0).getType());
- assertEquals(Signal.Type.ENTER_START_EVENT, signals.get(1).getType());
- assertEquals(Signal.Type.EXIT_START_EVENT, signals.get(2).getType());
- assertEquals(Signal.Type.ENTER_TASK, signals.get(3).getType());
- assertEquals(Signal.Type.EXIT_TASK, signals.get(4).getType());
- assertEquals(Signal.Type.ENTER_END_EVENT, signals.get(5).getType());
- assertEquals(Signal.Type.EXIT_END_EVENT, signals.get(6).getType());
- assertEquals(Signal.Type.EXIT_PROCESS, signals.get(7).getType());
+ assertEquals(Signal.SignalType.ENTER_PROCESS, signals.get(0).getType());
+ assertEquals(Signal.SignalType.ENTER_START_EVENT, signals.get(1).getType());
+ assertEquals(Signal.SignalType.EXIT_START_EVENT, signals.get(2).getType());
+ assertEquals(Signal.SignalType.ENTER_TASK, signals.get(3).getType());
+ assertEquals(Signal.SignalType.EXIT_TASK, signals.get(4).getType());
+ assertEquals(Signal.SignalType.ENTER_END_EVENT, signals.get(5).getType());
+ assertEquals(Signal.SignalType.EXIT_END_EVENT, signals.get(6).getType());
+ assertEquals(Signal.SignalType.EXIT_PROCESS, signals.get(7).getType());
}
}
17 years, 8 months
JBoss JBPM SVN: r1863 - jbossbpm/spec/branches/tdiesler/modules/ri/src/main/java/org/jboss/bpm/model/internal.
by do-not-reply@jboss.org
Author: thomas.diesler(a)jboss.com
Date: 2008-08-11 06:47:13 -0400 (Mon, 11 Aug 2008)
New Revision: 1863
Modified:
jbossbpm/spec/branches/tdiesler/modules/ri/src/main/java/org/jboss/bpm/model/internal/ExclusiveGatewayImpl.java
jbossbpm/spec/branches/tdiesler/modules/ri/src/main/java/org/jboss/bpm/model/internal/GatewayImpl.java
jbossbpm/spec/branches/tdiesler/modules/ri/src/main/java/org/jboss/bpm/model/internal/SequenceFlowImpl.java
Log:
WIP
Modified: jbossbpm/spec/branches/tdiesler/modules/ri/src/main/java/org/jboss/bpm/model/internal/ExclusiveGatewayImpl.java
===================================================================
--- jbossbpm/spec/branches/tdiesler/modules/ri/src/main/java/org/jboss/bpm/model/internal/ExclusiveGatewayImpl.java 2008-08-11 10:31:46 UTC (rev 1862)
+++ jbossbpm/spec/branches/tdiesler/modules/ri/src/main/java/org/jboss/bpm/model/internal/ExclusiveGatewayImpl.java 2008-08-11 10:47:13 UTC (rev 1863)
@@ -26,11 +26,12 @@
import java.util.HashMap;
import java.util.Map;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
import org.jboss.bpm.model.ConnectingObject;
import org.jboss.bpm.model.ExclusiveGateway;
import org.jboss.bpm.model.Expression;
import org.jboss.bpm.model.Gate;
-import org.jboss.bpm.model.Gateway;
import org.jboss.bpm.model.SequenceFlow;
import org.jboss.bpm.model.Expression.ExpressionLanguage;
import org.jboss.bpm.model.SequenceFlow.ConditionType;
@@ -51,6 +52,9 @@
@SuppressWarnings("serial")
public abstract class ExclusiveGatewayImpl extends GatewayImpl implements ExclusiveGateway
{
+ // provide logging
+ private static final Log log = LogFactory.getLog(ExclusiveGatewayImpl.class);
+
public ExclusiveGatewayImpl(String name)
{
super(name);
@@ -70,71 +74,95 @@
@Override
public FlowHandler getFlowHandler()
{
- final Gateway gateway = this;
FlowHandler handler = super.getFlowHandler();
- if (handler == null && getGates().size() > 1)
+ if (handler == null)
{
handler = new FlowHandler()
{
public void execute(FlowScheduler scheduler, Token token)
{
- Gate selectedGate = null;
- for (Gate auxGate : getGates())
+ // Schedule the first token that arrives
+ if (receivedTokens.size() == 1)
{
- SequenceFlow seqFlow = auxGate.getOutgoingSequenceFlow();
- if (seqFlow.getConditionType() == ConditionType.Expression)
- {
- Expression expr = seqFlow.getConditionExpression();
- if (expr.getExpressionLanguage() == ExpressionLanguage.MVEL)
- {
- String mvel = expr.getExpressionBody();
- ExecutionContext exContext = token.getExecutionContext();
- Map<String, Object> vars = new HashMap<String, Object>();
- for (Key key : exContext.getAttachmentKeys())
- {
- String name = key.getNamePart();
- Object value = exContext.getAttachment(name);
- vars.put(name, value);
- }
- Boolean result = (Boolean)MVEL.eval(mvel, vars);
- if (result == true)
- {
- selectedGate = auxGate;
- break;
- }
- }
- else
- {
- throw new IllegalStateException("Unsupported expression language: " + expr.getExpressionLanguage());
- }
- }
+ Gate selectedGate = getSelectedGate(token);
+ SequenceFlow outFlow = selectedGate.getOutgoingSequenceFlow();
+ scheduler.scheduleTuple(outFlow, token);
}
-
- // Fallback to the default gate if there is one
- if (selectedGate == null)
+ // Ignore all other tokens
+ else
{
- for (Gate auxGate : getGates())
- {
- SequenceFlow seqFlow = auxGate.getOutgoingSequenceFlow();
- if (seqFlow.getConditionType() == ConditionType.Default)
- {
- selectedGate = auxGate;
- break;
- }
- }
+ log.debug("Ignore token: " + token);
}
- if (selectedGate == null)
- throw new IllegalStateException("Cannot select applicable gate in: " + gateway);
-
- SequenceFlow outFlow = selectedGate.getOutgoingSequenceFlow();
- scheduler.scheduleTuple(outFlow, token);
+ // Reset the gateway
+ if (expectedFlows.size() == 0)
+ {
+ expectedFlows.addAll(inFlows);
+ receivedTokens.clear();
+ }
}
};
}
return handler;
}
+ // Get a single selected gate which' condition evaluates to TRUE
+ // Fall back to the default gate if there is one
+ // Choke if there is no selected gate
+ private Gate getSelectedGate(Token token)
+ {
+ Gate selectedGate = null;
+ for (Gate auxGate : getGates())
+ {
+ SequenceFlow seqFlow = auxGate.getOutgoingSequenceFlow();
+ if (seqFlow.getConditionType() == ConditionType.Expression)
+ {
+ Expression expr = seqFlow.getConditionExpression();
+ if (expr.getExpressionLanguage() == ExpressionLanguage.MVEL)
+ {
+ String mvel = expr.getExpressionBody();
+ ExecutionContext exContext = token.getExecutionContext();
+ Map<String, Object> vars = new HashMap<String, Object>();
+ for (Key key : exContext.getAttachmentKeys())
+ {
+ String name = key.getNamePart();
+ Object value = exContext.getAttachment(name);
+ vars.put(name, value);
+ }
+ Boolean result = (Boolean)MVEL.eval(mvel, vars);
+ if (result == true)
+ {
+ selectedGate = auxGate;
+ break;
+ }
+ }
+ else
+ {
+ throw new IllegalStateException("Unsupported expression language: " + expr.getExpressionLanguage());
+ }
+ }
+ }
+
+ // Fallback to the default gate if there is one
+ if (selectedGate == null)
+ {
+ for (Gate auxGate : getGates())
+ {
+ SequenceFlow seqFlow = auxGate.getOutgoingSequenceFlow();
+ if (seqFlow.getConditionType() == ConditionType.Default)
+ {
+ selectedGate = auxGate;
+ break;
+ }
+ }
+ }
+
+ if (selectedGate == null)
+ throw new IllegalStateException("Cannot select applicable gate in: " + this);
+
+ return selectedGate;
+ }
+
public String toString()
{
return "ExclusiveGateway[" + getName() + "]";
Modified: jbossbpm/spec/branches/tdiesler/modules/ri/src/main/java/org/jboss/bpm/model/internal/GatewayImpl.java
===================================================================
--- jbossbpm/spec/branches/tdiesler/modules/ri/src/main/java/org/jboss/bpm/model/internal/GatewayImpl.java 2008-08-11 10:31:46 UTC (rev 1862)
+++ jbossbpm/spec/branches/tdiesler/modules/ri/src/main/java/org/jboss/bpm/model/internal/GatewayImpl.java 2008-08-11 10:47:13 UTC (rev 1863)
@@ -31,15 +31,14 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import org.jboss.bpm.NotImplementedException;
import org.jboss.bpm.model.ConnectingObject;
import org.jboss.bpm.model.Gate;
import org.jboss.bpm.model.Gateway;
+import org.jboss.bpm.model.Process;
import org.jboss.bpm.model.SequenceFlow;
import org.jboss.bpm.model.Signal;
import org.jboss.bpm.model.SequenceFlow.ConditionType;
import org.jboss.bpm.runtime.ExecutionHandler;
-import org.jboss.bpm.runtime.FlowHandler;
import org.jboss.bpm.runtime.SignalHandler;
import org.jboss.bpm.runtime.Token;
@@ -56,8 +55,14 @@
// provide logging
private static final Log log = LogFactory.getLog(GatewayImpl.class);
+ // The list of incomming flows
protected List<ConnectingObject> inFlows = new ArrayList<ConnectingObject>();
+ // The list of outgoing gates
private Map<String, Gate> gates = new LinkedHashMap<String, Gate>();
+ // The list of flows from which a token is expected
+ protected List<ConnectingObject> expectedFlows;
+ // The list of received tokens
+ protected List<Token> receivedTokens;
public GatewayImpl(String name)
{
@@ -109,7 +114,27 @@
@Override
public void execute(Token token)
{
- throw new NotImplementedException("Overwrite to implemente gateway behaviour");
+ // Initialize the gateway
+ if (expectedFlows == null)
+ {
+ expectedFlows = new ArrayList<ConnectingObject>(inFlows);
+ receivedTokens = new ArrayList<Token>();
+ }
+
+ // Check that token from flow is valid
+ ConnectingObject flow = token.getFlow();
+ if (expectedFlows.contains(flow) == false)
+ throw new IllegalStateException("Unexpected token from: " + flow);
+
+ // Call execution handler
+ ExecutionHandler exHandler = getExecutionHandler();
+ exHandler.execute(token);
+
+ // Remove the flow from the expected list
+ expectedFlows.remove(flow);
+
+ // Store the received token for processing in the FlowHandler
+ receivedTokens.add(token);
}
public ExecutionHandler getExecutionHandler()
@@ -128,11 +153,6 @@
return handler;
}
- public FlowHandler getFlowHandler()
- {
- throw new NotImplementedException("Overwrite to implemente gateway behaviour");
- }
-
public SignalHandler getSignalHandler()
{
SignalHandler handler = super.getSignalHandler();
Modified: jbossbpm/spec/branches/tdiesler/modules/ri/src/main/java/org/jboss/bpm/model/internal/SequenceFlowImpl.java
===================================================================
--- jbossbpm/spec/branches/tdiesler/modules/ri/src/main/java/org/jboss/bpm/model/internal/SequenceFlowImpl.java 2008-08-11 10:31:46 UTC (rev 1862)
+++ jbossbpm/spec/branches/tdiesler/modules/ri/src/main/java/org/jboss/bpm/model/internal/SequenceFlowImpl.java 2008-08-11 10:47:13 UTC (rev 1863)
@@ -24,6 +24,8 @@
//$Id$
import org.jboss.bpm.model.Expression;
+import org.jboss.bpm.model.GraphicalElement;
+import org.jboss.bpm.model.NameSupport;
import org.jboss.bpm.model.SequenceFlow;
/**
@@ -60,4 +62,13 @@
{
return conditionExpression;
}
+
+ public String toString()
+ {
+ GraphicalElement sourceRef = getSourceRef();
+ GraphicalElement targetRef = getTargetRef();
+ String srcName = (sourceRef instanceof NameSupport ? ((NameSupport)sourceRef).getName() : sourceRef.getID().getCanonicalName());
+ String tarName = (targetRef instanceof NameSupport ? ((NameSupport)targetRef).getName() : targetRef.getID().getCanonicalName());
+ return "SequenceFlow[" + srcName + "->" + tarName + "]";
+ }
}
\ No newline at end of file
17 years, 8 months
JBoss JBPM SVN: r1862 - in jbpm4/pvm/trunk/modules/core/src/main: java/org/jbpm/pvm/internal/wire/descriptor and 1 other directories.
by do-not-reply@jboss.org
Author: tom.baeyens(a)jboss.com
Date: 2008-08-11 06:31:46 -0400 (Mon, 11 Aug 2008)
New Revision: 1862
Added:
jbpm4/pvm/trunk/modules/core/src/main/java/org/jbpm/pvm/internal/wire/descriptor/ExpressionDescriptor.java
Modified:
jbpm4/pvm/trunk/modules/core/src/main/java/org/jbpm/pvm/internal/script/ScriptManager.java
jbpm4/pvm/trunk/modules/core/src/main/resources/org/jbpm/pvm/hibernate.wire.hbm.xml
Log:
added script manager lookup convenience method and expression descriptor
Modified: jbpm4/pvm/trunk/modules/core/src/main/java/org/jbpm/pvm/internal/script/ScriptManager.java
===================================================================
--- jbpm4/pvm/trunk/modules/core/src/main/java/org/jbpm/pvm/internal/script/ScriptManager.java 2008-08-11 09:59:19 UTC (rev 1861)
+++ jbpm4/pvm/trunk/modules/core/src/main/java/org/jbpm/pvm/internal/script/ScriptManager.java 2008-08-11 10:31:46 UTC (rev 1862)
@@ -40,6 +40,8 @@
* @author Tom Baeyens
*/
public class ScriptManager {
+
+ private static final ScriptManager defaultScriptManager = createDefault();
protected String defaultExpressionLanguage;
protected String defaultScriptLanguage;
@@ -47,7 +49,18 @@
protected String[] readContextNames = null;
protected String writeContextName;
- public static ScriptManager createDefault() {
+ public static ScriptManager getScriptManager() {
+ Environment environment = Environment.getCurrent();
+ if (environment!=null) {
+ ScriptManager scriptManager = environment.get(ScriptManager.class);
+ if (scriptManager!=null) {
+ return scriptManager;
+ }
+ }
+ return defaultScriptManager;
+ }
+
+ private static ScriptManager createDefault() {
WireDefinition wireDefinition = (WireDefinition) new WireParser().createParse()
.setString(
"<objects>" +
@@ -95,6 +108,10 @@
if (scriptEngine==null) {
throw new PvmException("no scripting engine configured for language "+language);
}
+
+ if (execution==null) {
+ return evaluate(scriptEngine, script);
+ }
Environment environment = Environment.getCurrent();
if (environment==null) {
@@ -104,15 +121,14 @@
} finally {
environment.close();
}
+ }
- } else {
- ExecutionContext executionContext = new ExecutionContext(execution);
- environment.addContext(executionContext);
- try {
- return evaluate(scriptEngine, script);
- } finally {
- environment.removeContext(executionContext);
- }
+ ExecutionContext executionContext = new ExecutionContext(execution);
+ environment.addContext(executionContext);
+ try {
+ return evaluate(scriptEngine, script);
+ } finally {
+ environment.removeContext(executionContext);
}
}
Added: jbpm4/pvm/trunk/modules/core/src/main/java/org/jbpm/pvm/internal/wire/descriptor/ExpressionDescriptor.java
===================================================================
--- jbpm4/pvm/trunk/modules/core/src/main/java/org/jbpm/pvm/internal/wire/descriptor/ExpressionDescriptor.java (rev 0)
+++ jbpm4/pvm/trunk/modules/core/src/main/java/org/jbpm/pvm/internal/wire/descriptor/ExpressionDescriptor.java 2008-08-11 10:31:46 UTC (rev 1862)
@@ -0,0 +1,55 @@
+/*
+ * 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.pvm.internal.wire.descriptor;
+
+import org.jbpm.pvm.internal.script.ScriptManager;
+import org.jbpm.pvm.internal.wire.WireContext;
+
+
+/**
+ * @author Tom Baeyens
+ */
+public class ExpressionDescriptor extends AbstractDescriptor {
+
+ private static final long serialVersionUID = 1L;
+
+ String expression;
+ String language;
+
+ public ExpressionDescriptor() {
+ }
+
+ public ExpressionDescriptor(String expression) {
+ this.expression = expression;
+ }
+
+ public ExpressionDescriptor(String expression, String language) {
+ this.expression = expression;
+ this.language = language;
+ }
+
+ public Object construct(WireContext wireContext) {
+ ScriptManager scriptManager = ScriptManager.getScriptManager();
+ return scriptManager.evaluate(expression, null, language);
+ }
+
+}
Modified: jbpm4/pvm/trunk/modules/core/src/main/resources/org/jbpm/pvm/hibernate.wire.hbm.xml
===================================================================
--- jbpm4/pvm/trunk/modules/core/src/main/resources/org/jbpm/pvm/hibernate.wire.hbm.xml 2008-08-11 09:59:19 UTC (rev 1861)
+++ jbpm4/pvm/trunk/modules/core/src/main/resources/org/jbpm/pvm/hibernate.wire.hbm.xml 2008-08-11 10:31:46 UTC (rev 1862)
@@ -12,6 +12,7 @@
char : CharacterDescriptor
class : ClassDescriptor
double : DoubleDescriptor
+ expr : ExpressionDescriptor
float : FloatDescriptor
long : LongDescriptor
int : IntegerDescriptor
@@ -121,6 +122,12 @@
<one-to-many class="org.jbpm.pvm.internal.wire.operation.AbstractOperation"/>
</list>
</subclass>
+
+ <subclass name="ExpressionDescriptor" discriminator-value="expr">
+ <property name="expression" column="TEXT_" />
+ <property name="language" column="METHOD_" />
+ </subclass>
+
</class>
<!-- ### OPERATIONS ##################################################### -->
17 years, 8 months