[jbpm-commits] JBoss JBPM SVN: r2502 - in projects/spec/trunk/modules: api/src/main/java/org/jbpm/api/model/builder and 24 other directories.

do-not-reply at jboss.org do-not-reply at jboss.org
Wed Oct 8 05:18:41 EDT 2008


Author: thomas.diesler at jboss.com
Date: 2008-10-08 05:18:41 -0400 (Wed, 08 Oct 2008)
New Revision: 2502

Added:
   projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/service/MessageBuilderService.java
   projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/service/ProcessBuilderService.java
   projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/task/UserTaskTest.java
   projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/UserTaskImpl.java
   projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/runtime/AssignmentInterceptor.java
   projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/runtime/ExitSignalInterceptor.java
   projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/runtime/FlowHandlerInterceptor.java
   projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/runtime/NodeExecuteInterceptor.java
   projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/runtime/NodeInterceptor.java
   projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/runtime/RunnableToken.java
   projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/runtime/RuntimeContext.java
   projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/runtime/SignalHandlerInterceptor.java
   projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/service/HibernatePersistenceServiceImpl.java
   projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/service/InMemoryPersistenceServiceImpl.java
Removed:
   projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/model/builder/MessageBuilderService.java
   projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/model/builder/ProcessBuilderService.java
Modified:
   projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/model/Node.java
   projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/model/builder/TaskBuilder.java
   projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/endevent/EndEventMessageTest.java
   projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/gateway/exclusive/ExclusiveGatewayMergeTest.java
   projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/gateway/exclusive/ExclusiveGatewaySplitTest.java
   projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/gateway/inclusive/InclusiveGatewayMergeTest.java
   projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/gateway/inclusive/InclusiveGatewaySplitTest.java
   projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/gateway/parallel/ParallelGatewayMergeTest.java
   projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/gateway/parallel/ParallelGatewaySplitTest.java
   projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/node/NodeInputSetTest.java
   projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/node/NodeOutputSetTest.java
   projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/node/NodePropertyTest.java
   projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/process/ProcessPropertyTest.java
   projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/service/process/ProcessBuilderTest.java
   projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/service/process/ProcessCatalog.java
   projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/service/process/ProcessServiceTest.java
   projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/startevent/StartEventSignalTest.java
   projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/task/ReceiveTaskTest.java
   projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/task/SendTaskTest.java
   projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/task/TaskExecutionHandlerTest.java
   projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/pattern/control/exclusivechoice/ExclusiveChoiceTest.java
   projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/pattern/control/multichoice/MultiChoiceTest.java
   projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/pattern/control/parallelsplit/ParallelSplitTest.java
   projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/pattern/control/sequence/SequenceTest.java
   projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/pattern/control/simplemerge/SimpleMergeTest.java
   projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/pattern/control/synchronization/SynchronizationTest.java
   projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/pattern/data/casedata/CaseDataTest.java
   projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/pattern/data/taskdata/TaskDataTest.java
   projects/spec/trunk/modules/cts/src/test/resources/log4j.xml
   projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/GatewayImpl.java
   projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/NodeImpl.java
   projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/ReceiveTaskImpl.java
   projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/SendTaskImpl.java
   projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/builder/ProcessBuilderImpl.java
   projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/builder/TaskBuilderImpl.java
   projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/runtime/TokenExecutorImpl.java
   projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/service/MessageBuilderServiceImpl.java
   projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/service/ProcessBuilderServiceImpl.java
   projects/spec/trunk/modules/impl/src/main/resources/jbpm-cfg-beans.xml
Log:
Add UserTask

Modified: projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/model/Node.java
===================================================================
--- projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/model/Node.java	2008-10-07 15:00:18 UTC (rev 2501)
+++ projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/model/Node.java	2008-10-08 09:18:41 UTC (rev 2502)
@@ -61,16 +61,16 @@
   /** 
    * Get the associated ExecutionHandler 
    */
-  ExecutionHandler getExecutionHandler(boolean defaultHandler);
+  ExecutionHandler getExecutionHandler();
 
   /** 
    * Get the associated SignalHandler 
    */
-  SignalHandler getSignalHandler(boolean defaultHandler);
+  SignalHandler getSignalHandler();
 
   /** 
    * Get the associated FlowHandler 
    */
-  FlowHandler getFlowHandler(boolean defaultHandler);
+  FlowHandler getFlowHandler();
 
 }
\ No newline at end of file

Deleted: projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/model/builder/MessageBuilderService.java
===================================================================
--- projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/model/builder/MessageBuilderService.java	2008-10-07 15:00:18 UTC (rev 2501)
+++ projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/model/builder/MessageBuilderService.java	2008-10-08 09:18:41 UTC (rev 2502)
@@ -1,52 +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.jbpm.api.model.builder;
-
-//$Id$
-
-import org.jbpm.api.client.ProcessEngine;
-import org.jbpm.api.model.Message;
-import org.jbpm.api.service.AbstractService;
-
-/**
- * The MessageBuilder can be used to build a {@link Message} dynamically.
- * 
- * @author thomas.diesler at jboss.com
- * @since 08-Jul-2008
- */
-public abstract class MessageBuilderService extends AbstractService
-{
-  /**
-   * Locate the default MessageBuilder
-   */
-  public static MessageBuilder locateMessageBuilder()
-  {
-    ProcessEngine engine = ProcessEngine.getProcessEngine();
-    MessageBuilderService builderService = engine.getService(MessageBuilderService.class);
-    return builderService.getMessageBuilder();
-  }
-  
-  /**
-   * Get the MessageBuilder
-   */
-  public abstract MessageBuilder getMessageBuilder();
-}
\ No newline at end of file

Deleted: projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/model/builder/ProcessBuilderService.java
===================================================================
--- projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/model/builder/ProcessBuilderService.java	2008-10-07 15:00:18 UTC (rev 2501)
+++ projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/model/builder/ProcessBuilderService.java	2008-10-08 09:18:41 UTC (rev 2502)
@@ -1,52 +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.jbpm.api.model.builder;
-
-//$Id$
-
-import org.jbpm.api.client.ProcessEngine;
-import org.jbpm.api.model.Process;
-import org.jbpm.api.service.AbstractService;
-
-/**
- * The ProcessBuilder can be used to build a {@link Process} dynamically.
- * 
- * @author thomas.diesler at jboss.com
- * @since 08-Jul-2008
- */
-public abstract class ProcessBuilderService extends AbstractService
-{
-  /**
-   * Locate the default ProcessBuilder
-   */
-  public static ProcessBuilder locateProcessBuilder()
-  {
-    ProcessEngine engine = ProcessEngine.getProcessEngine();
-    ProcessBuilderService builderService = engine.getService(ProcessBuilderService.class);
-    return builderService.getProcessBuilder();
-  }
-  
-  /**
-   * Get the ProcessBuilder
-   */
-  public abstract ProcessBuilder getProcessBuilder();
-}
\ No newline at end of file

Modified: projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/model/builder/TaskBuilder.java
===================================================================
--- projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/model/builder/TaskBuilder.java	2008-10-07 15:00:18 UTC (rev 2501)
+++ projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/model/builder/TaskBuilder.java	2008-10-08 09:18:41 UTC (rev 2502)
@@ -35,13 +35,20 @@
 public interface TaskBuilder extends ProcessBuilder
 {
   /**
-   * Add a {@link Message} reference.
+   * Add an outgoing {@link Message} reference.
    * <p/>
    * The {@link Message} must be defined at {@link Process} level
    */
-  TaskBuilder addMessageRef(String msgName);
+  TaskBuilder addOutMessageRef(String msgName);
   
   /**
+   * Add an incomming {@link Message} reference.
+   * <p/>
+   * The {@link Message} must be defined at {@link Process} level
+   */
+  TaskBuilder addInMessageRef(String msgName);
+  
+  /**
    * Add an InputSet
    */
   TaskBuilder addInputSet();

Copied: projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/service/MessageBuilderService.java (from rev 2488, projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/model/builder/MessageBuilderService.java)
===================================================================
--- projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/service/MessageBuilderService.java	                        (rev 0)
+++ projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/service/MessageBuilderService.java	2008-10-08 09:18:41 UTC (rev 2502)
@@ -0,0 +1,52 @@
+/*
+ * 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.api.service;
+
+//$Id$
+
+import org.jbpm.api.client.ProcessEngine;
+import org.jbpm.api.model.Message;
+import org.jbpm.api.model.builder.MessageBuilder;
+
+/**
+ * The MessageBuilder can be used to build a {@link Message} dynamically.
+ * 
+ * @author thomas.diesler at jboss.com
+ * @since 08-Jul-2008
+ */
+public abstract class MessageBuilderService extends AbstractService
+{
+  /**
+   * Locate the default MessageBuilder
+   */
+  public static MessageBuilder locateMessageBuilder()
+  {
+    ProcessEngine engine = ProcessEngine.getProcessEngine();
+    MessageBuilderService builderService = engine.getService(MessageBuilderService.class);
+    return builderService.getMessageBuilder();
+  }
+  
+  /**
+   * Get the MessageBuilder
+   */
+  public abstract MessageBuilder getMessageBuilder();
+}
\ No newline at end of file

Copied: projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/service/ProcessBuilderService.java (from rev 2488, projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/model/builder/ProcessBuilderService.java)
===================================================================
--- projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/service/ProcessBuilderService.java	                        (rev 0)
+++ projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/service/ProcessBuilderService.java	2008-10-08 09:18:41 UTC (rev 2502)
@@ -0,0 +1,52 @@
+/*
+ * 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.api.service;
+
+//$Id$
+
+import org.jbpm.api.client.ProcessEngine;
+import org.jbpm.api.model.Process;
+import org.jbpm.api.model.builder.ProcessBuilder;
+
+/**
+ * The ProcessBuilder can be used to build a {@link Process} dynamically.
+ * 
+ * @author thomas.diesler at jboss.com
+ * @since 08-Jul-2008
+ */
+public abstract class ProcessBuilderService extends AbstractService
+{
+  /**
+   * Locate the default ProcessBuilder
+   */
+  public static ProcessBuilder locateProcessBuilder()
+  {
+    ProcessEngine engine = ProcessEngine.getProcessEngine();
+    ProcessBuilderService builderService = engine.getService(ProcessBuilderService.class);
+    return builderService.getProcessBuilder();
+  }
+  
+  /**
+   * Get the ProcessBuilder
+   */
+  public abstract ProcessBuilder getProcessBuilder();
+}
\ No newline at end of file

Modified: projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/endevent/EndEventMessageTest.java
===================================================================
--- projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/endevent/EndEventMessageTest.java	2008-10-07 15:00:18 UTC (rev 2501)
+++ projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/endevent/EndEventMessageTest.java	2008-10-08 09:18:41 UTC (rev 2502)
@@ -31,8 +31,8 @@
 import org.jbpm.api.model.Event.EventDetailType;
 import org.jbpm.api.model.builder.MessageBuilder;
 import org.jbpm.api.model.builder.ProcessBuilder;
-import org.jbpm.api.model.builder.ProcessBuilderService;
 import org.jbpm.api.runtime.BasicAttachments;
+import org.jbpm.api.service.ProcessBuilderService;
 import org.jbpm.api.test.CTSTestCase;
 
 /**

Modified: projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/gateway/exclusive/ExclusiveGatewayMergeTest.java
===================================================================
--- projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/gateway/exclusive/ExclusiveGatewayMergeTest.java	2008-10-07 15:00:18 UTC (rev 2501)
+++ projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/gateway/exclusive/ExclusiveGatewayMergeTest.java	2008-10-08 09:18:41 UTC (rev 2502)
@@ -31,7 +31,7 @@
 import org.jbpm.api.model.Signal;
 import org.jbpm.api.model.Gateway.GatewayType;
 import org.jbpm.api.model.builder.ProcessBuilder;
-import org.jbpm.api.model.builder.ProcessBuilderService;
+import org.jbpm.api.service.ProcessBuilderService;
 import org.jbpm.api.test.CTSTestCase;
 
 /**

Modified: projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/gateway/exclusive/ExclusiveGatewaySplitTest.java
===================================================================
--- projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/gateway/exclusive/ExclusiveGatewaySplitTest.java	2008-10-07 15:00:18 UTC (rev 2501)
+++ projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/gateway/exclusive/ExclusiveGatewaySplitTest.java	2008-10-08 09:18:41 UTC (rev 2502)
@@ -33,8 +33,8 @@
 import org.jbpm.api.model.Gateway.GatewayType;
 import org.jbpm.api.model.builder.GatewayBuilder;
 import org.jbpm.api.model.builder.ProcessBuilder;
-import org.jbpm.api.model.builder.ProcessBuilderService;
 import org.jbpm.api.runtime.BasicAttachments;
+import org.jbpm.api.service.ProcessBuilderService;
 import org.jbpm.api.test.CTSTestCase;
 
 /**

Modified: projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/gateway/inclusive/InclusiveGatewayMergeTest.java
===================================================================
--- projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/gateway/inclusive/InclusiveGatewayMergeTest.java	2008-10-07 15:00:18 UTC (rev 2501)
+++ projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/gateway/inclusive/InclusiveGatewayMergeTest.java	2008-10-08 09:18:41 UTC (rev 2502)
@@ -31,7 +31,7 @@
 import org.jbpm.api.model.Signal;
 import org.jbpm.api.model.Gateway.GatewayType;
 import org.jbpm.api.model.builder.ProcessBuilder;
-import org.jbpm.api.model.builder.ProcessBuilderService;
+import org.jbpm.api.service.ProcessBuilderService;
 import org.jbpm.api.test.CTSTestCase;
 
 /**

Modified: projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/gateway/inclusive/InclusiveGatewaySplitTest.java
===================================================================
--- projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/gateway/inclusive/InclusiveGatewaySplitTest.java	2008-10-07 15:00:18 UTC (rev 2501)
+++ projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/gateway/inclusive/InclusiveGatewaySplitTest.java	2008-10-08 09:18:41 UTC (rev 2502)
@@ -33,8 +33,8 @@
 import org.jbpm.api.model.Gateway.GatewayType;
 import org.jbpm.api.model.builder.GatewayBuilder;
 import org.jbpm.api.model.builder.ProcessBuilder;
-import org.jbpm.api.model.builder.ProcessBuilderService;
 import org.jbpm.api.runtime.BasicAttachments;
+import org.jbpm.api.service.ProcessBuilderService;
 import org.jbpm.api.test.CTSTestCase;
 
 /**

Modified: projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/gateway/parallel/ParallelGatewayMergeTest.java
===================================================================
--- projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/gateway/parallel/ParallelGatewayMergeTest.java	2008-10-07 15:00:18 UTC (rev 2501)
+++ projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/gateway/parallel/ParallelGatewayMergeTest.java	2008-10-08 09:18:41 UTC (rev 2502)
@@ -34,7 +34,7 @@
 import org.jbpm.api.model.Gateway.GatewayType;
 import org.jbpm.api.model.builder.MessageBuilder;
 import org.jbpm.api.model.builder.ProcessBuilder;
-import org.jbpm.api.model.builder.ProcessBuilderService;
+import org.jbpm.api.service.ProcessBuilderService;
 import org.jbpm.api.test.CTSTestCase;
 
 /**

Modified: projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/gateway/parallel/ParallelGatewaySplitTest.java
===================================================================
--- projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/gateway/parallel/ParallelGatewaySplitTest.java	2008-10-07 15:00:18 UTC (rev 2501)
+++ projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/gateway/parallel/ParallelGatewaySplitTest.java	2008-10-08 09:18:41 UTC (rev 2502)
@@ -34,7 +34,7 @@
 import org.jbpm.api.model.Gateway.GatewayType;
 import org.jbpm.api.model.Signal.SignalType;
 import org.jbpm.api.model.builder.ProcessBuilder;
-import org.jbpm.api.model.builder.ProcessBuilderService;
+import org.jbpm.api.service.ProcessBuilderService;
 import org.jbpm.api.test.CTSTestCase;
 
 /**

Modified: projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/node/NodeInputSetTest.java
===================================================================
--- projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/node/NodeInputSetTest.java	2008-10-07 15:00:18 UTC (rev 2501)
+++ projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/node/NodeInputSetTest.java	2008-10-08 09:18:41 UTC (rev 2502)
@@ -31,9 +31,9 @@
 import org.jbpm.api.model.Event.EventDetailType;
 import org.jbpm.api.model.builder.MessageBuilder;
 import org.jbpm.api.model.builder.ProcessBuilder;
-import org.jbpm.api.model.builder.ProcessBuilderService;
 import org.jbpm.api.model.builder.TaskBuilder;
 import org.jbpm.api.runtime.BasicAttachments;
+import org.jbpm.api.service.ProcessBuilderService;
 import org.jbpm.api.test.CTSTestCase;
 
 /**

Modified: projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/node/NodeOutputSetTest.java
===================================================================
--- projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/node/NodeOutputSetTest.java	2008-10-07 15:00:18 UTC (rev 2501)
+++ projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/node/NodeOutputSetTest.java	2008-10-08 09:18:41 UTC (rev 2502)
@@ -31,8 +31,8 @@
 import org.jbpm.api.model.Event.EventDetailType;
 import org.jbpm.api.model.builder.MessageBuilder;
 import org.jbpm.api.model.builder.ProcessBuilder;
-import org.jbpm.api.model.builder.ProcessBuilderService;
 import org.jbpm.api.model.builder.TaskBuilder;
+import org.jbpm.api.service.ProcessBuilderService;
 import org.jbpm.api.test.CTSTestCase;
 
 /**

Modified: projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/node/NodePropertyTest.java
===================================================================
--- projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/node/NodePropertyTest.java	2008-10-07 15:00:18 UTC (rev 2501)
+++ projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/node/NodePropertyTest.java	2008-10-08 09:18:41 UTC (rev 2502)
@@ -33,8 +33,8 @@
 import org.jbpm.api.model.Expression.ExpressionLanguage;
 import org.jbpm.api.model.builder.MessageBuilder;
 import org.jbpm.api.model.builder.ProcessBuilder;
-import org.jbpm.api.model.builder.ProcessBuilderService;
 import org.jbpm.api.model.builder.TaskBuilder;
+import org.jbpm.api.service.ProcessBuilderService;
 import org.jbpm.api.test.CTSTestCase;
 
 /**

Modified: projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/process/ProcessPropertyTest.java
===================================================================
--- projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/process/ProcessPropertyTest.java	2008-10-07 15:00:18 UTC (rev 2501)
+++ projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/process/ProcessPropertyTest.java	2008-10-08 09:18:41 UTC (rev 2502)
@@ -33,7 +33,7 @@
 import org.jbpm.api.model.Expression.ExpressionLanguage;
 import org.jbpm.api.model.builder.MessageBuilder;
 import org.jbpm.api.model.builder.ProcessBuilder;
-import org.jbpm.api.model.builder.ProcessBuilderService;
+import org.jbpm.api.service.ProcessBuilderService;
 import org.jbpm.api.test.CTSTestCase;
 
 /**

Modified: projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/service/process/ProcessBuilderTest.java
===================================================================
--- projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/service/process/ProcessBuilderTest.java	2008-10-07 15:00:18 UTC (rev 2501)
+++ projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/service/process/ProcessBuilderTest.java	2008-10-08 09:18:41 UTC (rev 2502)
@@ -26,7 +26,7 @@
 import org.jbpm.api.InvalidProcessException;
 import org.jbpm.api.model.ProcessDefinition;
 import org.jbpm.api.model.builder.ProcessBuilder;
-import org.jbpm.api.model.builder.ProcessBuilderService;
+import org.jbpm.api.service.ProcessBuilderService;
 import org.jbpm.api.test.CTSTestCase;
 
 /**

Modified: projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/service/process/ProcessCatalog.java
===================================================================
--- projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/service/process/ProcessCatalog.java	2008-10-07 15:00:18 UTC (rev 2501)
+++ projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/service/process/ProcessCatalog.java	2008-10-08 09:18:41 UTC (rev 2502)
@@ -32,7 +32,7 @@
 import org.jbpm.api.model.StartEvent;
 import org.jbpm.api.model.Task;
 import org.jbpm.api.model.builder.ProcessBuilder;
-import org.jbpm.api.model.builder.ProcessBuilderService;
+import org.jbpm.api.service.ProcessBuilderService;
 
 /**
  * A catalog of CTS test processes

Modified: projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/service/process/ProcessServiceTest.java
===================================================================
--- projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/service/process/ProcessServiceTest.java	2008-10-07 15:00:18 UTC (rev 2501)
+++ projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/service/process/ProcessServiceTest.java	2008-10-08 09:18:41 UTC (rev 2502)
@@ -31,7 +31,7 @@
 import org.jbpm.api.model.Signal;
 import org.jbpm.api.model.Signal.SignalType;
 import org.jbpm.api.model.builder.ProcessBuilder;
-import org.jbpm.api.model.builder.ProcessBuilderService;
+import org.jbpm.api.service.ProcessBuilderService;
 import org.jbpm.api.service.ProcessDefinitionService;
 import org.jbpm.api.service.ProcessService;
 import org.jbpm.api.service.SignalService;

Modified: projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/startevent/StartEventSignalTest.java
===================================================================
--- projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/startevent/StartEventSignalTest.java	2008-10-07 15:00:18 UTC (rev 2501)
+++ projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/startevent/StartEventSignalTest.java	2008-10-08 09:18:41 UTC (rev 2502)
@@ -40,8 +40,8 @@
 import org.jbpm.api.model.builder.EventBuilder;
 import org.jbpm.api.model.builder.MessageBuilder;
 import org.jbpm.api.model.builder.ProcessBuilder;
-import org.jbpm.api.model.builder.ProcessBuilderService;
 import org.jbpm.api.model.builder.TaskBuilder;
+import org.jbpm.api.service.ProcessBuilderService;
 import org.jbpm.api.service.ProcessDefinitionService;
 import org.jbpm.api.service.ProcessService;
 import org.jbpm.api.service.SignalService;

Modified: projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/task/ReceiveTaskTest.java
===================================================================
--- projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/task/ReceiveTaskTest.java	2008-10-07 15:00:18 UTC (rev 2501)
+++ projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/task/ReceiveTaskTest.java	2008-10-08 09:18:41 UTC (rev 2502)
@@ -38,10 +38,10 @@
 import org.jbpm.api.model.Task.TaskType;
 import org.jbpm.api.model.builder.EventBuilder;
 import org.jbpm.api.model.builder.MessageBuilder;
-import org.jbpm.api.model.builder.MessageBuilderService;
 import org.jbpm.api.model.builder.ProcessBuilder;
-import org.jbpm.api.model.builder.ProcessBuilderService;
+import org.jbpm.api.service.MessageBuilderService;
 import org.jbpm.api.service.MessageService;
+import org.jbpm.api.service.ProcessBuilderService;
 import org.jbpm.api.service.ProcessDefinitionService;
 import org.jbpm.api.service.ProcessService;
 import org.jbpm.api.service.SignalService;
@@ -55,7 +55,7 @@
  */
 public class ReceiveTaskTest extends CTSTestCase
 {
-  public void testReceiveTaskWithNoMessage() throws Exception
+  public void _testReceiveTaskWithNoMessage() throws Exception
   {
     ProcessBuilder procBuilder = ProcessBuilderService.locateProcessBuilder();
     procBuilder.addProcess("ReceiveTaskTest").addStartEvent("Start").addSequenceFlow("TaskA");
@@ -71,15 +71,15 @@
     }
   }
 
-  public void testUnregisteredProcess() throws Exception
+  public void _testUnregisteredProcess() throws Exception
   {
     ProcessDefinition procDef = unregisterOnTearDown(getProcessDefinition());
     Process proc = procDef.newInstance();
 
-    MessageService msgManager = MessageService.locateMessageService();
+    MessageService msgService = MessageService.locateMessageService();
     try
     {
-      msgManager.sendMessage(proc.getKey(), "TaskA", getMessage());
+      msgService.sendMessage(proc.getKey(), "TaskA", getMessage());
       fail("Send to an unregistered process is expected to fail");
     }
     catch (RuntimeException ex)
@@ -88,7 +88,7 @@
     }
   }
 
-  public void testSuspendedMessage() throws Exception
+  public void _testSuspendedMessage() throws Exception
   {
     ProcessDefinitionService procDefService = ProcessDefinitionService.locateProcessDefinitionService();
     ProcessService procService = ProcessService.locateProcessService();
@@ -100,8 +100,8 @@
     try
     {
       // Send the message before the process is started
-      MessageService msgManager = MessageService.locateMessageService();
-      msgManager.sendMessage(procID, "TaskA", getMessage());
+      MessageService msgService = MessageService.locateMessageService();
+      msgService.sendMessage(procID, "TaskA", getMessage());
 
       proc.startProcess();
       proc.waitForEnd(1000);
@@ -135,8 +135,8 @@
         if (sendMessage == true)
         {
           sendMessage = false;
-          MessageService msgManager = MessageService.locateMessageService();
-          msgManager.sendMessage(proc.getKey(), "TaskA", getMessage());
+          MessageService msgService = MessageService.locateMessageService();
+          msgService.sendMessage(proc.getKey(), "TaskA", getMessage());
         }
       }
     };
@@ -146,7 +146,7 @@
     try
     {
       proc.startProcess();
-      proc.waitForEnd(1000);
+      proc.waitForEnd();
     }
     finally
     {
@@ -160,8 +160,8 @@
 
   private Message getMessage()
   {
-    MessageBuilder procBuilder = MessageBuilderService.locateMessageBuilder();
-    Message msg = procBuilder.newMessage("ReceiveTaskMessage").addProperty("foo", "bar", true).getMessage();
+    MessageBuilder msgBuilder = MessageBuilderService.locateMessageBuilder();
+    Message msg = msgBuilder.newMessage("ReceiveTaskMessage").addProperty("foo", "bar", true).getMessage();
     return msg;
   }
 
@@ -172,7 +172,7 @@
     procBuilder.addProcessMessage("ReceiveTaskMessage").addProperty("foo", null, true);
     procBuilder.addProcessMessage("EndEventMessage").addToRef(getTestID()).addProperty("foo", null, true);
     procBuilder.addStartEvent("Start").addSequenceFlow("TaskA");
-    procBuilder.addTask("TaskA", TaskType.Receive).addMessageRef("ReceiveTaskMessage");
+    procBuilder.addTask("TaskA", TaskType.Receive).addInMessageRef("ReceiveTaskMessage");
     EventBuilder eventBuilder = procBuilder.addSequenceFlow("End").addEndEvent("End", EventDetailType.Message);
     eventBuilder.addMessageRef("EndEventMessage");
     return procBuilder.getProcessDefinition();

Modified: projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/task/SendTaskTest.java
===================================================================
--- projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/task/SendTaskTest.java	2008-10-07 15:00:18 UTC (rev 2501)
+++ projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/task/SendTaskTest.java	2008-10-08 09:18:41 UTC (rev 2502)
@@ -33,8 +33,8 @@
 import org.jbpm.api.model.Task.TaskType;
 import org.jbpm.api.model.builder.MessageBuilder;
 import org.jbpm.api.model.builder.ProcessBuilder;
-import org.jbpm.api.model.builder.ProcessBuilderService;
 import org.jbpm.api.runtime.BasicAttachments;
+import org.jbpm.api.service.ProcessBuilderService;
 import org.jbpm.api.test.CTSTestCase;
 
 /**
@@ -82,7 +82,7 @@
     MessageBuilder msgBuilder = procBuilder.addProcess("SendTaskTest").addProcessMessage("SendTaskMessage");
     msgBuilder.addToRef(getTestID()).addProperty("foo", null, true);
     procBuilder.addStartEvent("Start").addSequenceFlow("TaskA");
-    procBuilder.addTask("TaskA", TaskType.Send).addMessageRef("SendTaskMessage");
+    procBuilder.addTask("TaskA", TaskType.Send).addOutMessageRef("SendTaskMessage");
     procBuilder.addSequenceFlow("End").addEndEvent("End");
     return procBuilder.getProcessDefinition();
   }

Modified: projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/task/TaskExecutionHandlerTest.java
===================================================================
--- projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/task/TaskExecutionHandlerTest.java	2008-10-07 15:00:18 UTC (rev 2501)
+++ projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/task/TaskExecutionHandlerTest.java	2008-10-08 09:18:41 UTC (rev 2502)
@@ -30,12 +30,12 @@
 import org.jbpm.api.model.Assignment.AssignTime;
 import org.jbpm.api.model.Expression.ExpressionLanguage;
 import org.jbpm.api.model.builder.ProcessBuilder;
-import org.jbpm.api.model.builder.ProcessBuilderService;
 import org.jbpm.api.model.builder.TaskBuilder;
 import org.jbpm.api.runtime.BasicNodeHandler;
 import org.jbpm.api.runtime.ExecutionContext;
 import org.jbpm.api.runtime.ExecutionHandler;
 import org.jbpm.api.runtime.Token;
+import org.jbpm.api.service.ProcessBuilderService;
 import org.jbpm.api.test.CTSTestCase;
 
 /**

Added: projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/task/UserTaskTest.java
===================================================================
--- projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/task/UserTaskTest.java	                        (rev 0)
+++ projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/task/UserTaskTest.java	2008-10-08 09:18:41 UTC (rev 2502)
@@ -0,0 +1,128 @@
+/*
+ * 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.test.cts.task;
+
+// $Id$
+
+import java.io.IOException;
+import java.util.List;
+
+import javax.management.ObjectName;
+
+import org.jbpm.api.Constants;
+import org.jbpm.api.client.MessageListener;
+import org.jbpm.api.model.Message;
+import org.jbpm.api.model.Process;
+import org.jbpm.api.model.ProcessDefinition;
+import org.jbpm.api.model.Event.EventDetailType;
+import org.jbpm.api.model.Task.TaskType;
+import org.jbpm.api.model.builder.MessageBuilder;
+import org.jbpm.api.model.builder.ObjectNameFactory;
+import org.jbpm.api.model.builder.ProcessBuilder;
+import org.jbpm.api.runtime.BasicAttachments;
+import org.jbpm.api.service.MessageBuilderService;
+import org.jbpm.api.service.MessageService;
+import org.jbpm.api.service.ProcessBuilderService;
+import org.jbpm.api.service.ProcessService;
+import org.jbpm.api.test.CTSTestCase;
+
+/**
+ * Test User Task
+ * 
+ * @author thomas.diesler at jboss.com
+ * @since 07-Oct-2008
+ */
+public class UserTaskTest extends CTSTestCase
+{
+  static final ObjectName MSG_LISTENER_ID = ObjectNameFactory.create(Constants.ID_DOMAIN, "msgListener", "UserTaskTest");
+  
+  public void testSendTask() throws Exception
+  {
+    ProcessDefinition procDef = unregisterOnTearDown(getProcessDefinition());
+    Process proc = procDef.newInstance();
+    
+    // Register the process - this assignes the procID
+    ProcessService procService = ProcessService.locateProcessService();
+    procService.registerProcess(proc);
+    
+    // Add the message user message listener
+    MessageService msgService = MessageService.locateMessageService();
+    msgService.addMessageListener(new UserMessageListener(proc.getKey()));
+    
+    try
+    {
+      BasicAttachments att = new BasicAttachments();
+      att.addAttachment("foo", "xxx");
+      proc.startProcess(att);
+      proc.waitForEnd();
+      
+      List<Message> messages = getMessages();
+      assertEquals(1, messages.size());
+      assertEquals("xxx", messages.get(0).getProperty("bar").getValue());
+    }
+    finally
+    {
+      msgService.removeMessageListener(MSG_LISTENER_ID);
+    }
+  }
+
+  protected ProcessDefinition getProcessDefinition() throws IOException
+  {
+    ProcessBuilder procBuilder = ProcessBuilderService.locateProcessBuilder();
+    procBuilder.addProcess("UserTaskTest");
+    procBuilder.addProcessMessage("OutMessage").addToRef(MSG_LISTENER_ID).addProperty("foo", null, true);
+    procBuilder.addProcessMessage("InMessage").addProperty("bar", null, true);
+    procBuilder.addProcessMessage("EndMessage").addToRef(getTestID()).addProperty("bar", null, true);
+    procBuilder.addStartEvent("Start").addSequenceFlow("TaskA");
+    procBuilder.addTask("TaskA", TaskType.User).addOutMessageRef("OutMessage").addInMessageRef("InMessage");
+    procBuilder.addSequenceFlow("End").addEndEvent("End", EventDetailType.Message).addMessageRef("EndMessage");
+    return procBuilder.getProcessDefinition();
+  }
+  
+  public static class UserMessageListener implements MessageListener
+  {
+    ObjectName procID;
+    
+    public UserMessageListener(ObjectName procID)
+    {
+      this.procID = procID;
+    }
+
+    @Override
+    public void catchMessage(Message message)
+    {
+      String propValue = message.getProperty("foo").getValue();
+      MessageBuilder msgBuilder = MessageBuilderService.locateMessageBuilder();
+      Message resMessage = msgBuilder.newMessage("InMessage").addProperty("bar", propValue, true).getMessage();
+      
+      MessageService msgService = MessageService.locateMessageService();
+      msgService.sendMessage(procID, "TaskA", resMessage);
+    }
+
+    @Override
+    public ObjectName getKey()
+    {
+      return MSG_LISTENER_ID;
+    }
+    
+  }
+}


Property changes on: projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/task/UserTaskTest.java
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + LF

Modified: projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/pattern/control/exclusivechoice/ExclusiveChoiceTest.java
===================================================================
--- projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/pattern/control/exclusivechoice/ExclusiveChoiceTest.java	2008-10-07 15:00:18 UTC (rev 2501)
+++ projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/pattern/control/exclusivechoice/ExclusiveChoiceTest.java	2008-10-08 09:18:41 UTC (rev 2502)
@@ -33,8 +33,8 @@
 import org.jbpm.api.model.Expression.ExpressionLanguage;
 import org.jbpm.api.model.builder.GatewayBuilder;
 import org.jbpm.api.model.builder.ProcessBuilder;
-import org.jbpm.api.model.builder.ProcessBuilderService;
 import org.jbpm.api.runtime.BasicAttachments;
+import org.jbpm.api.service.ProcessBuilderService;
 import org.jbpm.api.test.CTSTestCase;
 
 /**

Modified: projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/pattern/control/multichoice/MultiChoiceTest.java
===================================================================
--- projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/pattern/control/multichoice/MultiChoiceTest.java	2008-10-07 15:00:18 UTC (rev 2501)
+++ projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/pattern/control/multichoice/MultiChoiceTest.java	2008-10-08 09:18:41 UTC (rev 2502)
@@ -33,8 +33,8 @@
 import org.jbpm.api.model.Expression.ExpressionLanguage;
 import org.jbpm.api.model.builder.GatewayBuilder;
 import org.jbpm.api.model.builder.ProcessBuilder;
-import org.jbpm.api.model.builder.ProcessBuilderService;
 import org.jbpm.api.runtime.BasicAttachments;
+import org.jbpm.api.service.ProcessBuilderService;
 import org.jbpm.api.test.CTSTestCase;
 
 /**

Modified: projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/pattern/control/parallelsplit/ParallelSplitTest.java
===================================================================
--- projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/pattern/control/parallelsplit/ParallelSplitTest.java	2008-10-07 15:00:18 UTC (rev 2501)
+++ projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/pattern/control/parallelsplit/ParallelSplitTest.java	2008-10-08 09:18:41 UTC (rev 2502)
@@ -34,7 +34,7 @@
 import org.jbpm.api.model.Signal;
 import org.jbpm.api.model.Signal.SignalType;
 import org.jbpm.api.model.builder.ProcessBuilder;
-import org.jbpm.api.model.builder.ProcessBuilderService;
+import org.jbpm.api.service.ProcessBuilderService;
 import org.jbpm.api.test.CTSTestCase;
 
 /**

Modified: projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/pattern/control/sequence/SequenceTest.java
===================================================================
--- projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/pattern/control/sequence/SequenceTest.java	2008-10-07 15:00:18 UTC (rev 2501)
+++ projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/pattern/control/sequence/SequenceTest.java	2008-10-08 09:18:41 UTC (rev 2502)
@@ -31,7 +31,7 @@
 import org.jbpm.api.model.Signal;
 import org.jbpm.api.model.Signal.SignalType;
 import org.jbpm.api.model.builder.ProcessBuilder;
-import org.jbpm.api.model.builder.ProcessBuilderService;
+import org.jbpm.api.service.ProcessBuilderService;
 import org.jbpm.api.test.CTSTestCase;
 
 /**

Modified: projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/pattern/control/simplemerge/SimpleMergeTest.java
===================================================================
--- projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/pattern/control/simplemerge/SimpleMergeTest.java	2008-10-07 15:00:18 UTC (rev 2501)
+++ projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/pattern/control/simplemerge/SimpleMergeTest.java	2008-10-08 09:18:41 UTC (rev 2502)
@@ -31,7 +31,7 @@
 import org.jbpm.api.model.Signal;
 import org.jbpm.api.model.Gateway.GatewayType;
 import org.jbpm.api.model.builder.ProcessBuilder;
-import org.jbpm.api.model.builder.ProcessBuilderService;
+import org.jbpm.api.service.ProcessBuilderService;
 import org.jbpm.api.test.CTSTestCase;
 
 /**

Modified: projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/pattern/control/synchronization/SynchronizationTest.java
===================================================================
--- projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/pattern/control/synchronization/SynchronizationTest.java	2008-10-07 15:00:18 UTC (rev 2501)
+++ projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/pattern/control/synchronization/SynchronizationTest.java	2008-10-08 09:18:41 UTC (rev 2502)
@@ -34,7 +34,7 @@
 import org.jbpm.api.model.Gateway.GatewayType;
 import org.jbpm.api.model.builder.MessageBuilder;
 import org.jbpm.api.model.builder.ProcessBuilder;
-import org.jbpm.api.model.builder.ProcessBuilderService;
+import org.jbpm.api.service.ProcessBuilderService;
 import org.jbpm.api.test.CTSTestCase;
 
 /**

Modified: projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/pattern/data/casedata/CaseDataTest.java
===================================================================
--- projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/pattern/data/casedata/CaseDataTest.java	2008-10-07 15:00:18 UTC (rev 2501)
+++ projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/pattern/data/casedata/CaseDataTest.java	2008-10-08 09:18:41 UTC (rev 2502)
@@ -33,7 +33,7 @@
 import org.jbpm.api.model.Expression.ExpressionLanguage;
 import org.jbpm.api.model.builder.MessageBuilder;
 import org.jbpm.api.model.builder.ProcessBuilder;
-import org.jbpm.api.model.builder.ProcessBuilderService;
+import org.jbpm.api.service.ProcessBuilderService;
 import org.jbpm.api.test.CTSTestCase;
 
 /**

Modified: projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/pattern/data/taskdata/TaskDataTest.java
===================================================================
--- projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/pattern/data/taskdata/TaskDataTest.java	2008-10-07 15:00:18 UTC (rev 2501)
+++ projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/pattern/data/taskdata/TaskDataTest.java	2008-10-08 09:18:41 UTC (rev 2502)
@@ -33,8 +33,8 @@
 import org.jbpm.api.model.Expression.ExpressionLanguage;
 import org.jbpm.api.model.builder.MessageBuilder;
 import org.jbpm.api.model.builder.ProcessBuilder;
-import org.jbpm.api.model.builder.ProcessBuilderService;
 import org.jbpm.api.model.builder.TaskBuilder;
+import org.jbpm.api.service.ProcessBuilderService;
 import org.jbpm.api.test.CTSTestCase;
 
 /**

Modified: projects/spec/trunk/modules/cts/src/test/resources/log4j.xml
===================================================================
--- projects/spec/trunk/modules/cts/src/test/resources/log4j.xml	2008-10-07 15:00:18 UTC (rev 2501)
+++ projects/spec/trunk/modules/cts/src/test/resources/log4j.xml	2008-10-08 09:18:41 UTC (rev 2502)
@@ -32,12 +32,11 @@
   <!-- Limit categories -->
   <!-- ================ -->
 
-  <!-- Apache HTTP Client -->
-  <category name="org.apache.commons.httpclient">
+  <category name="org.hibernate">
     <priority value="INFO" />
   </category>
-  <category name="httpclient.wire">
-    <priority value="INFO" />
+  <category name="org.hibernate.persister">
+    <priority value="DEBUG" />
   </category>
 
   <!-- ======================= -->

Modified: projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/GatewayImpl.java
===================================================================
--- projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/GatewayImpl.java	2008-10-07 15:00:18 UTC (rev 2501)
+++ projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/GatewayImpl.java	2008-10-08 09:18:41 UTC (rev 2502)
@@ -167,11 +167,6 @@
         if (expectedFlows.contains(flow) == false)
           throw new IllegalStateException("Unexpected token from: " + flow);
         
-        // Call custom execution handler
-        ExecutionHandler exHandler = getExecutionHandler(false);
-        if (exHandler != null)
-          exHandler.execute(token);
-
         // Remove the flow from the expected list  
         expectedFlows.remove(flow);
         

Modified: projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/NodeImpl.java
===================================================================
--- projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/NodeImpl.java	2008-10-07 15:00:18 UTC (rev 2501)
+++ projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/NodeImpl.java	2008-10-08 09:18:41 UTC (rev 2502)
@@ -57,10 +57,12 @@
 import org.jbpm.api.runtime.SignalHandler;
 import org.jbpm.api.runtime.Token;
 import org.jbpm.api.runtime.TokenExecutor;
+import org.jbpm.api.runtime.Token.TokenStatus;
 import org.jbpm.ri.model.builder.MultipleInFlowSupport;
 import org.jbpm.ri.model.builder.MultipleOutFlowSupport;
 import org.jbpm.ri.model.builder.SingleInFlowSupport;
 import org.jbpm.ri.model.builder.SingleOutFlowSupport;
+import org.jbpm.ri.runtime.RuntimeContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -220,6 +222,15 @@
     return outFlows;
   }
 
+  public void execute(RuntimeContext rtContext)
+  {
+    Token token = rtContext.getToken();
+
+    // The default implementation calls the ExecutionHandler
+    ExecutionHandler execHandler = getExecutionHandler();
+    execHandler.execute(token);
+  }
+  
   public <T extends ExecutionHandler> void setExecutionHandler(Class<T> clazz)
   {
     this.execHandler = clazz.getName();
@@ -236,7 +247,7 @@
   }
 
   @Override
-  public ExecutionHandler getExecutionHandler(boolean defaultHandler)
+  public ExecutionHandler getExecutionHandler()
   {
     if (customExecHandler == null && execHandler != null)
       customExecHandler = loadHandlerInstance(ExecutionHandler.class, execHandler);
@@ -244,7 +255,7 @@
     if (defaultExecHandler == null)
       defaultExecHandler = getDefaultExecutionHandler();
       
-    return defaultHandler ? defaultExecHandler : customExecHandler;
+    return customExecHandler != null ? customExecHandler : defaultExecHandler;
   }
 
   protected ExecutionHandler getDefaultExecutionHandler()
@@ -273,7 +284,7 @@
   }
 
   @Override
-  public SignalHandler getSignalHandler(boolean defaultHandler)
+  public SignalHandler getSignalHandler()
   {
     if (customSignalHandler == null && sigHandler != null)
       customSignalHandler = loadHandlerInstance(SignalHandler.class, sigHandler);
@@ -281,13 +292,13 @@
     if (defaultSignalHandler == null)
       defaultSignalHandler = getDefaultSignalHandler();
       
-    return defaultHandler ? defaultSignalHandler : customSignalHandler;
+    return customSignalHandler != null ? customSignalHandler : defaultSignalHandler;
   }
   
   protected abstract SignalHandler getDefaultSignalHandler();
 
   @Override
-  public FlowHandler getFlowHandler(boolean defaultHandler)
+  public FlowHandler getFlowHandler()
   {
     if (customFlowHandler == null && flowHandler != null)
       customFlowHandler = loadHandlerInstance(FlowHandler.class, flowHandler);
@@ -295,7 +306,7 @@
     if (defaultFlowHandler == null)
       defaultFlowHandler = getDefaultFlowHandler();
       
-    return defaultHandler ? defaultFlowHandler : customFlowHandler;
+    return customFlowHandler != null ? customFlowHandler : defaultFlowHandler;
   }
 
   protected FlowHandler getDefaultFlowHandler()
@@ -310,7 +321,8 @@
         if (getOutFlows().size() == 1)
         {
           SequenceFlow outFlow = getOutFlows().get(0);
-          tokenExecutor.move(token, outFlow);
+          if (token.getTokenStatus() == TokenStatus.Started)
+            tokenExecutor.move(token, outFlow);
         }
         else
         {

Modified: projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/ReceiveTaskImpl.java
===================================================================
--- projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/ReceiveTaskImpl.java	2008-10-07 15:00:18 UTC (rev 2501)
+++ projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/ReceiveTaskImpl.java	2008-10-08 09:18:41 UTC (rev 2502)
@@ -33,20 +33,18 @@
 import org.jbpm.api.NotImplementedException;
 import org.jbpm.api.client.MessageListener;
 import org.jbpm.api.model.Message;
-import org.jbpm.api.model.Node;
 import org.jbpm.api.model.Process;
 import org.jbpm.api.model.ProcessDefinition;
 import org.jbpm.api.model.ProcessStructure;
 import org.jbpm.api.runtime.ExecutionContext;
-import org.jbpm.api.runtime.ExecutionHandler;
-import org.jbpm.api.runtime.FlowHandler;
 import org.jbpm.api.runtime.Token;
 import org.jbpm.api.runtime.TokenExecutor;
+import org.jbpm.ri.runtime.RuntimeContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 /**
- * Task that corresponds to the TaskType.None
+ * Task that corresponds to the TaskType.Receive
  * 
  * @author thomas.diesler at jboss.com
  * @since 08-Jul-2008
@@ -66,8 +64,11 @@
   private List<Message> receivedMessages = new ArrayList<Message>();
 
   @Transient
-  private List<Token> suspendedTokens = new ArrayList<Token>();
+  private transient Token suspendedToken;
 
+  @Transient
+  private transient TokenExecutor tokenExecutor;
+  
   public ReceiveTaskImpl(ProcessStructure procStruct, String name)
   {
     super(procStruct, name, TaskType.Receive);
@@ -94,30 +95,55 @@
     this.messageRef = message;
   }
 
+  
+  @Override
+  public void execute(RuntimeContext rtContext)
+  {
+    Token token = rtContext.getToken();
+    tokenExecutor = rtContext.getTokenExecutor();
+    
+    if (receivedMessages.size() > 0)
+    {
+      // Copy the expected properties from the received message
+      Message msg = receivedMessages.get(0);
+      ExecutionContext exContext = token.getExecutionContext();
+      for (String key : messageRef.getPropertyNames())
+      {
+        Object value = msg.getProperty(key).getValue();
+        exContext.addAttachment(key, value);
+      }
+    }
+    else
+    {
+      tokenExecutor.suspend(token);
+      suspendedToken = token;
+    }
+  }
+
+  @Override
   public synchronized void catchMessage(Message message)
   {
     String msgName = message.getName();
     if (messageRef.getName().equals(msgName))
     {
       log.debug("catchMessage in " + this + " => " + message);
+      
+      // Verify expected properties
       for (String propName : messageRef.getPropertyNames())
       {
         if (message.getProperty(propName) == null)
           throw new IllegalArgumentException("Received message does not contain expected property: " + propName);
       }
+      
+      // Store the received message
       receivedMessages.add(message);
 
-      if (suspendedTokens.size() == 0)
+      // Activate the suspended token
+      if (suspendedToken != null)
       {
-        log.debug("Suspend message: " + message);
+        tokenExecutor.activate(suspendedToken.getTokenID());
+        suspendedToken = null;
       }
-      else
-      {
-        Token token = suspendedTokens.remove(0);
-        ExecutionContext exContext = token.getExecutionContext();
-        TokenExecutor tokenExecutor = exContext.removeAttachment(TokenExecutor.class);
-        tokenExecutor.activate(token.getTokenID());
-      }
     }
     else
     {
@@ -126,80 +152,6 @@
   }
 
   @Override
-  protected ExecutionHandler getDefaultExecutionHandler()
-  {
-    final Node thisNode = this;
-    return new ExecutionHandler()
-    {
-      private static final long serialVersionUID = 1L;
-
-      public void execute(Token token)
-      {
-        if (receivedMessages.size() > 0)
-        {
-          // Copy the expected properties from the
-          // received message to the execution context
-          Message msg = receivedMessages.get(0);
-          ExecutionContext exContext = token.getExecutionContext();
-          for (String key : messageRef.getPropertyNames())
-          {
-            Object value = msg.getProperty(key).getValue();
-            exContext.addAttachment(key, value);
-          }
-        }
-      }
-
-      @Override
-      public Node getNode()
-      {
-        return thisNode;
-      }
-
-      @Override
-      public void setNode(Node node)
-      {
-      }
-    };
-  }
-
-  @Override
-  protected FlowHandler getDefaultFlowHandler()
-  {
-    final Node thisNode = this;
-    return new FlowHandler()
-    {
-      private static final long serialVersionUID = 1L;
-
-      public void execute(TokenExecutor tokenExecutor, Token token)
-      {
-        if (receivedMessages.size() > 0)
-        {
-          receivedMessages.remove(0);
-          tokenExecutor.move(token, getOutFlow());
-        }
-        else
-        {
-          tokenExecutor.suspend(token);
-          ExecutionContext exContext = token.getExecutionContext();
-          exContext.addAttachment(TokenExecutor.class, tokenExecutor);
-          suspendedTokens.add(token);
-        }
-      }
-
-      @Override
-      public Node getNode()
-      {
-        return thisNode;
-      }
-
-      @Override
-      public void setNode(Node node)
-      {
-      }
-    };
-  }
-
-  @Override
   protected void create(ProcessDefinition procDef)
   {
     super.create(procDef);

Modified: projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/SendTaskImpl.java
===================================================================
--- projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/SendTaskImpl.java	2008-10-07 15:00:18 UTC (rev 2501)
+++ projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/SendTaskImpl.java	2008-10-08 09:18:41 UTC (rev 2502)
@@ -39,7 +39,7 @@
 import org.slf4j.LoggerFactory;
 
 /**
- * Task that corresponds to the TaskType.None
+ * Task that corresponds to the TaskType.Send
  * 
  * @author thomas.diesler at jboss.com
  * @since 08-Jul-2008

Added: projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/UserTaskImpl.java
===================================================================
--- projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/UserTaskImpl.java	                        (rev 0)
+++ projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/UserTaskImpl.java	2008-10-08 09:18:41 UTC (rev 2502)
@@ -0,0 +1,191 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jbpm.ri.model;
+
+//$Id$
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.persistence.Entity;
+import javax.persistence.Transient;
+
+import org.jbpm.api.InvalidProcessException;
+import org.jbpm.api.client.MessageListener;
+import org.jbpm.api.model.Message;
+import org.jbpm.api.model.Process;
+import org.jbpm.api.model.ProcessDefinition;
+import org.jbpm.api.model.ProcessStructure;
+import org.jbpm.api.runtime.ExecutionContext;
+import org.jbpm.api.runtime.Token;
+import org.jbpm.api.runtime.TokenExecutor;
+import org.jbpm.ri.runtime.MessageSender;
+import org.jbpm.ri.runtime.RuntimeContext;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Task that corresponds to the TaskType.User
+ * 
+ * @author thomas.diesler at jboss.com
+ * @since 08-Jul-2008
+ */
+ at Entity(name = "UserTask")
+public class UserTaskImpl extends TaskImpl implements MessageListener
+{
+  private static final long serialVersionUID = 1L;
+
+  // provide logging
+  final static Logger log = LoggerFactory.getLogger(UserTaskImpl.class);
+
+  @Transient
+  protected MessageImpl outMessageRef;
+
+  @Transient
+  protected MessageImpl inMessageRef;
+
+  @Transient
+  private List<Message> receivedMessages = new ArrayList<Message>();
+
+  @Transient
+  private transient Token suspendedToken;
+  
+  @Transient
+  private transient TokenExecutor tokenExecutor;
+  
+  public UserTaskImpl(ProcessStructure procStruct, String name)
+  {
+    super(procStruct, name, TaskType.User);
+  }
+
+  // Persistence ctor
+  protected UserTaskImpl()
+  {
+  }
+
+  public Message getOutMessageRef()
+  {
+    return outMessageRef;
+  }
+
+  public void setOutMessageRef(MessageImpl message)
+  {
+    this.outMessageRef = message;
+  }
+
+  public Message getInMessageRef()
+  {
+    return inMessageRef;
+  }
+
+  public void setInMessageRef(MessageImpl message)
+  {
+    this.inMessageRef = message;
+  }
+
+  
+  @Override
+  public void execute(RuntimeContext rtContext)
+  {
+    Token token = rtContext.getToken();
+    tokenExecutor = rtContext.getTokenExecutor();
+    
+    if (receivedMessages.size() == 0)
+    {
+      MessageSender messageSender = new MessageSender(this, outMessageRef);
+      messageSender.sendMessage(token);
+    }
+    
+    if (receivedMessages.size() > 0)
+    {
+      // Copy the expected properties from the received message
+      Message msg = receivedMessages.remove(0);
+      ExecutionContext exContext = token.getExecutionContext();
+      for (String key : inMessageRef.getPropertyNames())
+      {
+        Object value = msg.getProperty(key).getValue();
+        exContext.addAttachment(key, value);
+      }
+    }
+    else
+    {
+      tokenExecutor.suspend(token);
+      suspendedToken = token;
+    }
+  }
+
+  @Override
+  public synchronized void catchMessage(Message message)
+  {
+    String msgName = message.getName();
+    if (inMessageRef.getName().equals(msgName))
+    {
+      log.debug("catchMessage in " + this + " => " + message);
+      
+      // Verify expected properties
+      for (String propName : inMessageRef.getPropertyNames())
+      {
+        if (message.getProperty(propName) == null)
+          throw new IllegalArgumentException("Received message does not contain expected property: " + propName);
+      }
+      
+      // Store the received message
+      receivedMessages.add(message);
+
+      // Activate the suspended token
+      if (suspendedToken != null)
+      {
+        tokenExecutor.activate(suspendedToken.getTokenID());
+        suspendedToken = null;
+      }
+    }
+    else
+    {
+      log.debug("Ignore unexpected message: " + message);
+    }
+  }
+
+  @Override
+  protected void create(ProcessDefinition procDef)
+  {
+    super.create(procDef);
+
+    if (outMessageRef == null)
+      throw new InvalidProcessException("An outgoing message ref attribute MUST be entered");
+    if (inMessageRef == null)
+      throw new InvalidProcessException("An incomming message ref attribute MUST be entered");
+
+    ProcessDefinitionImpl procDefImpl = (ProcessDefinitionImpl)procDef;
+    procDefImpl.initializeMessageRef(outMessageRef);
+    procDefImpl.initializeMessageRef(inMessageRef);
+  }
+
+  @Override
+  protected void create(Process proc)
+  {
+    super.create(proc);
+
+    ProcessDefinitionImpl procDefImpl = (ProcessDefinitionImpl)proc.getProcessDefinition();
+    procDefImpl.initializeMessageRef(outMessageRef);
+    procDefImpl.initializeMessageRef(inMessageRef);
+  }
+}
\ No newline at end of file


Property changes on: projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/UserTaskImpl.java
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + LF

Modified: projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/builder/ProcessBuilderImpl.java
===================================================================
--- projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/builder/ProcessBuilderImpl.java	2008-10-07 15:00:18 UTC (rev 2501)
+++ projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/builder/ProcessBuilderImpl.java	2008-10-08 09:18:41 UTC (rev 2502)
@@ -57,6 +57,7 @@
 import org.jbpm.ri.model.SequenceFlowImpl;
 import org.jbpm.ri.model.StartEventImpl;
 import org.jbpm.ri.model.TaskImpl;
+import org.jbpm.ri.model.UserTaskImpl;
 
 /**
  * The ProcessBuilder can be used to dynamically build a {@link Process}.
@@ -173,7 +174,7 @@
     }
     else if (type == TaskType.User)
     {
-      throw new NotImplementedException("JBPM-1653", "Task Type User");
+      node = new UserTaskImpl(procStruct, name);
     }
     else if (type == TaskType.Script)
     {

Modified: projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/builder/TaskBuilderImpl.java
===================================================================
--- projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/builder/TaskBuilderImpl.java	2008-10-07 15:00:18 UTC (rev 2501)
+++ projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/model/builder/TaskBuilderImpl.java	2008-10-08 09:18:41 UTC (rev 2502)
@@ -35,6 +35,7 @@
 import org.jbpm.ri.model.ReceiveTaskImpl;
 import org.jbpm.ri.model.SendTaskImpl;
 import org.jbpm.ri.model.TaskImpl;
+import org.jbpm.ri.model.UserTaskImpl;
 
 /**
  * The TaskBuilder can be used to dynamically build {@link Task}.
@@ -53,22 +54,43 @@
   }
 
   @Override
-  public TaskBuilder addMessageRef(String msgName)
+  public TaskBuilder addOutMessageRef(String msgName)
   {
     TaskImpl taskImpl = getTask();
+    if (taskImpl instanceof SendTaskImpl)
+    {
+      SendTaskImpl sendTaskImpl = (SendTaskImpl)taskImpl;
+      sendTaskImpl.setMessageRef(new MessageImpl(msgName));
+    }
+    else if (taskImpl instanceof UserTaskImpl)
+    {
+      UserTaskImpl userTaskImpl = (UserTaskImpl)taskImpl;
+      userTaskImpl.setOutMessageRef(new MessageImpl(msgName));
+    }
+    else
+    {
+      throw new IllegalStateException("Cannot set outgoing message ref on task: " + taskImpl);
+    }
+    return this;
+  }
+
+  @Override
+  public TaskBuilder addInMessageRef(String msgName)
+  {
+    TaskImpl taskImpl = getTask();
     if (taskImpl instanceof ReceiveTaskImpl)
     {
       ReceiveTaskImpl receiveTaskImpl = (ReceiveTaskImpl)taskImpl;
       receiveTaskImpl.setMessageRef(new MessageImpl(msgName));
     }
-    else if (taskImpl instanceof SendTaskImpl)
+    else if (taskImpl instanceof UserTaskImpl)
     {
-      SendTaskImpl sendTaskImpl = (SendTaskImpl)taskImpl;
-      sendTaskImpl.setMessageRef(new MessageImpl(msgName));
+      UserTaskImpl userTaskImpl = (UserTaskImpl)taskImpl;
+      userTaskImpl.setInMessageRef(new MessageImpl(msgName));
     }
     else
     {
-      throw new IllegalStateException("Cannot set a message ref on task: " + taskImpl);
+      throw new IllegalStateException("Cannot set incomming message ref on task: " + taskImpl);
     }
     return this;
   }

Added: projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/runtime/AssignmentInterceptor.java
===================================================================
--- projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/runtime/AssignmentInterceptor.java	                        (rev 0)
+++ projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/runtime/AssignmentInterceptor.java	2008-10-08 09:18:41 UTC (rev 2502)
@@ -0,0 +1,74 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jbpm.ri.runtime;
+
+//$Id$
+
+import org.jbpm.api.model.Assignment;
+import org.jbpm.api.model.Expression;
+import org.jbpm.api.model.Node;
+import org.jbpm.api.model.Assignment.AssignTime;
+import org.jbpm.api.runtime.ExecutionContext;
+import org.jbpm.api.runtime.Token;
+
+/**
+ * An interceptor that invokes the ExecutionHandler.execute
+ * 
+ * @author thomas.diesler at jboss.com
+ * @since 07-Oct-2008
+ */
+public class AssignmentInterceptor implements NodeInterceptor
+{
+  @Override
+  public void execute(RuntimeContext rtContext)
+  {
+    Node node = rtContext.getNode();
+    Token token = rtContext.getToken();
+
+    // Do start time assignments
+    for (Assignment ass : node.getAssignments())
+    {
+      if (ass.getAssignTime() == AssignTime.Start)
+        anyTimeAssignment(ass, token);
+    }
+    
+    // Call the next Interceptor
+    rtContext.next();
+
+    // Do end time assignments
+    for (Assignment ass : node.getAssignments())
+    {
+      if (ass.getAssignTime() == AssignTime.End)
+        anyTimeAssignment(ass, token);
+    }
+  }
+
+  protected void anyTimeAssignment(Assignment ass, Token token)
+  {
+    Expression expr = ass.getFrom();
+    ExpressionEvaluator exprEvaluator = new ExpressionEvaluator(expr);
+    Object result = exprEvaluator.evaluateExpression(token);
+    String propName = ass.getTo().getName();
+    ExecutionContext exContext = token.getExecutionContext();
+    exContext.addAttachment(propName, result);
+  }
+}
\ No newline at end of file


Property changes on: projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/runtime/AssignmentInterceptor.java
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + LF

Added: projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/runtime/ExitSignalInterceptor.java
===================================================================
--- projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/runtime/ExitSignalInterceptor.java	                        (rev 0)
+++ projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/runtime/ExitSignalInterceptor.java	2008-10-08 09:18:41 UTC (rev 2502)
@@ -0,0 +1,47 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jbpm.ri.runtime;
+
+//$Id$
+
+import org.jbpm.api.model.Node;
+import org.jbpm.api.runtime.SignalHandler;
+import org.jbpm.api.runtime.Token;
+
+/**
+ * An interceptor that invokes the SignalHandler.throwExitSignal 
+ * 
+ * @author thomas.diesler at jboss.com
+ * @since 07-Oct-2008
+ */
+public class ExitSignalInterceptor implements NodeInterceptor
+{
+  @Override
+  public void execute(RuntimeContext rtContext)
+  {
+    Node node = rtContext.getNode();
+    Token token = rtContext.getToken();
+    
+    SignalHandler sigHandler = node.getSignalHandler();
+    sigHandler.throwExitSignal(token);
+  }
+}
\ No newline at end of file


Property changes on: projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/runtime/ExitSignalInterceptor.java
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + LF

Added: projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/runtime/FlowHandlerInterceptor.java
===================================================================
--- projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/runtime/FlowHandlerInterceptor.java	                        (rev 0)
+++ projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/runtime/FlowHandlerInterceptor.java	2008-10-08 09:18:41 UTC (rev 2502)
@@ -0,0 +1,53 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jbpm.ri.runtime;
+
+//$Id$
+
+import org.jbpm.api.model.Node;
+import org.jbpm.api.runtime.FlowHandler;
+import org.jbpm.api.runtime.Token;
+import org.jbpm.api.runtime.TokenExecutor;
+
+/**
+ * An interceptor that invokes the FlowHandler.execute 
+ * 
+ * @author thomas.diesler at jboss.com
+ * @since 07-Oct-2008
+ */
+public class FlowHandlerInterceptor implements NodeInterceptor
+{
+  @Override
+  public void execute(RuntimeContext rtContext)
+  {
+    TokenExecutor tokenExecutor = rtContext.getTokenExecutor();
+    Node node = rtContext.getNode();
+    Token token = rtContext.getToken();
+    
+    // Call the next Interceptor
+    rtContext.next();
+    
+    // Call the FlowHandler
+    FlowHandler flowHandler = node.getFlowHandler();
+    flowHandler.execute(tokenExecutor, token);
+  }
+}
\ No newline at end of file


Property changes on: projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/runtime/FlowHandlerInterceptor.java
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + LF

Added: projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/runtime/NodeExecuteInterceptor.java
===================================================================
--- projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/runtime/NodeExecuteInterceptor.java	                        (rev 0)
+++ projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/runtime/NodeExecuteInterceptor.java	2008-10-08 09:18:41 UTC (rev 2502)
@@ -0,0 +1,42 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jbpm.ri.runtime;
+
+//$Id$
+
+import org.jbpm.ri.model.NodeImpl;
+
+/**
+ * An interceptor that invokes the Node.execute 
+ * 
+ * @author thomas.diesler at jboss.com
+ * @since 07-Oct-2008
+ */
+public class NodeExecuteInterceptor implements NodeInterceptor
+{
+  @Override
+  public void execute(RuntimeContext rtContext)
+  {
+    NodeImpl nodeImpl = (NodeImpl)rtContext.getNode();
+    nodeImpl.execute(rtContext);
+  }
+}
\ No newline at end of file


Property changes on: projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/runtime/NodeExecuteInterceptor.java
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + LF

Added: projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/runtime/NodeInterceptor.java
===================================================================
--- projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/runtime/NodeInterceptor.java	                        (rev 0)
+++ projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/runtime/NodeInterceptor.java	2008-10-08 09:18:41 UTC (rev 2502)
@@ -0,0 +1,35 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jbpm.ri.runtime;
+
+//$Id$
+
+/**
+ * A node interceptor
+ * 
+ * @author thomas.diesler at jboss.com
+ * @since 07-Oct-2008
+ */
+public interface NodeInterceptor
+{
+  void execute (RuntimeContext rtContext);
+}
\ No newline at end of file


Property changes on: projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/runtime/NodeInterceptor.java
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + LF

Added: projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/runtime/RunnableToken.java
===================================================================
--- projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/runtime/RunnableToken.java	                        (rev 0)
+++ projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/runtime/RunnableToken.java	2008-10-08 09:18:41 UTC (rev 2502)
@@ -0,0 +1,140 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jbpm.ri.runtime;
+
+import org.jbpm.api.model.Node;
+import org.jbpm.api.model.Process;
+import org.jbpm.api.model.SequenceFlow;
+import org.jbpm.api.model.Process.ProcessStatus;
+import org.jbpm.api.runtime.Token;
+import org.jbpm.api.runtime.TokenExecutor;
+import org.jbpm.api.runtime.Token.TokenStatus;
+import org.jbpm.ri.model.ProcessImpl;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * The runnable Token
+ * 
+ * @author thomas.diesler at jboss.com
+ * @since 08-Jul-2008
+ */
+class RunnableToken implements Runnable
+{
+  // provide logging
+  final static Logger log = LoggerFactory.getLogger(RunnableToken.class);
+  
+  private RuntimeProcess rtProc;
+  private TokenExecutor tokenExecutor;
+  private MutableToken token;
+  private boolean releaseThread;
+
+  public RunnableToken(TokenExecutorImpl tokenExecutorImpl, RuntimeProcess rtProc, MutableToken token)
+  {
+    this.tokenExecutor = rtProc.getTokenExecutor();
+    this.rtProc = rtProc;
+    this.token = token;
+  }
+
+  public Token getToken()
+  {
+    return token;
+  }
+
+  void releaseThread()
+  {
+    releaseThread = true;
+  }
+
+  public void run()
+  {
+    Process proc = rtProc.getProcess();
+    try
+    {
+      SequenceFlow flow = token.getFlow();
+      if (flow == null)
+        throw new IllegalStateException("Cannot obtain initial flow");
+
+      while (continueTokenThread())
+      {
+        // Get the target node
+        Node node = token.getFlow().getTargetRef();
+
+        // Synchronize on the target Node
+        synchronized (node)
+        {
+          // Create a Token that includes node properties
+          DelegatingToken tokCopy = new DelegatingToken(token);
+          RuntimeContext rtContext = new RuntimeContext(tokenExecutor, tokCopy);
+          rtContext.addInterceptor(new SignalHandlerInterceptor());
+          rtContext.addInterceptor(new FlowHandlerInterceptor());
+          rtContext.addInterceptor(new AssignmentInterceptor());
+          rtContext.addInterceptor(new NodeExecuteInterceptor());
+
+          // Call the interceptor chain
+          rtContext.next();
+        }
+      }
+    }
+    catch (RuntimeException rte)
+    {
+      log.error("Process aborted: " + proc, rte);
+      ((ProcessImpl)proc).setRuntimeException(rte);
+
+      log.debug("Terminate all suspended tokens");
+      for (Token auxToken : tokenExecutor.getRunnableTokens())
+      {
+        if (auxToken.getTokenStatus() == TokenStatus.Suspended)
+          tokenExecutor.destroy(auxToken);
+      }
+      
+      // Destroy this token
+      tokenExecutor.destroy(token);
+    }
+    finally
+    {
+      // Notify Process on token termination
+      notifyRuntimeProcess();
+    }
+  }
+
+  private boolean continueTokenThread()
+  {
+    TokenStatus tokStatus = token.getTokenStatus();
+    ProcessStatus procStatus = rtProc.getProcess().getProcessStatus();
+    return releaseThread == false && procStatus == ProcessStatus.Active && tokStatus == TokenStatus.Started;
+  }
+
+  private void notifyRuntimeProcess()
+  {
+    synchronized (rtProc)
+    {
+      rtProc.notifyAll();
+    }
+  }
+
+  @Override
+  public String toString()
+  {
+    return token.toString();
+  }
+}
\ No newline at end of file


Property changes on: projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/runtime/RunnableToken.java
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + LF

Added: projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/runtime/RuntimeContext.java
===================================================================
--- projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/runtime/RuntimeContext.java	                        (rev 0)
+++ projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/runtime/RuntimeContext.java	2008-10-08 09:18:41 UTC (rev 2502)
@@ -0,0 +1,81 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jbpm.ri.runtime;
+
+//$Id$
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.jbpm.api.model.Node;
+import org.jbpm.api.runtime.Token;
+import org.jbpm.api.runtime.TokenExecutor;
+
+/**
+ * A runtime context that passes through a chain of interceptors.
+ * 
+ * @author thomas.diesler at jboss.com
+ * @since 07-Oct-2008
+ */
+public class RuntimeContext
+{
+  List<NodeInterceptor> interceptors = new ArrayList<NodeInterceptor>();
+  int itorIndex;
+
+  TokenExecutor tokenExecutor;
+  MutableToken token;
+
+  public RuntimeContext(TokenExecutor tokenExecutor, MutableToken token)
+  {
+    this.tokenExecutor = tokenExecutor;
+    this.token = token;
+  }
+
+  public TokenExecutor getTokenExecutor()
+  {
+    return tokenExecutor;
+  }
+
+  public Node getNode()
+  {
+    return token.getFlow().getTargetRef();
+  }
+
+  public Token getToken()
+  {
+    return token;
+  }
+
+  void addInterceptor(NodeInterceptor itor)
+  {
+    interceptors.add(itor);
+  }
+
+  protected void next()
+  {
+    if (itorIndex < interceptors.size())
+    {
+      NodeInterceptor itor = interceptors.get(itorIndex++);
+      itor.execute(this);
+    }
+  }
+}
\ No newline at end of file


Property changes on: projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/runtime/RuntimeContext.java
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + LF

Added: projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/runtime/SignalHandlerInterceptor.java
===================================================================
--- projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/runtime/SignalHandlerInterceptor.java	                        (rev 0)
+++ projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/runtime/SignalHandlerInterceptor.java	2008-10-08 09:18:41 UTC (rev 2502)
@@ -0,0 +1,58 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jbpm.ri.runtime;
+
+//$Id$
+
+import org.jbpm.api.model.Node;
+import org.jbpm.api.runtime.SignalHandler;
+import org.jbpm.api.runtime.Token;
+
+/**
+ * An interceptor that invokes the SignalHandler.throwEnterSignal 
+ * 
+ * @author thomas.diesler at jboss.com
+ * @since 07-Oct-2008
+ */
+public class SignalHandlerInterceptor implements NodeInterceptor
+{
+  @Override
+  public void execute(RuntimeContext rtContext)
+  {
+    Node node = rtContext.getNode();
+    Token token = rtContext.getToken();
+    
+    try
+    {
+      SignalHandler sigHandler = node.getSignalHandler();
+      sigHandler.throwEnterSignal(token);
+      
+      // Call the next Interceptor
+      rtContext.next();
+    }
+    finally
+    {
+      SignalHandler sigHandler = node.getSignalHandler();
+      sigHandler.throwExitSignal(token);
+    }
+  }
+}
\ No newline at end of file


Property changes on: projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/runtime/SignalHandlerInterceptor.java
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + LF

Modified: projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/runtime/TokenExecutorImpl.java
===================================================================
--- projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/runtime/TokenExecutorImpl.java	2008-10-07 15:00:18 UTC (rev 2501)
+++ projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/runtime/TokenExecutorImpl.java	2008-10-08 09:18:41 UTC (rev 2502)
@@ -31,21 +31,12 @@
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 
-import org.jbpm.api.model.Assignment;
-import org.jbpm.api.model.Expression;
-import org.jbpm.api.model.Node;
-import org.jbpm.api.model.Process;
 import org.jbpm.api.model.SequenceFlow;
-import org.jbpm.api.model.Assignment.AssignTime;
 import org.jbpm.api.model.Process.ProcessStatus;
-import org.jbpm.api.runtime.ExecutionContext;
-import org.jbpm.api.runtime.ExecutionHandler;
 import org.jbpm.api.runtime.FlowHandler;
-import org.jbpm.api.runtime.SignalHandler;
 import org.jbpm.api.runtime.Token;
 import org.jbpm.api.runtime.TokenExecutor;
 import org.jbpm.api.runtime.Token.TokenStatus;
-import org.jbpm.ri.model.ProcessImpl;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -63,7 +54,7 @@
 
   private RuntimeProcess rtProc;
   private ExecutorService executor = Executors.newCachedThreadPool();
-  private Map<String, RunnableToken> runnableTokens = new HashMap<String, RunnableToken>();
+  Map<String, RunnableToken> runnableTokens = new HashMap<String, RunnableToken>();
 
   public TokenExecutorImpl(RuntimeProcess rtProc)
   {
@@ -100,7 +91,7 @@
 
       log.debug("Create Token: " + token);
 
-      RunnableToken rtToken = new RunnableToken(rtProc, mutableToken);
+      RunnableToken rtToken = new RunnableToken(this, rtProc, mutableToken);
       runnableTokens.put(token.getTokenID(), rtToken);
     }
   }
@@ -113,7 +104,7 @@
       if (procStatus != ProcessStatus.Ready && procStatus != ProcessStatus.Active)
         throw new IllegalStateException("Cannot start token to process in state: " + procStatus);
 
-      log.debug("Sart Token: " + token);
+      log.debug("Start Token: " + token);
       MutableToken mutableToken = (MutableToken)token;
       mutableToken.setTokenStatus(TokenStatus.Started);
 
@@ -129,6 +120,9 @@
       if (flow == null)
         throw new IllegalArgumentException("Flow cannot be null");
 
+      if (token.getTokenStatus() != TokenStatus.Started)
+        throw new IllegalStateException("Cannot move token in state: " + token.getTokenStatus());
+      
       MutableToken mutableToken = (MutableToken)token;
       mutableToken.setFlow(flow);
     }
@@ -159,9 +153,17 @@
   {
     synchronized (runnableTokens)
     {
+      RunnableToken rtToken = runnableTokens.get(token.getTokenID());
+      if (rtToken == null)
+        throw new IllegalStateException("Not a runnable token: " + token);
+      
       log.debug("Suspend Token: " + token);
       MutableToken mutableToken = (MutableToken)token;
       mutableToken.setTokenStatus(TokenStatus.Suspended);
+      
+      // Release the thread for a suspended token
+      rtToken.releaseThread();
+      
       return token.getTokenID();
     }
   }
@@ -182,170 +184,11 @@
       MutableToken mutableToken = (MutableToken)token;
       mutableToken.setTokenStatus(TokenStatus.Started);
 
+      rtToken = new RunnableToken(this, rtProc, mutableToken);
+      runnableTokens.put(token.getTokenID(), rtToken);
       executor.submit(rtToken);
+      
       return token;
     }
   }
-
-  /****************************************************
-   * The runnable Token
-   */
-  class RunnableToken implements Runnable
-  {
-    private RuntimeProcess rtProc;
-    private TokenExecutor tokenExecutor;
-    private MutableToken token;
-
-    public RunnableToken(RuntimeProcess rtProc, MutableToken token)
-    {
-      this.tokenExecutor = rtProc.getTokenExecutor();
-      this.rtProc = rtProc;
-      this.token = token;
-    }
-
-    public Token getToken()
-    {
-      return token;
-    }
-
-    public void run()
-    {
-      Process proc = rtProc.getProcess();
-      try
-      {
-        SequenceFlow flow = token.getFlow();
-        if (flow == null)
-          throw new IllegalStateException("Cannot obtain initial flow");
-
-        TokenStatus tokStatus = token.getTokenStatus();
-        ProcessStatus procStatus = proc.getProcessStatus();
-        while (procStatus == ProcessStatus.Active && tokStatus == TokenStatus.Started)
-        {
-          // Get the target and its handlers
-          Node node = token.getFlow().getTargetRef();
-          SignalHandler sigHandler = getSignalHandler(node);
-          ExecutionHandler execHandler = getExecutionHandler(node);
-          FlowHandler flowHandler = getFlowHandler(node);
-
-          // Synchronize execution on the target Node
-          synchronized (node)
-          {
-            // Create a Token that includes properties from the current Activity
-            DelegatingToken tokCopy = new DelegatingToken(token);
-
-            // Throw the Enter Signal
-            sigHandler.throwEnterSignal(tokCopy);
-
-            // Process the start time assignments
-            startTimeAssignments(node, tokCopy);
-            
-            // Execute the target Node
-            execHandler.execute(tokCopy);
-
-            // Process the end time assignments
-            endTimeAssignments(node, tokCopy);
-            
-            // Transfer the token to the FlowHandler
-            flowHandler.execute(tokenExecutor, tokCopy);
-
-            // Throw the Exit Signal
-            sigHandler.throwExitSignal(tokCopy);
-
-            tokStatus = token.getTokenStatus();
-            procStatus = proc.getProcessStatus();
-          }
-        }
-
-        // Notify Process on token termination
-        terminateToken(proc);
-      }
-      catch (RuntimeException rte)
-      {
-        log.error("Process aborted: " + proc, rte);
-        ((ProcessImpl)proc).setRuntimeException(rte);
-
-        log.debug("Terminate all suspended tokens");
-        Set<String> keySet = new HashSet<String>(runnableTokens.keySet());
-        for (String tokID : keySet)
-        {
-          RunnableToken rtTok = runnableTokens.get(tokID);
-          Token auxToken = rtTok.getToken();
-          if (auxToken.getTokenStatus() == TokenStatus.Suspended)
-            tokenExecutor.destroy(auxToken);
-        }
-
-        // Notify Process on token termination
-        terminateToken(proc);
-      }
-    }
-
-    private void terminateToken(Process proc)
-    {
-      // Destroy the token if not already done
-      synchronized (runnableTokens)
-      {
-        TokenStatus status = token.getTokenStatus();
-        if (status != TokenStatus.Suspended && status != TokenStatus.Destroyed)
-          tokenExecutor.destroy(token);
-      }
-
-      // Notify the runtime process
-      synchronized (rtProc)
-      {
-        rtProc.notifyAll();
-      }
-    }
-
-    private void startTimeAssignments(Node node, Token token)
-    {
-      for (Assignment ass : node.getAssignments())
-      {
-        if (ass.getAssignTime() == AssignTime.Start)
-          anyTimeAssignment(ass, token);
-      }
-    }
-
-    private void endTimeAssignments(Node node, Token token)
-    {
-      for (Assignment ass : node.getAssignments())
-      {
-        if (ass.getAssignTime() == AssignTime.End)
-          anyTimeAssignment(ass, token);
-      }
-    }
-    
-    private void anyTimeAssignment(Assignment ass, Token token)
-    {
-      Expression expr = ass.getFrom();
-      ExpressionEvaluator exprEvaluator = new ExpressionEvaluator(expr);
-      Object result = exprEvaluator.evaluateExpression(token);
-      String propName = ass.getTo().getName();
-      ExecutionContext exContext = token.getExecutionContext();
-      exContext.addAttachment(propName, result);
-    }
-    
-    private SignalHandler getSignalHandler(Node target)
-    {
-      SignalHandler customHandler = target.getSignalHandler(false);
-      return customHandler != null ? customHandler : target.getSignalHandler(true);
-    }
-
-    private ExecutionHandler getExecutionHandler(Node target)
-    {
-      ExecutionHandler customHandler = target.getExecutionHandler(false);
-      return customHandler != null ? customHandler : target.getExecutionHandler(true);
-    }
-
-    private FlowHandler getFlowHandler(Node target)
-    {
-      FlowHandler customHandler = target.getFlowHandler(false);
-      return customHandler != null ? customHandler : target.getFlowHandler(true);
-    }
-
-    @Override
-    public String toString()
-    {
-      return token.toString();
-    }
-  }
 }
\ No newline at end of file

Added: projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/service/HibernatePersistenceServiceImpl.java
===================================================================
--- projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/service/HibernatePersistenceServiceImpl.java	                        (rev 0)
+++ projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/service/HibernatePersistenceServiceImpl.java	2008-10-08 09:18:41 UTC (rev 2502)
@@ -0,0 +1,239 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jbpm.ri.service;
+
+// $Id$
+
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Set;
+
+import javax.management.ObjectName;
+
+import org.hibernate.Hibernate;
+import org.hibernate.ObjectNotFoundException;
+import org.hibernate.SessionFactory;
+import org.hibernate.Transaction;
+import org.hibernate.cfg.AnnotationConfiguration;
+import org.hibernate.classic.Session;
+import org.jbpm.api.ProcessNotFoundException;
+import org.jbpm.api.client.ProcessEngine;
+import org.jbpm.api.model.Process;
+import org.jbpm.api.model.ProcessDefinition;
+import org.jbpm.api.service.PersistenceService;
+import org.jbpm.api.service.Service;
+import org.jbpm.ri.model.ProcessDefinitionImpl;
+import org.jbpm.ri.model.ProcessImpl;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * A Hibernate based persistence service.
+ * 
+ * @author thomas.diesler at jboss.com
+ * @since 17-Sep-2008
+ */
+public class HibernatePersistenceServiceImpl extends PersistenceService implements MutableService
+{
+  // Provide logging
+  final Logger log = LoggerFactory.getLogger(HibernatePersistenceServiceImpl.class);
+
+  private String hibernateConfig;
+  private SessionFactory sessionFactory;
+  private Set<String> annotatedClasses = new HashSet<String>();
+
+  @Override
+  public void setProcessEngine(ProcessEngine engine)
+  {
+    super.setProcessEngine(engine);
+  }
+  
+  public void setHibernateConfig(String hibernateConfig)
+  {
+    this.hibernateConfig = hibernateConfig;
+  }
+
+  public void setAnnotatedClasses(Set<String> annotatedClasses)
+  {
+    this.annotatedClasses = annotatedClasses;
+  }
+
+  @Override
+  public ObjectName saveProcessDefinition(ProcessDefinition procDef)
+  {
+    log.debug("START saveProcessDefinition: " + procDef.getKey());
+    Session session = getSessionFactory().openSession();
+    Transaction tx = session.beginTransaction();
+    try
+    {
+      session.saveOrUpdate(procDef);
+      tx.commit();
+    }
+    finally
+    {
+      session.close();
+    }
+    log.debug("END saveProcessDefinition: " + procDef.getKey());
+    return procDef.getKey();
+  }
+
+  @Override
+  public ProcessDefinition loadProcessDefinition(ObjectName procDefID)
+  {
+    log.debug("START loadProcessDefinition: " + procDefID);
+    ProcessDefinitionImpl procDefImpl = null;
+    Session session = getSessionFactory().openSession();
+    try
+    {
+      Integer id = Integer.valueOf(procDefID.getKeyProperty("id"));
+      procDefImpl = (ProcessDefinitionImpl)session.load(ProcessDefinitionImpl.class, id);
+      Hibernate.initialize(procDefImpl);
+    }
+    catch (ObjectNotFoundException ex)
+    {
+      throw new ProcessNotFoundException("Cannot find process: " + procDefID);
+    }
+    finally
+    {
+      session.close();
+    }
+    log.debug("END loadProcessDefinition: " + procDefID);
+    return (ProcessDefinition)procDefImpl;
+  }
+
+  @Override
+  public void deleteProcessDefinition(ProcessDefinition procDef)
+  {
+    log.debug("START deleteProcessDefinition: " + procDef);
+    Session session = getSessionFactory().openSession();
+    Transaction tx = session.beginTransaction();
+    try
+    {
+      session.delete(procDef);
+      tx.commit();
+    }
+    finally
+    {
+      session.close();
+    }
+    log.debug("END deleteProcessDefinition: " + procDef);
+  }
+
+  @Override
+  public ObjectName saveProcess(Process proc)
+  {
+    log.debug("START saveProcess: " + proc.getKey());
+    Session session = getSessionFactory().openSession();
+    Transaction tx = session.beginTransaction();
+    try
+    {
+      session.saveOrUpdate(proc);
+      tx.commit();
+    }
+    finally
+    {
+      session.close();
+    }
+    log.debug("END saveProcess: " + proc.getKey());
+    return proc.getKey();
+  }
+
+  @Override
+  public Process loadProcess(ObjectName procID)
+  {
+    log.debug("START loadProcess: " + procID);
+    ProcessImpl procImpl = null;
+    Session session = getSessionFactory().openSession();
+    try
+    {
+      Integer id = Integer.valueOf(procID.getKeyProperty("id"));
+      procImpl = (ProcessImpl)session.load(ProcessImpl.class, id);
+      Hibernate.initialize(procImpl);
+    }
+    catch (ObjectNotFoundException ex)
+    {
+      throw new ProcessNotFoundException("Cannot find process: " + procID);
+    }
+    finally
+    {
+      session.close();
+    }
+    log.debug("END loadProcess: " + procID);
+    return (Process)procImpl;
+  }
+
+  @Override
+  public void deleteProcess(Process proc)
+  {
+    log.debug("START deleteProcess: " + proc);
+    Session session = getSessionFactory().openSession();
+    Transaction tx = session.beginTransaction();
+    try
+    {
+      session.delete(proc);
+      tx.commit();
+    }
+    finally
+    {
+      session.close();
+    }
+    log.debug("END deleteProcess: " + proc);
+  }
+
+  @SuppressWarnings("unchecked")
+  private SessionFactory getSessionFactory()
+  {
+    // If this property is not explicitly set in the beans config
+    // fall back to the -Ddatabase property that also activates
+    // the corresponding mvn profiles
+    if (hibernateConfig == null)
+    {
+      String database = System.getProperty("database", "mysql");
+      hibernateConfig = "hibernate.cfg." + database + ".xml";
+    }
+
+    if (sessionFactory == null)
+    {
+      AnnotationConfiguration anConfig = new AnnotationConfiguration();
+      
+      String serviceName = null;
+      try
+      {
+        ClassLoader ctxLoader = Thread.currentThread().getContextClassLoader();
+        Iterator<String> itAnn = annotatedClasses.iterator();
+        while (itAnn.hasNext())
+        {
+          serviceName = itAnn.next();
+          Class<Service> serviceClass = (Class<Service>)ctxLoader.loadClass(serviceName);
+          anConfig.addAnnotatedClass(serviceClass);
+        }
+      }
+      catch (Exception ex)
+      {
+        throw new IllegalStateException("Cannot load service: " + serviceName, ex);
+      }
+
+      sessionFactory = anConfig.configure(hibernateConfig).buildSessionFactory();
+    }
+    return sessionFactory;
+  }
+}


Property changes on: projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/service/HibernatePersistenceServiceImpl.java
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + LF

Added: projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/service/InMemoryPersistenceServiceImpl.java
===================================================================
--- projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/service/InMemoryPersistenceServiceImpl.java	                        (rev 0)
+++ projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/service/InMemoryPersistenceServiceImpl.java	2008-10-08 09:18:41 UTC (rev 2502)
@@ -0,0 +1,126 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jbpm.ri.service;
+
+// $Id$
+
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.management.ObjectName;
+
+import org.jbpm.api.ProcessNotFoundException;
+import org.jbpm.api.client.ProcessEngine;
+import org.jbpm.api.model.Process;
+import org.jbpm.api.model.ProcessDefinition;
+import org.jbpm.api.service.PersistenceService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * An in-memory persistence service.
+ * 
+ * @author thomas.diesler at jboss.com
+ * @since 17-Sep-2008
+ */
+public class InMemoryPersistenceServiceImpl extends PersistenceService implements MutableService
+{
+  // Provide logging
+  final Logger log = LoggerFactory.getLogger(InMemoryPersistenceServiceImpl.class);
+
+  private Map<ObjectName, ProcessDefinition> procDefs = new HashMap<ObjectName, ProcessDefinition>();
+  private Map<ObjectName, Process> procs = new HashMap<ObjectName, Process>();
+
+  @Override
+  public void setProcessEngine(ProcessEngine engine)
+  {
+    super.setProcessEngine(engine);
+  }
+  
+  @Override
+  public ObjectName saveProcessDefinition(ProcessDefinition procDef)
+  {
+    log.debug("START saveProcessDefinition: " + procDef.getKey());
+    
+    procDefs.put(procDef.getKey(), procDef);
+    
+    log.debug("END saveProcessDefinition: " + procDef.getKey());
+    return procDef.getKey();
+  }
+
+  @Override
+  public ProcessDefinition loadProcessDefinition(ObjectName procDefID)
+  {
+    log.debug("START loadProcessDefinition: " + procDefID);
+    
+    ProcessDefinition procDef = procDefs.get(procDefID);
+    if (procDef == null)
+      throw new ProcessNotFoundException("Cannot find process: " + procDefID);
+      
+    log.debug("END loadProcessDefinition: " + procDefID);
+    return procDef;
+  }
+
+  @Override
+  public void deleteProcessDefinition(ProcessDefinition procDef)
+  {
+    log.debug("START deleteProcessDefinition: " + procDef);
+    
+    procDefs.remove(procDef.getKey());
+    
+    log.debug("END deleteProcessDefinition: " + procDef);
+  }
+
+  @Override
+  public ObjectName saveProcess(Process proc)
+  {
+    log.debug("START saveProcess: " + proc.getKey());
+    
+    procs.put(proc.getKey(), proc);
+    
+    log.debug("END saveProcess: " + proc.getKey());
+    return proc.getKey();
+  }
+
+  @Override
+  public Process loadProcess(ObjectName procID)
+  {
+    log.debug("START loadProcess: " + procID);
+    
+    Process proc = procs.get(procID);
+    if (proc == null)
+      throw new ProcessNotFoundException("Cannot find process: " + procID);
+    
+    log.debug("END loadProcess: " + procID);
+    return proc;
+  }
+
+  @Override
+  public void deleteProcess(Process proc)
+  {
+    log.debug("START deleteProcess: " + proc);
+    
+    procs.remove(proc.getKey());
+    
+    log.debug("END deleteProcess: " + proc);
+  }
+}


Property changes on: projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/service/InMemoryPersistenceServiceImpl.java
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + LF

Modified: projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/service/MessageBuilderServiceImpl.java
===================================================================
--- projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/service/MessageBuilderServiceImpl.java	2008-10-07 15:00:18 UTC (rev 2501)
+++ projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/service/MessageBuilderServiceImpl.java	2008-10-08 09:18:41 UTC (rev 2502)
@@ -26,7 +26,7 @@
 import org.jbpm.api.client.ProcessEngine;
 import org.jbpm.api.model.Message;
 import org.jbpm.api.model.builder.MessageBuilder;
-import org.jbpm.api.model.builder.MessageBuilderService;
+import org.jbpm.api.service.MessageBuilderService;
 import org.jbpm.ri.model.builder.MessageBuilderImpl;
 
 /**

Modified: projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/service/ProcessBuilderServiceImpl.java
===================================================================
--- projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/service/ProcessBuilderServiceImpl.java	2008-10-07 15:00:18 UTC (rev 2501)
+++ projects/spec/trunk/modules/impl/src/main/java/org/jbpm/ri/service/ProcessBuilderServiceImpl.java	2008-10-08 09:18:41 UTC (rev 2502)
@@ -26,7 +26,7 @@
 import org.jbpm.api.client.ProcessEngine;
 import org.jbpm.api.model.Process;
 import org.jbpm.api.model.builder.ProcessBuilder;
-import org.jbpm.api.model.builder.ProcessBuilderService;
+import org.jbpm.api.service.ProcessBuilderService;
 import org.jbpm.ri.model.builder.ProcessBuilderImpl;
 
 /**

Modified: projects/spec/trunk/modules/impl/src/main/resources/jbpm-cfg-beans.xml
===================================================================
--- projects/spec/trunk/modules/impl/src/main/resources/jbpm-cfg-beans.xml	2008-10-07 15:00:18 UTC (rev 2501)
+++ projects/spec/trunk/modules/impl/src/main/resources/jbpm-cfg-beans.xml	2008-10-08 09:18:41 UTC (rev 2502)
@@ -21,6 +21,8 @@
     </bean>
 
     <!-- The PersistenceService -->
+    <bean name="jBPMPersistenceService" class="org.jbpm.ri.service.InMemoryPersistenceServiceImpl"/>
+    <!-- 
     <bean name="jBPMPersistenceService" class="org.jbpm.ri.service.PersistenceServiceImpl">
       <property name="annotatedClasses">
         <set elementClass="java.lang.String">
@@ -44,9 +46,11 @@
           <value>org.jbpm.ri.model.StartEventImpl</value>
           <value>org.jbpm.ri.model.StructureDelegateImpl</value>
           <value>org.jbpm.ri.model.TaskImpl</value>
+          <value>org.jbpm.ri.model.UserTaskImpl</value>
         </set>
       </property>
     </bean>
+    -->
 
     <!-- Other Services -->
     <bean name="jBPMExecutionService" class="org.jbpm.ri.service.ExecutionServiceImpl" />




More information about the jbpm-commits mailing list