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

do-not-reply at jboss.org do-not-reply at jboss.org
Fri Oct 10 02:56:39 EDT 2008


Author: thomas.diesler at jboss.com
Date: 2008-10-10 02:56:39 -0400 (Fri, 10 Oct 2008)
New Revision: 2516

Added:
   projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/model/builder/SignalBuilder.java
   projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/service/SignalBuilderService.java
   projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/service/persistence/ProcessDefinitionPersistenceTest.java
   projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/PropertySupportImpl.java
   projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/SignalImpl.java
   projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/builder/SignalBuilderImpl.java
   projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/service/SignalBuilderServiceImpl.java
   projects/spec/trunk/modules/ri/src/test/java/org/
   projects/spec/trunk/modules/ri/src/test/java/org/jbpm/
   projects/spec/trunk/modules/ri/src/test/java/org/jbpm/test/
   projects/spec/trunk/modules/ri/src/test/java/org/jbpm/test/ri/
   projects/spec/trunk/modules/ri/src/test/java/org/jbpm/test/ri/service/
   projects/spec/trunk/modules/ri/src/test/java/org/jbpm/test/ri/service/persistence/
   projects/spec/trunk/modules/ri/src/test/java/org/jbpm/test/ri/service/persistence/TaskPersistenceTest.java
Removed:
   projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/service/persistence/NodePersistenceTest.java
   projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/service/persistence/ProcesDefinitionPersistenceTest.java
   projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/StructureDelegateImpl.java
Modified:
   projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/model/ProcessDefinition.java
   projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/model/Signal.java
   projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/model/Task.java
   projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/model/internal/PropertySupport.java
   projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/service/PersistenceService.java
   projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/test/CTSTestCase.java
   projects/spec/trunk/modules/cts/pom.xml
   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/ProcessDefinitionServiceTest.java
   projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/service/signal/SignalMultithreadTest.java
   projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/service/signal/SignalServiceTest.java
   projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/startevent/StartEventSignalTest.java
   projects/spec/trunk/modules/ri/pom.xml
   projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/AbstractElementImpl.java
   projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/AssignmentImpl.java
   projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/EndEventImpl.java
   projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/EventImpl.java
   projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/ExpressionImpl.java
   projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/GatewayImpl.java
   projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/InputSetImpl.java
   projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/MessageImpl.java
   projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/NodeImpl.java
   projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/OutputSetImpl.java
   projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/ParticipantImpl.java
   projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/ProcessDefinitionImpl.java
   projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/ProcessImpl.java
   projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/ProcessStructureImpl.java
   projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/PropertyImpl.java
   projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/ReceiveTaskImpl.java
   projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/SendTaskImpl.java
   projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/SequenceFlowImpl.java
   projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/StartEventImpl.java
   projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/TaskImpl.java
   projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/UserTaskImpl.java
   projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/builder/EventBuilderImpl.java
   projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/builder/ProcessBuilderImpl.java
   projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/runtime/DelegatingExecutionContext.java
   projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/runtime/RuntimeProcess.java
   projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/service/ExecutionServiceImpl.java
   projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/service/HibernatePersistenceServiceImpl.java
   projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/service/InMemoryPersistenceServiceImpl.java
   projects/spec/trunk/modules/ri/src/main/resources/jbpm-cfg-beans.xml
   projects/spec/trunk/modules/ri/src/test/resources/log4j.xml
   projects/spec/trunk/pom.xml
Log:
More on persistence handling

Modified: projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/model/ProcessDefinition.java
===================================================================
--- projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/model/ProcessDefinition.java	2008-10-09 19:52:07 UTC (rev 2515)
+++ projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/model/ProcessDefinition.java	2008-10-10 06:56:39 UTC (rev 2516)
@@ -21,10 +21,10 @@
  */
 package org.jbpm.api.model;
 
+//$Id$
+
 import org.jbpm.api.model.internal.ProcessStructure;
 
-//$Id$
-
 /**
  * A ProcessDefinition defines the structure of an activity performed within a company or organization.
  * 

Modified: projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/model/Signal.java
===================================================================
--- projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/model/Signal.java	2008-10-09 19:52:07 UTC (rev 2515)
+++ projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/model/Signal.java	2008-10-10 06:56:39 UTC (rev 2516)
@@ -21,26 +21,25 @@
  */
 package org.jbpm.api.model;
 
+//$Id$
+
 import java.io.Serializable;
 
 import javax.management.ObjectName;
 
-// $Id$
-
 /**
- * A Signal thrown by the ProcessEngine
- * 
+ * A Signal is like an undirected flare shot up
+ * into the air.
+ *  
  * @author Thomas.Diesler at jboss.com
  * @since 08-Jul-2008
  */
-public final class Signal implements Serializable
+public interface Signal extends Serializable
 {
-  private static final long serialVersionUID = 1L;
-
   /**
    * Defines the types of supported Signals
    */
-  public enum SignalType
+  enum SignalType
   {
     SYSTEM_START_EVENT_ENTER, SYSTEM_START_EVENT_EXIT, SYSTEM_START_TRIGGER,
     SYSTEM_EVENT_ENTER, SYSTEM_EVENT_EXIT, SYSTEM_EVENT_TRIGGER,
@@ -51,55 +50,18 @@
     USER_SIGNAL
   }
 
-  private SignalType type;
-  private String message;
-  private ObjectName fromRef;
-
-  /** 
-   * Create the signal for a given source and type 
+  /**
+   * Get the signal type of this signal
    */
-  public Signal(ObjectName fromRef, SignalType type)
-  {
-    this.fromRef = fromRef;
-    this.type = type;
-    if (fromRef == null)
-      throw new IllegalArgumentException("Signal fromRef cannot be null");
-    if (type == null)
-      throw new IllegalArgumentException("SignalType cannot be null");
-  }
+  SignalType getSignalType();
 
-  /** 
-   * Create the signal for a given source, type and message 
+  /**
+   * Get the sending participant for this signal
    */
-  public Signal(ObjectName fromRef, SignalType type, String message)
-  {
-    this(fromRef, type);
-    this.message = message;
-  }
+  ObjectName getFromRef();
 
-  public ObjectName getFromRef()
-  {
-    return fromRef;
-  }
-
-  public SignalType getSignalType()
-  {
-    return type;
-  }
-
-  public String getMessage()
-  {
-    return message;
-  }
-
-  public String toString()
-  {
-    StringBuilder string = new StringBuilder(type + "[" + fromRef);
-    if (message != null)
-    {
-      string.append(":" + message);
-    }
-    string.append("]");
-    return string.toString();
-  }
+  /**
+   * Get the optional message associated with this signal
+   */
+  public String getMessage();
 }
\ No newline at end of file

Modified: projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/model/Task.java
===================================================================
--- projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/model/Task.java	2008-10-09 19:52:07 UTC (rev 2515)
+++ projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/model/Task.java	2008-10-10 06:56:39 UTC (rev 2516)
@@ -57,6 +57,11 @@
   TaskType getTaskType();
   
   /**
+   * Get the incomming SequenceFlow
+   */
+  SequenceFlow getInFlow();
+  
+  /**
    * Get the outgoing SequenceFlow
    */
   SequenceFlow getOutFlow();

Added: projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/model/builder/SignalBuilder.java
===================================================================
--- projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/model/builder/SignalBuilder.java	                        (rev 0)
+++ projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/model/builder/SignalBuilder.java	2008-10-10 06:56:39 UTC (rev 2516)
@@ -0,0 +1,44 @@
+/*
+ * 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 javax.management.ObjectName;
+
+import org.jbpm.api.model.Signal;
+import org.jbpm.api.model.Signal.SignalType;
+
+
+/**
+ * A SignalBuilder can be used to build a {@link Signal} dynamically.
+ * 
+ * @author thomas.diesler at jboss.com
+ * @since 08-Jul-2008
+ */
+public interface SignalBuilder
+{
+  /**
+   * Create a Signal
+   */
+  Signal newSignal(SignalType signalType, ObjectName fromRef, String message);
+}
\ No newline at end of file


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

Modified: projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/model/internal/PropertySupport.java
===================================================================
--- projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/model/internal/PropertySupport.java	2008-10-09 19:52:07 UTC (rev 2515)
+++ projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/model/internal/PropertySupport.java	2008-10-10 06:56:39 UTC (rev 2516)
@@ -47,13 +47,18 @@
   void addProperty(Property prop);
 
   /**
+   * Add a property 
+   */
+  void addProperty(String name, Object value);
+  
+  /**
    * Remove a property 
    */
-  boolean removeProperty(String name);
+  Property removeProperty(String name);
 
   /**
    * Get the set of property names
    */
   Set<String> getPropertyNames();
-  
+
 }
\ No newline at end of file

Modified: projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/service/PersistenceService.java
===================================================================
--- projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/service/PersistenceService.java	2008-10-09 19:52:07 UTC (rev 2515)
+++ projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/service/PersistenceService.java	2008-10-10 06:56:39 UTC (rev 2516)
@@ -91,5 +91,5 @@
   /**
    * Load the Node from persistent storage
    */
-  public abstract Node loadNode(Session session, ObjectName nodeID);
+  public abstract <T extends Node> T loadNode(Session session, Class<T> clazz, ObjectName nodeID);
 }
\ No newline at end of file

Added: projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/service/SignalBuilderService.java
===================================================================
--- projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/service/SignalBuilderService.java	                        (rev 0)
+++ projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/service/SignalBuilderService.java	2008-10-10 06:56:39 UTC (rev 2516)
@@ -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.Signal;
+import org.jbpm.api.model.builder.SignalBuilder;
+
+/**
+ * The SignalBuilder can be used to build a {@link Signal} dynamically.
+ * 
+ * @author thomas.diesler at jboss.com
+ * @since 08-Jul-2008
+ */
+public abstract class SignalBuilderService extends AbstractService
+{
+  /**
+   * Locate the default SignalBuilder
+   */
+  public static SignalBuilder locateSignalBuilder()
+  {
+    ProcessEngine engine = ProcessEngine.getProcessEngine();
+    SignalBuilderService builderService = engine.getService(SignalBuilderService.class);
+    return builderService.getSignalBuilder();
+  }
+  
+  /**
+   * Get the SignalBuilder
+   */
+  public abstract SignalBuilder getSignalBuilder();
+}
\ No newline at end of file


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

Modified: projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/test/CTSTestCase.java
===================================================================
--- projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/test/CTSTestCase.java	2008-10-09 19:52:07 UTC (rev 2515)
+++ projects/spec/trunk/modules/api/src/main/java/org/jbpm/api/test/CTSTestCase.java	2008-10-10 06:56:39 UTC (rev 2516)
@@ -40,9 +40,12 @@
 import org.jbpm.api.model.Message;
 import org.jbpm.api.model.ProcessDefinition;
 import org.jbpm.api.model.Signal;
+import org.jbpm.api.model.Signal.SignalType;
 import org.jbpm.api.model.builder.ObjectNameFactory;
+import org.jbpm.api.model.builder.SignalBuilder;
 import org.jbpm.api.service.MessageService;
 import org.jbpm.api.service.ProcessDefinitionService;
+import org.jbpm.api.service.SignalBuilderService;
 import org.jbpm.api.service.SignalService;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -202,6 +205,12 @@
     }
   }
   
+  protected Signal newSignal(ObjectName fromRef, SignalType signalType, String message)
+  {
+    SignalBuilder sigBuilder = getProcessEngine().getService(SignalBuilderService.class).getSignalBuilder();
+    return sigBuilder.newSignal(signalType, fromRef, message);
+  }
+
   public List<Signal> getSignals(Signal.SignalType type)
   {
     synchronized (signals)

Modified: projects/spec/trunk/modules/cts/pom.xml
===================================================================
--- projects/spec/trunk/modules/cts/pom.xml	2008-10-09 19:52:07 UTC (rev 2515)
+++ projects/spec/trunk/modules/cts/pom.xml	2008-10-10 06:56:39 UTC (rev 2516)
@@ -28,7 +28,6 @@
 
   <!-- Properties -->
   <properties>
-    <mysql.connector.version>5.1.6</mysql.connector.version>
   </properties>
 
   <!-- Dependencies -->
@@ -38,31 +37,25 @@
       <artifactId>jbpm-spec-api</artifactId>
       <version>${version}</version>
     </dependency>
+    
+    <!-- Test Dependencies -->
     <dependency>
       <groupId>junit</groupId>
       <artifactId>junit</artifactId>
+      <scope>test</scope>
     </dependency>
     <dependency>
       <groupId>log4j</groupId>
       <artifactId>log4j</artifactId>
+      <scope>test</scope>
     </dependency>
     <dependency>
       <groupId>org.slf4j</groupId>
       <artifactId>slf4j-log4j12</artifactId>
+      <scope>test</scope>
     </dependency>
   </dependencies>
 
-  <!-- DependencyManagement -->
-  <dependencyManagement>
-    <dependencies>
-      <dependency>
-        <groupId>mysql</groupId>
-        <artifactId>mysql-connector-java</artifactId>
-        <version>${mysql.connector.version}</version>
-      </dependency>
-    </dependencies>
-  </dependencyManagement>
-
   <!-- Plugins -->
   <build>
     <plugins>
@@ -99,29 +92,6 @@
       </dependencies>
     </profile>
 
-    <!-- 
-      Name:  no-database
-      Descr: Setup the default database   
-    -->
-    <profile>
-      <id>no-database</id>
-      <activation>
-        <property>
-          <name>!database</name>
-        </property>
-      </activation>
-      <properties>
-        <database>mysql</database>
-      </properties>
-      <dependencies>
-        <dependency>
-          <groupId>mysql</groupId>
-          <artifactId>mysql-connector-java</artifactId>
-          <scope>test</scope>
-        </dependency>
-      </dependencies>
-    </profile>
-
   </profiles>
 
 </project>

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-09 19:52:07 UTC (rev 2515)
+++ projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/process/ProcessPropertyTest.java	2008-10-10 06:56:39 UTC (rev 2516)
@@ -72,7 +72,8 @@
     ProcessBuilder procBuilder = ProcessBuilderService.locateProcessBuilder();
     procBuilder.addProcess("ProcessProperties").addStartEvent("Start").addSequenceFlow("TaskA");
     procBuilder.addProcessAssignment(AssignTime.Start, ExpressionLanguage.MVEL, "ProcessProperties_foo", "propValue");
-    procBuilder.addProcessProperty("foo", "bar").addTask("TaskA").addSequenceFlow("End");
+    procBuilder.addProcessProperty("foo", "bar");
+    procBuilder.addTask("TaskA").addSequenceFlow("End");
     procBuilder.addEndEvent("End", EventDetailType.Message).addMessageRef("EndMessage");
     MessageBuilder msgBuilder = procBuilder.addProcessMessage("EndMessage");
     msgBuilder.addToRef(getTestID()).addProperty("propValue", null, true);

Deleted: projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/service/persistence/NodePersistenceTest.java
===================================================================
--- projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/service/persistence/NodePersistenceTest.java	2008-10-09 19:52:07 UTC (rev 2515)
+++ projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/service/persistence/NodePersistenceTest.java	2008-10-10 06:56:39 UTC (rev 2516)
@@ -1,73 +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.test.cts.service.persistence;
-
-// $Id$
-
-import javax.management.ObjectName;
-
-import org.hibernate.Session;
-import org.jbpm.api.model.Node;
-import org.jbpm.api.model.Process;
-import org.jbpm.api.model.ProcessDefinition;
-import org.jbpm.api.model.Task;
-import org.jbpm.api.service.PersistenceService;
-import org.jbpm.api.service.ProcessDefinitionService;
-import org.jbpm.api.service.ProcessService;
-import org.jbpm.api.test.CTSTestCase;
-import org.jbpm.test.cts.service.process.ProcessCatalog;
-
-/**
- * Test the PersistenceService for Nodes
- * 
- * @author thomas.diesler at jboss.com
- * @since 08-Jul-2008
- */
-public class NodePersistenceTest extends CTSTestCase
-{
-  /**
-   * Test save, load of a Node
-   */
-  public void testNode() throws Exception
-  {
-    ProcessService procService = ProcessService.locateProcessService();
-    PersistenceService service = PersistenceService.locatePersistenceService();
-    
-    // Register (save) the process, which is not done implicitly
-    ProcessDefinition procDef = unregisterOnTearDown(ProcessCatalog.getDefaultProcess());
-    Process proc = procDef.newInstance();
-    procService.registerProcess(proc);
-    
-    ObjectName taskID = proc.getNode(Task.class, "Task").getKey();
-    
-    Session session = service.createSession();
-    try
-    {
-      Node task = service.loadNode(session, taskID);
-      assertNotNull("Node not null", task);
-    }
-    finally
-    {
-      session.close();
-    }
-  }
-}

Deleted: projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/service/persistence/ProcesDefinitionPersistenceTest.java
===================================================================
--- projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/service/persistence/ProcesDefinitionPersistenceTest.java	2008-10-09 19:52:07 UTC (rev 2515)
+++ projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/service/persistence/ProcesDefinitionPersistenceTest.java	2008-10-10 06:56:39 UTC (rev 2516)
@@ -1,81 +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.test.cts.service.persistence;
-
-// $Id: PersistenceServiceTest.java 2419 2008-09-29 07:22:59Z thomas.diesler at jboss.com $
-
-import javax.management.ObjectName;
-
-import org.jbpm.api.ProcessNotFoundException;
-import org.jbpm.api.model.EndEvent;
-import org.jbpm.api.model.ProcessDefinition;
-import org.jbpm.api.model.StartEvent;
-import org.jbpm.api.model.Task;
-import org.jbpm.api.service.PersistenceService;
-import org.jbpm.api.test.CTSTestCase;
-import org.jbpm.test.cts.service.process.ProcessCatalog;
-
-/**
- * Test the PersistenceService
- * 
- * @author thomas.diesler at jboss.com
- * @since 08-Jul-2008
- */
-public class ProcesDefinitionPersistenceTest extends CTSTestCase
-{
-  /**
-   * Test save, load, delete of a trivial ProcessDefinition
-   */
-  public void testProcessDefinition() throws Exception
-  {
-    PersistenceService service = PersistenceService.locatePersistenceService();
-
-    // Save the ProcessDefinition
-    ProcessDefinition procDef = ProcessCatalog.getDefaultProcess();
-    service.saveProcessDefinition(procDef);
-
-    // Load the ProcessDefinition
-    ObjectName procDefID = procDef.getKey();
-    ProcessDefinition loadDef = service.loadProcessDefinition(procDefID);
-    ProcessCatalog.validateDefaultProcess(loadDef);
-
-    StartEvent start = loadDef.getNode(StartEvent.class, "Start");
-    Task task = loadDef.getNode(Task.class, "Task");
-    EndEvent end = loadDef.getNode(EndEvent.class, "End");
-    
-    assertSame(loadDef, start.getProcessDefinition());
-    assertSame(loadDef, task.getProcessDefinition());
-    assertSame(loadDef, end.getProcessDefinition());
-
-    // Delete the ProcessDefinition
-    service.deleteProcessDefinition(procDef);
-    try
-    {
-      service.loadProcessDefinition(procDefID);
-      fail("ProcessNotFoundException expected");
-    }
-    catch (ProcessNotFoundException ex)
-    {
-      // expected
-    }
-  }
-}

Copied: projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/service/persistence/ProcessDefinitionPersistenceTest.java (from rev 2513, projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/service/persistence/ProcesDefinitionPersistenceTest.java)
===================================================================
--- projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/service/persistence/ProcessDefinitionPersistenceTest.java	                        (rev 0)
+++ projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/service/persistence/ProcessDefinitionPersistenceTest.java	2008-10-10 06:56:39 UTC (rev 2516)
@@ -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.test.cts.service.persistence;
+
+// $Id: PersistenceServiceTest.java 2419 2008-09-29 07:22:59Z thomas.diesler at jboss.com $
+
+import javax.management.ObjectName;
+
+import org.jbpm.api.ProcessNotFoundException;
+import org.jbpm.api.model.EndEvent;
+import org.jbpm.api.model.ProcessDefinition;
+import org.jbpm.api.model.StartEvent;
+import org.jbpm.api.model.Task;
+import org.jbpm.api.service.PersistenceService;
+import org.jbpm.api.test.CTSTestCase;
+import org.jbpm.test.cts.service.process.ProcessCatalog;
+
+/**
+ * Test the PersistenceService
+ * 
+ * @author thomas.diesler at jboss.com
+ * @since 08-Jul-2008
+ */
+public class ProcessDefinitionPersistenceTest extends CTSTestCase
+{
+  /**
+   * Test save, load, delete of a trivial ProcessDefinition
+   */
+  public void testProcessDefinition() throws Exception
+  {
+    PersistenceService service = PersistenceService.locatePersistenceService();
+
+    // Save the ProcessDefinition
+    ProcessDefinition procDef = ProcessCatalog.getDefaultProcess();
+    service.saveProcessDefinition(procDef);
+
+    // Load the ProcessDefinition
+    ObjectName procDefID = procDef.getKey();
+    ProcessDefinition loadDef = service.loadProcessDefinition(procDefID);
+    ProcessCatalog.validateDefaultProcess(loadDef);
+
+    StartEvent start = loadDef.getNode(StartEvent.class, "Start");
+    Task task = loadDef.getNode(Task.class, "Task");
+    EndEvent end = loadDef.getNode(EndEvent.class, "End");
+    
+    assertSame(loadDef, start.getProcessDefinition());
+    assertSame(loadDef, task.getProcessDefinition());
+    assertSame(loadDef, end.getProcessDefinition());
+
+    // Delete the ProcessDefinition
+    service.deleteProcessDefinition(procDef);
+    try
+    {
+      service.loadProcessDefinition(procDefID);
+      fail("ProcessNotFoundException expected");
+    }
+    catch (ProcessNotFoundException ex)
+    {
+      // expected
+    }
+  }
+}

Modified: projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/service/process/ProcessDefinitionServiceTest.java
===================================================================
--- projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/service/process/ProcessDefinitionServiceTest.java	2008-10-09 19:52:07 UTC (rev 2515)
+++ projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/service/process/ProcessDefinitionServiceTest.java	2008-10-10 06:56:39 UTC (rev 2516)
@@ -48,17 +48,41 @@
     ProcessCatalog.validateDefaultProcess(procDef);
 
     ProcessEngine engine = procDef.getProcessEngine();
-    assertNotNull("Process engine not null", engine);
+    assertNotNull("ProcessEngine not null", engine);
 
     ProcessDefinitionService procDefService = engine.getService(ProcessDefinitionService.class);
-    ProcessService procService = engine.getService(ProcessService.class);
+    assertNotNull("ProcessDefinitionService not null", procDefService);
 
     Set<ObjectName> procDefs = procDefService.getProcessDefinitions();
     assertEquals("ProcessDefinition not automatically registered", 0, procDefs.size());
+  }
 
+  public void testNewInstance() throws Exception
+  {
+    ProcessDefinition procDef = ProcessCatalog.getDefaultProcess();
+
+    ProcessEngine engine = procDef.getProcessEngine();
+    ProcessDefinitionService procDefService = engine.getService(ProcessDefinitionService.class);
+    ProcessService procService = engine.getService(ProcessService.class);
+
     Process proc = procDef.newInstance();
     assertNotNull("Process not null", proc);
     assertNull("Process not automatically registered", procService.getProcess(proc.getKey()));
     assertNull("ProcessDefinition not automatically registered", procDefService.getProcessDefinition(procDef.getKey()));
   }
+
+  public void testRegister() throws Exception
+  {
+    ProcessDefinition procDef = ProcessCatalog.getDefaultProcess();
+
+    ProcessEngine engine = procDef.getProcessEngine();
+    ProcessDefinitionService procDefService = engine.getService(ProcessDefinitionService.class);
+    
+    ObjectName procDefID = procDefService.registerProcessDefinition(procDef);
+    assertSame(procDef, procDefService.getProcessDefinition(procDefID));
+    assertEquals(procDefID, procDef.getKey());
+    
+    boolean success = procDefService.unregisterProcessDefinition(procDef.getKey());
+    assertTrue("ProcessDefinition unregistered", success);
+  }
 }

Modified: projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/service/signal/SignalMultithreadTest.java
===================================================================
--- projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/service/signal/SignalMultithreadTest.java	2008-10-09 19:52:07 UTC (rev 2515)
+++ projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/service/signal/SignalMultithreadTest.java	2008-10-10 06:56:39 UTC (rev 2516)
@@ -38,8 +38,8 @@
 public class SignalMultithreadTest extends CTSTestCase
 {
   final SignalService sigService = SignalService.locateSignalService();
-  final Signal sigA = new Signal(getTestID(), SignalType.USER_SIGNAL, "A");
-  final Signal sigB = new Signal(getTestID(), SignalType.USER_SIGNAL, "B");
+  final Signal sigA = newSignal(getTestID(), SignalType.USER_SIGNAL, "A");
+  final Signal sigB = newSignal(getTestID(), SignalType.USER_SIGNAL, "B");
 
   private Signal gotA;
   private Signal gotB;

Modified: projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/service/signal/SignalServiceTest.java
===================================================================
--- projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/service/signal/SignalServiceTest.java	2008-10-09 19:52:07 UTC (rev 2515)
+++ projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/service/signal/SignalServiceTest.java	2008-10-10 06:56:39 UTC (rev 2516)
@@ -44,7 +44,7 @@
   public void testSignalListener() throws Exception
   {
     SignalService sigService = SignalService.locateSignalService();
-    Signal signal = new Signal(getTestID(), SignalType.USER_SIGNAL, "HelloWorld");
+    Signal signal = newSignal(getTestID(), SignalType.USER_SIGNAL, "HelloWorld");
     sigService.throwSignal(signal);
     
     List<Signal> signals = getSignals();

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-09 19:52:07 UTC (rev 2515)
+++ projects/spec/trunk/modules/cts/src/test/java/org/jbpm/test/cts/startevent/StartEventSignalTest.java	2008-10-10 06:56:39 UTC (rev 2516)
@@ -76,7 +76,7 @@
 
     // Send start trigger signal
     SignalService sigService = SignalService.locateSignalService();
-    sigService.throwSignal(new Signal(getTestID(), SignalType.SYSTEM_START_TRIGGER, "A"));
+    sigService.throwSignal(newSignal(getTestID(), SignalType.SYSTEM_START_TRIGGER, "A"));
 
     // Get the just started process 
     ProcessService procService = ProcessService.locateProcessService();

Modified: projects/spec/trunk/modules/ri/pom.xml
===================================================================
--- projects/spec/trunk/modules/ri/pom.xml	2008-10-09 19:52:07 UTC (rev 2515)
+++ projects/spec/trunk/modules/ri/pom.xml	2008-10-10 06:56:39 UTC (rev 2516)
@@ -85,6 +85,23 @@
       <groupId>org.mvel</groupId>
       <artifactId>mvel</artifactId>
     </dependency>
+    
+    <!-- Test Dependencies -->
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>log4j</groupId>
+      <artifactId>log4j</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.slf4j</groupId>
+      <artifactId>slf4j-log4j12</artifactId>
+      <scope>test</scope>
+    </dependency>
   </dependencies>
 
   <!-- Profiles -->

Modified: projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/AbstractElementImpl.java
===================================================================
--- projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/AbstractElementImpl.java	2008-10-09 19:52:07 UTC (rev 2515)
+++ projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/AbstractElementImpl.java	2008-10-10 06:56:39 UTC (rev 2516)
@@ -28,7 +28,6 @@
 import javax.persistence.GeneratedValue;
 import javax.persistence.Id;
 import javax.persistence.MappedSuperclass;
-import javax.persistence.Transient;
 
 import org.jbpm.api.InvalidProcessException;
 import org.jbpm.api.client.ProcessEngine;
@@ -77,7 +76,6 @@
   public abstract ObjectName getKey();
 
   @Override
-  @Transient
   public ProcessEngine getProcessEngine()
   {
     return ProcessEngine.getProcessEngine(engineName);

Modified: projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/AssignmentImpl.java
===================================================================
--- projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/AssignmentImpl.java	2008-10-09 19:52:07 UTC (rev 2515)
+++ projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/AssignmentImpl.java	2008-10-10 06:56:39 UTC (rev 2516)
@@ -23,10 +23,13 @@
 
 //$Id$
 
+import javax.persistence.Basic;
 import javax.persistence.Embedded;
 import javax.persistence.Entity;
 import javax.persistence.EnumType;
 import javax.persistence.Enumerated;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
 
 import org.jbpm.api.model.Assignment;
 import org.jbpm.api.model.Expression;
@@ -43,13 +46,21 @@
 {
   private static final long serialVersionUID = 1L;
   
+  @Id @GeneratedValue
+  protected Integer id;
+  
   @Enumerated(EnumType.STRING)
   private AssignTime assignTime;
+  
   @Embedded
   private ExpressionImpl from;
+  
   @Embedded
   private PropertyImpl to;
 
+  @Basic
+  private int assignIndex;
+  
   public AssignmentImpl(AssignTime assignTime, ExpressionImpl from, PropertyImpl to)
   {
     this.assignTime = assignTime;
@@ -57,16 +68,34 @@
     this.to = to;
   }
 
+  // Persistence ctor
+  protected AssignmentImpl()
+  {
+  }
+
+  int getAssignIndex()
+  {
+    return assignIndex;
+  }
+
+  void setAssignIndex(int assignIndex)
+  {
+    this.assignIndex = assignIndex;
+  }
+
+  @Override
   public AssignTime getAssignTime()
   {
     return assignTime;
   }
 
+  @Override
   public Expression getFrom()
   {
     return from;
   }
 
+  @Override
   public Property getTo()
   {
     return to;

Modified: projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/EndEventImpl.java
===================================================================
--- projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/EndEventImpl.java	2008-10-09 19:52:07 UTC (rev 2515)
+++ projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/EndEventImpl.java	2008-10-10 06:56:39 UTC (rev 2516)
@@ -25,7 +25,6 @@
 
 import javax.management.ObjectName;
 import javax.persistence.Entity;
-import javax.persistence.Transient;
 
 import org.jbpm.api.Constants;
 import org.jbpm.api.InvalidProcessException;
@@ -86,7 +85,6 @@
   }
 
   @Override
-  @Transient
   public ObjectName getKey()
   {
     StringBuilder str = new StringBuilder(Constants.ID_DOMAIN + ":");
@@ -95,7 +93,7 @@
     return oname;
   }
 
-  @Transient
+  @Override
   public SequenceFlow getInFlow()
   {
     if (inFlows.size() != 1)
@@ -103,9 +101,11 @@
     return inFlows.get(0);
   }
 
+  @Override
   public void setInFlow(SequenceFlowImpl inFlow)
   {
-    inFlow.setSourceIndex(inFlows.size());
+    inFlow.setTargetIndex(inFlows.size());
+    inFlow.setTargetRef(this);
     inFlows.add(inFlow);
   }
 
@@ -121,13 +121,13 @@
       SignalService sigService = engine.getService(SignalService.class);
       public void throwEnterSignal(Token token)
       {
-        Signal signal = new Signal(getKey(), Signal.SignalType.SYSTEM_END_EVENT_ENTER);
+        Signal signal = new SignalImpl(Signal.SignalType.SYSTEM_END_EVENT_ENTER, getKey());
         sigService.throwSignal(signal);
       }
 
       public void throwExitSignal(Token token)
       {
-        Signal signal = new Signal(getKey(), Signal.SignalType.SYSTEM_END_EVENT_EXIT);
+        Signal signal = new SignalImpl(Signal.SignalType.SYSTEM_END_EVENT_EXIT, getKey());
         sigService.throwSignal(signal);
         
         // Destroy the token

Modified: projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/EventImpl.java
===================================================================
--- projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/EventImpl.java	2008-10-09 19:52:07 UTC (rev 2515)
+++ projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/EventImpl.java	2008-10-10 06:56:39 UTC (rev 2516)
@@ -24,10 +24,12 @@
 //$Id$
 
 import javax.management.ObjectName;
+import javax.persistence.CascadeType;
 import javax.persistence.EnumType;
 import javax.persistence.Enumerated;
+import javax.persistence.FetchType;
 import javax.persistence.MappedSuperclass;
-import javax.persistence.Transient;
+import javax.persistence.OneToOne;
 
 import org.jbpm.api.Constants;
 import org.jbpm.api.InvalidProcessException;
@@ -64,11 +66,12 @@
   @Enumerated(EnumType.STRING)
   protected EventDetailType detailType = EventDetailType.None;
 
-  @Transient
-  private MessageImpl messageRef;
-  @Transient
+  @OneToOne(cascade = { CascadeType.ALL }, fetch = FetchType.EAGER, targetEntity = MessageImpl.class)
+  private Message messageRef;
+
+  @OneToOne(cascade = { CascadeType.ALL }, fetch = FetchType.EAGER, targetEntity = SignalImpl.class)
   private Signal signalRef;
-  
+
   public EventImpl(ProcessStructure procStruct, String name)
   {
     super(procStruct, name);
@@ -122,7 +125,7 @@
   {
     this.signalRef = signalRef;
   }
-  
+
   @Override
   protected ExecutionHandler getDefaultExecutionHandler()
   {
@@ -133,7 +136,7 @@
 
       public void execute(Token token)
       {
-        if (detailType == EventDetailType.Message &&  getMessageRef() != null)
+        if (detailType == EventDetailType.Message && getMessageRef() != null)
         {
           MessageSender messageSender = new MessageSender(thisNode, getMessageRef());
           messageSender.sendMessage(token);
@@ -160,18 +163,19 @@
     return new SignalHandler()
     {
       private static final long serialVersionUID = 1L;
-      
+
       ProcessEngine engine = getProcessDefinition().getProcessEngine();
       SignalService sigService = engine.getService(SignalService.class);
+
       public void throwEnterSignal(Token token)
       {
-        Signal signal = new Signal(getKey(), Signal.SignalType.SYSTEM_EVENT_ENTER);
+        Signal signal = new SignalImpl(Signal.SignalType.SYSTEM_EVENT_ENTER, getKey());
         sigService.throwSignal(signal);
       }
 
       public void throwExitSignal(Token token)
       {
-        Signal signal = new Signal(getKey(), Signal.SignalType.SYSTEM_EVENT_EXIT);
+        Signal signal = new SignalImpl(Signal.SignalType.SYSTEM_EVENT_EXIT, getKey());
         sigService.throwSignal(signal);
       }
 
@@ -192,17 +196,17 @@
   protected void create(ProcessDefinition procDef)
   {
     super.create(procDef);
-    
+
     if (detailType == EventDetailType.Signal && signalRef == null)
       throw new InvalidProcessException("Event with detail type 'Signal' must have a signalRef");
     if (detailType != EventDetailType.Signal && signalRef != null)
       throw new InvalidProcessException("Event with detail type '" + detailType + "' cannot have a signalRef");
-    
+
     if (detailType == EventDetailType.Message && messageRef == null)
       throw new InvalidProcessException("Event with detail type 'Message' must have a messageRef");
     if (detailType != EventDetailType.Message && messageRef != null)
       throw new InvalidProcessException("Event with detail type '" + detailType + "' cannot have a messageRef");
-    
+
     if (messageRef != null)
     {
       ProcessDefinitionImpl procDefImpl = (ProcessDefinitionImpl)procDef;
@@ -214,14 +218,14 @@
   protected void create(Process proc)
   {
     super.create(proc);
-    
+
     if (messageRef != null)
     {
       ProcessDefinitionImpl procDefImpl = (ProcessDefinitionImpl)proc.getProcessDefinition();
       procDefImpl.initializeMessageRef(messageRef);
     }
   }
-  
+
   public String toString()
   {
     return getEventType() + "Event[" + getName() + "," + getDetailType() + "]";

Modified: projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/ExpressionImpl.java
===================================================================
--- projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/ExpressionImpl.java	2008-10-09 19:52:07 UTC (rev 2515)
+++ projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/ExpressionImpl.java	2008-10-10 06:56:39 UTC (rev 2516)
@@ -23,29 +23,39 @@
 
 //$Id$
 
-import javax.persistence.Column;
-import javax.persistence.Embeddable;
+import javax.persistence.Basic;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
 
 import org.jbpm.api.model.Expression;
 
 /**
  * An Expression, which is used in the definition of attributes for @{link StartEvent},
+ * 
  * @{link IntermediateEvent}, @{link Activity}, @{link ComplexGateway}, and @{link SequenceFlow}
  * 
  * @author thomas.diesler at jboss.com
  * @since 08-Jul-2008
  */
- at Embeddable
+ at Entity(name = "Expression")
 public class ExpressionImpl implements Expression
 {
   // provide serial version UID
   private static final long serialVersionUID = 1L;
+
+  @Id @GeneratedValue
+  protected Integer id;
   
-  @Column(name = "exprBody")
+  @Basic
   private String body;
-  @Column(name = "exprLang")
+
+  @Basic
   private ExpressionLanguage lang;
 
+  @Basic
+  private int exprIndex;
+
   public ExpressionImpl(String body)
   {
     this.body = body;
@@ -63,11 +73,23 @@
   {
   }
 
+  int getExprIndex()
+  {
+    return exprIndex;
+  }
+
+  void setExprIndex(int exprIndex)
+  {
+    this.exprIndex = exprIndex;
+  }
+
+  @Override
   public ExpressionLanguage getExpressionLanguage()
   {
     return lang;
   }
 
+  @Override
   public String getExpressionBody()
   {
     return body;

Modified: projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/GatewayImpl.java
===================================================================
--- projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/GatewayImpl.java	2008-10-09 19:52:07 UTC (rev 2515)
+++ projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/GatewayImpl.java	2008-10-10 06:56:39 UTC (rev 2516)
@@ -97,12 +97,16 @@
   @Override
   public void addOutFlow(SequenceFlowImpl outFlow)
   {
+    outFlow.setSourceIndex(outFlows.size());
+    outFlow.setSourceRef(this);
     outFlows.add(outFlow);
   }
 
   @Override
   public void addInFlow(SequenceFlowImpl inFlow)
   {
+    inFlow.setTargetIndex(inFlows.size());
+    inFlow.setTargetRef(this);
     inFlows.add(inFlow);
   }
   
@@ -200,13 +204,13 @@
       
       public void throwEnterSignal(Token token)
       {
-        Signal signal = new Signal(getKey(), Signal.SignalType.SYSTEM_GATEWAY_ENTER);
+        Signal signal = new SignalImpl(Signal.SignalType.SYSTEM_GATEWAY_ENTER, getKey());
         sigService.throwSignal(signal);
       }
 
       public void throwExitSignal(Token token)
       {
-        Signal signal = new Signal(getKey(), Signal.SignalType.SYSTEM_GATEWAY_EXIT);
+        Signal signal = new SignalImpl(Signal.SignalType.SYSTEM_GATEWAY_EXIT, getKey());
         sigService.throwSignal(signal);
       }
       

Modified: projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/InputSetImpl.java
===================================================================
--- projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/InputSetImpl.java	2008-10-09 19:52:07 UTC (rev 2515)
+++ projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/InputSetImpl.java	2008-10-10 06:56:39 UTC (rev 2516)
@@ -23,13 +23,19 @@
 
 //$Id$
 
-import java.util.HashSet;
 import java.util.Set;
 
-import javax.persistence.Transient;
+import javax.persistence.Basic;
+import javax.persistence.CascadeType;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.OneToOne;
 
 import org.jbpm.api.model.InputSet;
 import org.jbpm.api.model.Property;
+import org.jbpm.api.model.internal.PropertySupport;
 
 
 /**
@@ -38,46 +44,59 @@
  * @author thomas.diesler at jboss.com
  * @since 08-Jul-2008
  */
+ at Entity (name = "InputSet")
 public class InputSetImpl implements InputSet
 {
   private static final long serialVersionUID = 1L;
   
-  @Transient
-  private Set<Property> properties = new HashSet<Property>();
+  @Id @GeneratedValue
+  protected Integer id;
 
+  @Basic
+  private int setIndex;
+  
+  @OneToOne(cascade = { CascadeType.ALL }, fetch = FetchType.EAGER, targetEntity = PropertySupportImpl.class)
+  protected PropertySupport propSupport = new PropertySupportImpl();
+
+  int getSetIndex()
+  {
+    return setIndex;
+  }
+
+  void setSetIndex(int setIndex)
+  {
+    this.setIndex = setIndex;
+  }
+
   @Override
   public Property getProperty(String name)
   {
-    for (Property prop : properties)
-    {
-      if (prop.getName().equals(name))
-        return prop;
-    }
-    return null;
+    return propSupport.getProperty(name);
   }
 
   @Override
   public Set<String> getPropertyNames()
   {
-    Set<String> names = new HashSet<String>();
-    for (Property prop : properties)
-    {
-      names.add(prop.getName());
-    }
-    return names;
+    return propSupport.getPropertyNames();
   }
 
   @Override
-  public boolean removeProperty(String name)
+  public void addProperty(Property prop)
   {
-    return properties.remove(name);
+    propSupport.addProperty(prop);
   }
 
   @Override
-  public void addProperty(Property prop)
+  public void addProperty(String name, Object value)
   {
-    properties.add(prop);
+    propSupport.addProperty(name, value);
   }
+
+  @Override
+  public Property removeProperty(String name)
+  {
+    return propSupport.removeProperty(name);
+  }
   
   @Override
   public String toString()

Modified: projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/MessageImpl.java
===================================================================
--- projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/MessageImpl.java	2008-10-09 19:52:07 UTC (rev 2515)
+++ projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/MessageImpl.java	2008-10-10 06:56:39 UTC (rev 2516)
@@ -23,7 +23,6 @@
 
 //$Id$
 
-import java.util.HashSet;
 import java.util.Set;
 
 import javax.persistence.Basic;
@@ -32,12 +31,12 @@
 import javax.persistence.FetchType;
 import javax.persistence.GeneratedValue;
 import javax.persistence.Id;
-import javax.persistence.ManyToOne;
-import javax.persistence.OneToMany;
+import javax.persistence.OneToOne;
 
 import org.jbpm.api.model.Message;
 import org.jbpm.api.model.Participant;
 import org.jbpm.api.model.Property;
+import org.jbpm.api.model.internal.PropertySupport;
 
 /**
  * A Message, which is used in the definition of attributes for a @{link StartEvent},
@@ -53,20 +52,19 @@
   private static final long serialVersionUID = 1L;
   
   @Id @GeneratedValue
-  @SuppressWarnings("unused")
-  private int id;
+  protected int id;
   
   @Basic
   private String name;
   
-  @ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER, targetEntity = ParticipantImpl.class)
+  @OneToOne(cascade = { CascadeType.ALL }, fetch = FetchType.EAGER, targetEntity = ParticipantImpl.class)
   private Participant fromRef;
   
-  @ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER, targetEntity = ParticipantImpl.class)
+  @OneToOne(cascade = { CascadeType.ALL }, fetch = FetchType.EAGER, targetEntity = ParticipantImpl.class)
   private Participant toRef;
   
-  @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, targetEntity = PropertyImpl.class)
-  private Set<Property> props = new HashSet<Property>();
+  @OneToOne(cascade = { CascadeType.ALL }, fetch = FetchType.EAGER, targetEntity = PropertySupportImpl.class)
+  protected PropertySupport propSupport = new PropertySupportImpl();
 
   public MessageImpl(String name)
   {
@@ -76,11 +74,11 @@
     this.name = name;
   }
 
-  public MessageImpl(String name, ParticipantImpl targetID, ParticipantImpl sourceID)
+  public MessageImpl(String name, Participant toRef, ParticipantImpl fromRef)
   {
     this(name);
-    this.toRef = targetID;
-    this.fromRef = sourceID;
+    this.toRef = toRef;
+    this.fromRef = fromRef;
   }
 
   public String getName()
@@ -91,37 +89,34 @@
   @Override
   public Property getProperty(String name)
   {
-    for (Property prop : props)
-    {
-      if (prop.getName().equals(name))
-        return prop;
-    }
-    return null;
+    return propSupport.getProperty(name);
   }
 
   @Override
   public Set<String> getPropertyNames()
   {
-    Set<String> names = new HashSet<String>();
-    for (Property prop : props)
-    {
-      names.add(prop.getName());
-    }
-    return names;
+    return propSupport.getPropertyNames();
   }
 
   @Override
   public void addProperty(Property prop)
   {
-    props.add(prop);
+    propSupport.addProperty(prop);
   }
 
   @Override
-  public boolean removeProperty(String name)
+  public void addProperty(String name, Object value)
   {
-    return props.remove(name);
+    propSupport.addProperty(name, value);
   }
 
+  @Override
+  public Property removeProperty(String name)
+  {
+    return propSupport.removeProperty(name);
+  }
+
+  @Override
   public Participant getFromRef()
   {
     return fromRef;
@@ -132,6 +127,7 @@
     this.fromRef = fromRef;
   }
 
+  @Override
   public Participant getToRef()
   {
     return toRef;

Modified: projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/NodeImpl.java
===================================================================
--- projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/NodeImpl.java	2008-10-09 19:52:07 UTC (rev 2515)
+++ projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/NodeImpl.java	2008-10-10 06:56:39 UTC (rev 2516)
@@ -25,7 +25,6 @@
 
 import java.util.ArrayList;
 import java.util.Collections;
-import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
 
@@ -37,7 +36,7 @@
 import javax.persistence.InheritanceType;
 import javax.persistence.ManyToOne;
 import javax.persistence.OneToMany;
-import javax.persistence.Transient;
+import javax.persistence.OneToOne;
 
 import org.hibernate.annotations.IndexColumn;
 import org.jbpm.api.InvalidProcessException;
@@ -51,6 +50,7 @@
 import org.jbpm.api.model.SequenceFlow;
 import org.jbpm.api.model.StartEvent;
 import org.jbpm.api.model.internal.ProcessStructure;
+import org.jbpm.api.model.internal.PropertySupport;
 import org.jbpm.api.runtime.ExecutionHandler;
 import org.jbpm.api.runtime.FlowHandler;
 import org.jbpm.api.runtime.NodeHandler;
@@ -80,7 +80,7 @@
 
   // provide logging
   final static Logger log = LoggerFactory.getLogger(NodeImpl.class);
-  
+
   @Basic
   private String name;
 
@@ -98,22 +98,23 @@
   @OneToMany(cascade = { CascadeType.ALL }, fetch = FetchType.EAGER, mappedBy = "sourceRef", targetEntity = SequenceFlowImpl.class)
   protected List<SequenceFlow> outFlows = new ArrayList<SequenceFlow>();
 
-  @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, targetEntity = PropertyImpl.class)
-  protected Set<Property> properties = new HashSet<Property>();
+  @OneToOne(cascade = { CascadeType.ALL }, fetch = FetchType.EAGER, targetEntity = PropertySupportImpl.class)
+  protected PropertySupport propSupport = new PropertySupportImpl();
 
-  @Transient
+  @IndexColumn(name = "assignIndex")
+  @OneToMany(cascade = { CascadeType.ALL }, fetch = FetchType.EAGER, targetEntity = AssignmentImpl.class)
   private List<Assignment> assignments = new ArrayList<Assignment>();
-  
+
   @Basic
   private String execHandler;
   private transient ExecutionHandler customExecHandler;
   private transient ExecutionHandler defaultExecHandler;
-  
+
   @Basic
   private String sigHandler;
   private transient SignalHandler customSignalHandler;
   private transient SignalHandler defaultSignalHandler;
-  
+
   @Basic
   private String flowHandler;
   private transient FlowHandler customFlowHandler;
@@ -157,7 +158,7 @@
   {
     this.nodeIndex = nodeIndex;
   }
-  
+
   public String getName()
   {
     return name;
@@ -167,49 +168,47 @@
   {
     this.name = name;
   }
-  
+
   @Override
   public Property getProperty(String name)
   {
-    for (Property prop : properties)
-    {
-      if (prop.getName().equals(name))
-        return prop;
-    }
-    return null;
+    return propSupport.getProperty(name);
   }
 
   @Override
   public Set<String> getPropertyNames()
   {
-    Set<String> names = new HashSet<String>();
-    for (Property prop : properties)
-    {
-      names.add(prop.getName());
-    }
-    return names;
+    return propSupport.getPropertyNames();
   }
 
   @Override
-  public boolean removeProperty(String name)
+  public void addProperty(Property prop)
   {
-    return properties.remove(name);
+    propSupport.addProperty(prop);
   }
 
   @Override
-  public void addProperty(Property prop)
+  public void addProperty(String name, Object value)
   {
-    properties.add(prop);
+    propSupport.addProperty(name, value);
   }
-  
+
+  @Override
+  public Property removeProperty(String name)
+  {
+    return propSupport.removeProperty(name);
+  }
+
+  @Override
   public List<Assignment> getAssignments()
   {
     return Collections.unmodifiableList(assignments);
   }
 
-  public void addAssignment(AssignmentImpl assignment)
+  public void addAssignment(AssignmentImpl assign)
   {
-    this.assignments.add(assignment);
+    assign.setAssignIndex(assignments.size());
+    assignments.add(assign);
   }
 
   public List<SequenceFlow> getInFlows()
@@ -230,7 +229,7 @@
     ExecutionHandler execHandler = getExecutionHandler();
     execHandler.execute(token);
   }
-  
+
   public <T extends ExecutionHandler> void setExecutionHandler(Class<T> clazz)
   {
     this.execHandler = clazz.getName();
@@ -251,10 +250,10 @@
   {
     if (customExecHandler == null && execHandler != null)
       customExecHandler = loadHandlerInstance(ExecutionHandler.class, execHandler);
-    
+
     if (defaultExecHandler == null)
       defaultExecHandler = getDefaultExecutionHandler();
-      
+
     return customExecHandler != null ? customExecHandler : defaultExecHandler;
   }
 
@@ -269,7 +268,7 @@
       {
         // nothing to do
       }
-      
+
       @Override
       public Node getNode()
       {
@@ -288,13 +287,13 @@
   {
     if (customSignalHandler == null && sigHandler != null)
       customSignalHandler = loadHandlerInstance(SignalHandler.class, sigHandler);
-    
+
     if (defaultSignalHandler == null)
       defaultSignalHandler = getDefaultSignalHandler();
-      
+
     return customSignalHandler != null ? customSignalHandler : defaultSignalHandler;
   }
-  
+
   protected abstract SignalHandler getDefaultSignalHandler();
 
   @Override
@@ -302,10 +301,10 @@
   {
     if (customFlowHandler == null && flowHandler != null)
       customFlowHandler = loadHandlerInstance(FlowHandler.class, flowHandler);
-    
+
     if (defaultFlowHandler == null)
       defaultFlowHandler = getDefaultFlowHandler();
-      
+
     return customFlowHandler != null ? customFlowHandler : defaultFlowHandler;
   }
 
@@ -432,7 +431,7 @@
     if (outFlow == null && (this instanceof EndEvent == false))
       throw new InvalidProcessException("Dead end node: " + this);
   }
-  
+
   private void initFlow(SequenceFlowImpl flow)
   {
     if (flow != null)

Modified: projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/OutputSetImpl.java
===================================================================
--- projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/OutputSetImpl.java	2008-10-09 19:52:07 UTC (rev 2515)
+++ projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/OutputSetImpl.java	2008-10-10 06:56:39 UTC (rev 2516)
@@ -23,13 +23,19 @@
 
 //$Id$
 
-import java.util.HashSet;
 import java.util.Set;
 
-import javax.persistence.Transient;
+import javax.persistence.Basic;
+import javax.persistence.CascadeType;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.OneToOne;
 
 import org.jbpm.api.model.OutputSet;
 import org.jbpm.api.model.Property;
+import org.jbpm.api.model.internal.PropertySupport;
 
 
 /**
@@ -38,46 +44,59 @@
  * @author thomas.diesler at jboss.com
  * @since 08-Jul-2008
  */
+ at Entity (name = "OutputSet")
 public class OutputSetImpl implements OutputSet
 {
   private static final long serialVersionUID = 1L;
   
-  @Transient
-  private Set<Property> properties = new HashSet<Property>();
+  @Id @GeneratedValue
+  protected Integer id;
 
+  @Basic
+  private int setIndex;
+  
+  @OneToOne(cascade = { CascadeType.ALL }, fetch = FetchType.EAGER, targetEntity = PropertySupportImpl.class)
+  protected PropertySupport propSupport = new PropertySupportImpl();
+
+  int getSetIndex()
+  {
+    return setIndex;
+  }
+
+  void setSetIndex(int setIndex)
+  {
+    this.setIndex = setIndex;
+  }
+
   @Override
   public Property getProperty(String name)
   {
-    for (Property prop : properties)
-    {
-      if (prop.getName().equals(name))
-        return prop;
-    }
-    return null;
+    return propSupport.getProperty(name);
   }
 
   @Override
   public Set<String> getPropertyNames()
   {
-    Set<String> names = new HashSet<String>();
-    for (Property prop : properties)
-    {
-      names.add(prop.getName());
-    }
-    return names;
+    return propSupport.getPropertyNames();
   }
 
   @Override
-  public boolean removeProperty(String name)
+  public void addProperty(Property prop)
   {
-    return properties.remove(name);
+    propSupport.addProperty(prop);
   }
 
   @Override
-  public void addProperty(Property prop)
+  public void addProperty(String name, Object value)
   {
-    properties.add(prop);
+    propSupport.addProperty(name, value);
   }
+
+  @Override
+  public Property removeProperty(String name)
+  {
+    return propSupport.removeProperty(name);
+  }
   
   @Override
   public String toString()

Modified: projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/ParticipantImpl.java
===================================================================
--- projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/ParticipantImpl.java	2008-10-09 19:52:07 UTC (rev 2515)
+++ projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/ParticipantImpl.java	2008-10-10 06:56:39 UTC (rev 2516)
@@ -59,6 +59,12 @@
     this.name = name.getCanonicalName();
   }
 
+  public ParticipantImpl(Participant other)
+  {
+    ParticipantImpl otherImpl = (ParticipantImpl)other;
+    this.name = otherImpl.name;
+  }
+
   @Override
   public ObjectName getName()
   {

Modified: projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/ProcessDefinitionImpl.java
===================================================================
--- projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/ProcessDefinitionImpl.java	2008-10-09 19:52:07 UTC (rev 2515)
+++ projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/ProcessDefinitionImpl.java	2008-10-10 06:56:39 UTC (rev 2516)
@@ -28,18 +28,27 @@
 import java.io.IOException;
 import java.io.ObjectInputStream;
 import java.io.ObjectOutputStream;
+import java.util.List;
+import java.util.Set;
 
 import javax.management.ObjectName;
+import javax.persistence.CascadeType;
 import javax.persistence.Entity;
+import javax.persistence.FetchType;
 import javax.persistence.Lob;
+import javax.persistence.OneToOne;
 import javax.persistence.Transient;
 
 import org.jbpm.api.Constants;
 import org.jbpm.api.client.ProcessEngine;
+import org.jbpm.api.model.Assignment;
+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.Property;
 import org.jbpm.api.model.builder.ObjectNameFactory;
+import org.jbpm.api.model.internal.ProcessStructure;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -50,19 +59,23 @@
  * @since 08-Jul-2008
  */
 @Entity(name = "ProcessDefinition")
-public class ProcessDefinitionImpl extends StructureDelegateImpl implements ProcessDefinition
+public class ProcessDefinitionImpl extends AbstractElementImpl implements ProcessDefinition
 {
   private static final long serialVersionUID = 1L;
 
   // provide logging
   final static Logger log = LoggerFactory.getLogger(ProcessDefinitionImpl.class);
 
+  @OneToOne(cascade = { CascadeType.ALL }, fetch = FetchType.EAGER, targetEntity = ProcessStructureImpl.class)
+  private ProcessStructure procStruct;
+  
   @Lob
   private byte[] rawProcStruct;
 
   public ProcessDefinitionImpl(ProcessEngine engine, ProcessStructureImpl procStruct)
   {
-    super(engine, procStruct);
+    super(engine);
+    this.procStruct = procStruct;
     create(this);
   }
 
@@ -102,33 +115,100 @@
   }
 
   @Override
+  public List<Assignment> getAssignments()
+  {
+    return procStruct.getAssignments();
+  }
+
+  @Override
+  public Message getMessage(String msgName)
+  {
+    return procStruct.getMessage(msgName);
+  }
+
+  @Override
+  public Set<Message> getMessages()
+  {
+    return procStruct.getMessages();
+  }
+
+  @Override
+  public String getName()
+  {
+    return procStruct.getName();
+  }
+
+  @Override
+  public <T extends Node> T getNode(Class<T> clazz, String name)
+  {
+    return procStruct.getNode(clazz, name);
+  }
+
+  @Override
+  public Node getNode(String name)
+  {
+    return procStruct.getNode(name);
+  }
+
+  @Override
+  public List<Node> getNodes()
+  {
+    return procStruct.getNodes();
+  }
+
+  @Override
+  public <T extends Node> List<T> getNodes(Class<T> clazz)
+  {
+    return procStruct.getNodes(clazz);
+  }
+
+  @Override
+  public Property getProperty(String name)
+  {
+    return procStruct.getProperty(name);
+  }
+
+  @Override
+  public Set<String> getPropertyNames()
+  {
+    return procStruct.getPropertyNames();
+  }
+
+  @Override
   public void addProperty(Property prop)
   {
     throw new IllegalStateException("Cannot add a property to a process definition");
   }
 
   @Override
-  public boolean removeProperty(String name)
+  public void addProperty(String name, Object value)
   {
-    throw new IllegalStateException("Cannot add remove a property to a process definition");
+    throw new IllegalStateException("Cannot add a property to a process definition");
   }
 
-  public void initializeMessageRef(MessageImpl msgRef)
+  @Override
+  public Property removeProperty(String name)
   {
+    throw new IllegalStateException("Cannot add remove a property to a process definition");
+  }
+  
+  public void initializeMessageRef(Message msgRef)
+  {
     String msgName = msgRef.getName();
     MessageImpl procMsg = (MessageImpl)getMessage(msgName);
     if (procMsg == null)
       throw new IllegalStateException("Cannot obtain process message: " + msgName);
 
+    MessageImpl msgImpl = (MessageImpl)msgRef;
     if (msgRef.getFromRef() == null && procMsg.getFromRef() != null)
-      msgRef.setFromRef(procMsg.getFromRef());
+      msgImpl.setFromRef(new ParticipantImpl(procMsg.getFromRef()));
     if (msgRef.getToRef() == null && procMsg.getToRef() != null)
-      msgRef.setToRef(procMsg.getToRef());
+      msgImpl.setToRef(new ParticipantImpl(procMsg.getToRef()));
 
     for (String propName : procMsg.getPropertyNames())
     {
       Property prop = procMsg.getProperty(propName);
-      msgRef.addProperty(prop);
+      msgRef.addProperty(new PropertyImpl(prop));
     }
   }
 
@@ -150,28 +230,32 @@
       throw new IllegalStateException("Cannot serialize process structure", ex);
     }
 
-    procStruct.create(this);
+    ProcessStructureImpl procStructImpl = (ProcessStructureImpl)procStruct;
+    procStructImpl.create(this);
   }
 
   @Override
   public void register(ProcessDefinition procDef)
   {
     super.register(procDef);
-    procStruct.register(procDef);
+    ProcessStructureImpl procStructImpl = (ProcessStructureImpl)procStruct;
+    procStructImpl.register(procDef);
   }
 
   @Override
   public void unregister(ProcessDefinition procDef)
   {
     super.unregister(procDef);
-    procStruct.unregister(procDef);
+    ProcessStructureImpl procStructImpl = (ProcessStructureImpl)procStruct;
+    procStructImpl.unregister(procDef);
   }
 
   @Override
   protected void destroy(ProcessDefinition procDef)
   {
     super.destroy(procDef);
-    procStruct.destroy(procDef);
+    ProcessStructureImpl procStructImpl = (ProcessStructureImpl)procStruct;
+    procStructImpl.destroy(procDef);
   }
 
   public String toString()

Modified: projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/ProcessImpl.java
===================================================================
--- projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/ProcessImpl.java	2008-10-09 19:52:07 UTC (rev 2515)
+++ projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/ProcessImpl.java	2008-10-10 06:56:39 UTC (rev 2516)
@@ -23,18 +23,29 @@
 
 //$Id$
 
+import java.util.List;
+import java.util.Set;
+
 import javax.management.ObjectName;
+import javax.persistence.CascadeType;
 import javax.persistence.Entity;
 import javax.persistence.EnumType;
 import javax.persistence.Enumerated;
+import javax.persistence.FetchType;
 import javax.persistence.ManyToOne;
+import javax.persistence.OneToOne;
 import javax.persistence.Transient;
 
 import org.jbpm.api.Constants;
 import org.jbpm.api.client.ProcessEngine;
+import org.jbpm.api.model.Assignment;
+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.Property;
 import org.jbpm.api.model.builder.ObjectNameFactory;
+import org.jbpm.api.model.internal.ProcessStructure;
 import org.jbpm.api.runtime.Attachments;
 import org.jbpm.api.service.ExecutionService;
 import org.jbpm.api.service.ProcessService;
@@ -48,7 +59,7 @@
  * @since 08-Jul-2008
  */
 @Entity(name = "Process")
-public class ProcessImpl extends StructureDelegateImpl implements Process
+public class ProcessImpl extends AbstractElementImpl implements Process
 {
   private static final long serialVersionUID = 1L;
 
@@ -61,12 +72,16 @@
   @ManyToOne(targetEntity = ProcessDefinitionImpl.class)
   private ProcessDefinition procDef;
 
+  @OneToOne(cascade = { CascadeType.ALL }, fetch = FetchType.EAGER, targetEntity = ProcessStructureImpl.class)
+  private ProcessStructure procStruct;
+  
   @Transient
   private transient RuntimeException runtimeException;
 
   public ProcessImpl(ProcessEngine engine, ProcessDefinitionImpl procDef, ProcessStructureImpl procStruct)
   {
-    super(engine, procStruct);
+    super(engine);
+    this.procStruct = procStruct;
     this.procDef = procDef;
     create(this);
   }
@@ -102,6 +117,84 @@
     this.status = status;
   }
 
+  @Override
+  public List<Assignment> getAssignments()
+  {
+    return procStruct.getAssignments();
+  }
+
+  @Override
+  public Message getMessage(String msgName)
+  {
+    return procStruct.getMessage(msgName);
+  }
+
+  @Override
+  public Set<Message> getMessages()
+  {
+    return procStruct.getMessages();
+  }
+
+  @Override
+  public String getName()
+  {
+    return procStruct.getName();
+  }
+
+  @Override
+  public <T extends Node> T getNode(Class<T> clazz, String name)
+  {
+    return procStruct.getNode(clazz, name);
+  }
+
+  @Override
+  public Node getNode(String name)
+  {
+    return procStruct.getNode(name);
+  }
+
+  @Override
+  public List<Node> getNodes()
+  {
+    return procStruct.getNodes();
+  }
+
+  @Override
+  public <T extends Node> List<T> getNodes(Class<T> clazz)
+  {
+    return procStruct.getNodes(clazz);
+  }
+
+  @Override
+  public Property getProperty(String name)
+  {
+    return procStruct.getProperty(name);
+  }
+
+  @Override
+  public Set<String> getPropertyNames()
+  {
+    return procStruct.getPropertyNames();
+  }
+
+  @Override
+  public void addProperty(Property prop)
+  {
+    procStruct.addProperty(prop);
+  }
+
+  @Override
+  public void addProperty(String name, Object value)
+  {
+    procStruct.addProperty(name, value);
+  }
+
+  @Override
+  public Property removeProperty(String name)
+  {
+    return procStruct.removeProperty(name);
+  }
+  
   public RuntimeException getRuntimeException()
   {
     return runtimeException;
@@ -167,28 +260,32 @@
   protected void create(Process proc)
   {
     super.create(proc);
-    procStruct.create(proc);
+    ProcessStructureImpl procStructImpl = (ProcessStructureImpl)procStruct;
+    procStructImpl.create(proc);
   }
 
   @Override
   public void register(Process proc)
   {
     super.register(proc);
-    procStruct.register(proc);
+    ProcessStructureImpl procStructImpl = (ProcessStructureImpl)procStruct;
+    procStructImpl.register(proc);
   }
 
   @Override
   public void unregister(Process proc)
   {
     super.unregister(proc);
-    procStruct.unregister(proc);
+    ProcessStructureImpl procStructImpl = (ProcessStructureImpl)procStruct;
+    procStructImpl.unregister(proc);
   }
 
   @Override
   protected void destroy(Process proc)
   {
     super.destroy(proc);
-    procStruct.destroy(proc);
+    ProcessStructureImpl procStructImpl = (ProcessStructureImpl)procStruct;
+    procStructImpl.destroy(proc);
   }
 
   public String toString()

Modified: projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/ProcessStructureImpl.java
===================================================================
--- projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/ProcessStructureImpl.java	2008-10-09 19:52:07 UTC (rev 2515)
+++ projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/ProcessStructureImpl.java	2008-10-10 06:56:39 UTC (rev 2516)
@@ -35,6 +35,7 @@
 import javax.persistence.Entity;
 import javax.persistence.FetchType;
 import javax.persistence.OneToMany;
+import javax.persistence.OneToOne;
 import javax.persistence.Transient;
 
 import org.hibernate.annotations.IndexColumn;
@@ -51,6 +52,7 @@
 import org.jbpm.api.model.StartEvent;
 import org.jbpm.api.model.builder.ObjectNameFactory;
 import org.jbpm.api.model.internal.ProcessStructure;
+import org.jbpm.api.model.internal.PropertySupport;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -72,16 +74,17 @@
   private String name;
 
   @IndexColumn(name = "nodeIndex")
-  @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = "procStruct", targetEntity = NodeImpl.class)
+  @OneToMany(cascade = { CascadeType.ALL }, fetch = FetchType.EAGER, mappedBy = "procStruct", targetEntity = NodeImpl.class)
   private List<Node> nodes = new ArrayList<Node>();
 
-  @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, targetEntity = PropertyImpl.class)
-  private Set<Property> properties = new HashSet<Property>();
+  @OneToOne(cascade = { CascadeType.ALL }, fetch = FetchType.EAGER, targetEntity = PropertySupportImpl.class)
+  protected PropertySupport propSupport = new PropertySupportImpl();
 
-  @Transient
+  @OneToMany(cascade = { CascadeType.ALL }, fetch = FetchType.EAGER, targetEntity = MessageImpl.class)
   private Set<Message> messages = new HashSet<Message>();
 
-  @Transient
+  @IndexColumn(name = "assignIndex")
+  @OneToMany(cascade = { CascadeType.ALL }, fetch = FetchType.EAGER, targetEntity = AssignmentImpl.class)
   private List<Assignment> assignments = new ArrayList<Assignment>();
 
   public ProcessStructureImpl(ProcessEngine engine, String name)
@@ -114,40 +117,6 @@
     return name;
   }
 
-  @Override
-  public Property getProperty(String name)
-  {
-    for (Property prop : properties)
-    {
-      if (prop.getName().equals(name))
-        return prop;
-    }
-    return null;
-  }
-
-  @Override
-  public void addProperty(Property prop)
-  {
-    properties.add(prop);
-  }
-
-  @Override
-  public Set<String> getPropertyNames()
-  {
-    Set<String> names = new HashSet<String>();
-    for (Property prop : properties)
-    {
-      names.add(prop.getName());
-    }
-    return names;
-  }
-
-  @Override
-  public boolean removeProperty(String name)
-  {
-    return properties.remove(name);
-  }
-
   public void addNode(NodeImpl nodeImpl)
   {
     if (nodeImpl == null)
@@ -240,12 +209,43 @@
     return Collections.unmodifiableList(assignments);
   }
 
-  public void addAssignment(AssignmentImpl assignment)
+  public void addAssignment(AssignmentImpl assign)
   {
-    this.assignments.add(assignment);
+    assign.setAssignIndex(assignments.size());
+    assignments.add(assign);
   }
 
   @Override
+  public Property getProperty(String name)
+  {
+    return propSupport.getProperty(name);
+  }
+
+  @Override
+  public Set<String> getPropertyNames()
+  {
+    return propSupport.getPropertyNames();
+  }
+
+  @Override
+  public void addProperty(Property prop)
+  {
+    propSupport.addProperty(prop);
+  }
+
+  @Override
+  public void addProperty(String name, Object value)
+  {
+    propSupport.addProperty(name, value);
+  }
+
+  @Override
+  public Property removeProperty(String name)
+  {
+    return propSupport.removeProperty(name);
+  }
+  
+  @Override
   public void create(ProcessDefinition procDef)
   {
     super.create(procDef);

Modified: projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/PropertyImpl.java
===================================================================
--- projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/PropertyImpl.java	2008-10-09 19:52:07 UTC (rev 2515)
+++ projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/PropertyImpl.java	2008-10-10 06:56:39 UTC (rev 2516)
@@ -42,8 +42,7 @@
   private static final long serialVersionUID = 1L;
   
   @Id @GeneratedValue
-  @SuppressWarnings("unused")
-  private Integer id;
+  protected Integer id;
   
   @Basic
   private String name;
@@ -53,7 +52,7 @@
   
   @Basic
   private boolean isCorrelation;
-
+  
   public PropertyImpl(String name, Object value)
   {
     this.name = name;
@@ -62,11 +61,18 @@
 
   public PropertyImpl(String name, Object value, boolean isCorrelation)
   {
-    this.name = name;
+    this(name, value);
     this.isCorrelation = isCorrelation;
-    initPropertyValue(value);
   }
 
+  public PropertyImpl(Property other)
+  {
+    PropertyImpl otherImpl = (PropertyImpl)other;
+    this.name = otherImpl.name;
+    this.value = otherImpl.value;
+    this.isCorrelation = otherImpl.isCorrelation;
+  }
+
   // persistence ctor
   protected PropertyImpl()
   {
@@ -77,16 +83,19 @@
     this.value = (value != null ? value.toString() : null);
   }
 
+  @Override
   public String getName()
   {
     return name;
   }
 
+  @Override
   public String getValue()
   {
     return value;
   }
   
+  @Override
   public boolean isCorrelation()
   {
     return isCorrelation;

Added: projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/PropertySupportImpl.java
===================================================================
--- projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/PropertySupportImpl.java	                        (rev 0)
+++ projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/PropertySupportImpl.java	2008-10-10 06:56:39 UTC (rev 2516)
@@ -0,0 +1,90 @@
+/*
+ * 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.Collections;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.MapKey;
+import javax.persistence.OneToMany;
+
+import org.jbpm.api.model.Property;
+import org.jbpm.api.model.internal.PropertySupport;
+
+/**
+ * Basic property support
+ * 
+ * @author thomas.diesler at jboss.com
+ * @since 08-Jul-2008
+ */
+ at Entity(name = "PropertySupport")
+public class PropertySupportImpl implements PropertySupport
+{
+  private static final long serialVersionUID = 1L;
+
+  @Id @GeneratedValue
+  protected Integer id;
+
+  @MapKey (name = "name")
+  @OneToMany(cascade = { CascadeType.ALL }, fetch = FetchType.EAGER, targetEntity = PropertyImpl.class)
+  private Map<String, Property> propmap = new HashMap<String, Property>();
+
+  @Override
+  public Property getProperty(String name)
+  {
+    return propmap.get(name);
+  }
+
+  @Override
+  public Set<String> getPropertyNames()
+  {
+    return Collections.unmodifiableSet(propmap.keySet());
+  }
+
+  @Override
+  public void addProperty(Property prop)
+  {
+    propmap.put(prop.getName(), prop);
+  }
+
+  @Override
+  public void addProperty(String name, Object value)
+  {
+    PropertyImpl prop = new PropertyImpl(name, value);
+    propmap.put(name, prop);
+  }
+
+  @Override
+  public Property removeProperty(String name)
+  {
+    return propmap.remove(name);
+  }
+}


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

Modified: projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/ReceiveTaskImpl.java
===================================================================
--- projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/ReceiveTaskImpl.java	2008-10-09 19:52:07 UTC (rev 2515)
+++ projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/ReceiveTaskImpl.java	2008-10-10 06:56:39 UTC (rev 2516)
@@ -71,7 +71,7 @@
   
   public ReceiveTaskImpl(ProcessStructure procStruct, String name)
   {
-    super(procStruct, name, TaskType.Receive);
+    super(procStruct, TaskType.Receive, name);
   }
 
   // Persistence ctor

Modified: projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/SendTaskImpl.java
===================================================================
--- projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/SendTaskImpl.java	2008-10-09 19:52:07 UTC (rev 2515)
+++ projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/SendTaskImpl.java	2008-10-10 06:56:39 UTC (rev 2516)
@@ -57,7 +57,7 @@
 
   public SendTaskImpl(ProcessStructure procStruct, String name)
   {
-    super(procStruct, name, TaskType.Send);
+    super(procStruct, TaskType.Send, name);
   }
 
   // Persistence ctor

Modified: projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/SequenceFlowImpl.java
===================================================================
--- projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/SequenceFlowImpl.java	2008-10-09 19:52:07 UTC (rev 2515)
+++ projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/SequenceFlowImpl.java	2008-10-10 06:56:39 UTC (rev 2516)
@@ -25,13 +25,14 @@
 
 import javax.persistence.Basic;
 import javax.persistence.CascadeType;
-import javax.persistence.Embedded;
 import javax.persistence.Entity;
 import javax.persistence.EnumType;
 import javax.persistence.Enumerated;
+import javax.persistence.FetchType;
 import javax.persistence.GeneratedValue;
 import javax.persistence.Id;
 import javax.persistence.ManyToOne;
+import javax.persistence.OneToOne;
 
 import org.jbpm.api.model.Expression;
 import org.jbpm.api.model.Node;
@@ -52,28 +53,28 @@
 
   @Id
   @GeneratedValue
-  @SuppressWarnings("unused")
-  private Integer id;
+  protected Integer id;
 
   @Basic
   private int sourceIndex;
+
   @Basic
   private int targetIndex;
-  
+
   @Enumerated(EnumType.STRING)
   private ConditionType conditionType = ConditionType.None;
 
   @Basic
   private String targetName;
 
-  @ManyToOne(cascade = CascadeType.ALL, targetEntity = NodeImpl.class)
+  @ManyToOne(cascade = { CascadeType.ALL }, fetch = FetchType.EAGER, targetEntity = NodeImpl.class)
   private Node sourceRef;
 
-  @ManyToOne(cascade = CascadeType.ALL, targetEntity = NodeImpl.class)
+  @ManyToOne(cascade = { CascadeType.ALL }, fetch = FetchType.EAGER, targetEntity = NodeImpl.class)
   private Node targetRef;
 
-  @Embedded
-  private ExpressionImpl conditionExpression;
+  @OneToOne(cascade = { CascadeType.ALL }, fetch = FetchType.EAGER, targetEntity = ExpressionImpl.class)
+  private Expression conditionExpression;
 
   public SequenceFlowImpl(String targetName)
   {

Added: projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/SignalImpl.java
===================================================================
--- projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/SignalImpl.java	                        (rev 0)
+++ projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/SignalImpl.java	2008-10-10 06:56:39 UTC (rev 2516)
@@ -0,0 +1,107 @@
+/*
+ * 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 javax.management.ObjectName;
+import javax.persistence.Basic;
+import javax.persistence.Entity;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+import org.jbpm.api.model.Signal;
+import org.jbpm.api.model.builder.ObjectNameFactory;
+
+/**
+ * A Signal thrown by the ProcessEngine
+ * 
+ * @author Thomas.Diesler at jboss.com
+ * @since 08-Jul-2008
+ */
+ at Entity(name = "Signal")
+public final class SignalImpl implements Signal
+{
+  private static final long serialVersionUID = 1L;
+
+  @Id @GeneratedValue
+  protected Integer id;
+  
+  @Enumerated(EnumType.STRING)
+  private SignalType type;
+  
+  @Basic
+  private String fromRef;
+
+  @Basic
+  private String message;
+  
+  /**
+   * Create the signal for a given source and type
+   */
+  public SignalImpl(SignalType type, ObjectName fromRef)
+  {
+    this.fromRef = fromRef.getCanonicalName();
+    this.type = type;
+    if (fromRef == null)
+      throw new IllegalArgumentException("Signal fromRef cannot be null");
+    if (type == null)
+      throw new IllegalArgumentException("SignalType cannot be null");
+  }
+
+  /**
+   * Create the signal for a given source, type and message
+   */
+  public SignalImpl(SignalType type, ObjectName fromRef, String message)
+  {
+    this(type, fromRef);
+    this.message = message;
+  }
+
+  public ObjectName getFromRef()
+  {
+    return ObjectNameFactory.create(fromRef);
+  }
+
+  public SignalType getSignalType()
+  {
+    return type;
+  }
+
+  public String getMessage()
+  {
+    return message;
+  }
+
+  public String toString()
+  {
+    StringBuilder string = new StringBuilder(type + "[" + fromRef);
+    if (message != null)
+    {
+      string.append(":" + message);
+    }
+    string.append("]");
+    return string.toString();
+  }
+}
\ No newline at end of file


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

Modified: projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/StartEventImpl.java
===================================================================
--- projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/StartEventImpl.java	2008-10-09 19:52:07 UTC (rev 2515)
+++ projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/StartEventImpl.java	2008-10-10 06:56:39 UTC (rev 2516)
@@ -107,7 +107,8 @@
 
   public void setOutFlow(SequenceFlowImpl outFlow)
   {
-    outFlow.setTargetIndex(outFlows.size());
+    outFlow.setSourceIndex(outFlows.size());
+    outFlow.setSourceRef(this);
     outFlows.add(outFlow);
   }
 
@@ -124,13 +125,13 @@
 
       public void throwEnterSignal(Token token)
       {
-        Signal signal = new Signal(getKey(), Signal.SignalType.SYSTEM_START_EVENT_ENTER);
+        Signal signal = new SignalImpl(Signal.SignalType.SYSTEM_START_EVENT_ENTER, getKey());
         sigService.throwSignal(signal);
       }
 
       public void throwExitSignal(Token token)
       {
-        Signal signal = new Signal(getKey(), Signal.SignalType.SYSTEM_START_EVENT_EXIT);
+        Signal signal = new SignalImpl(Signal.SignalType.SYSTEM_START_EVENT_EXIT, getKey());
         sigService.throwSignal(signal);
       }
 

Deleted: projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/StructureDelegateImpl.java
===================================================================
--- projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/StructureDelegateImpl.java	2008-10-09 19:52:07 UTC (rev 2515)
+++ projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/StructureDelegateImpl.java	2008-10-10 06:56:39 UTC (rev 2516)
@@ -1,142 +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.ri.model;
-
-//$Id$
-
-import java.util.List;
-import java.util.Set;
-
-import javax.persistence.CascadeType;
-import javax.persistence.FetchType;
-import javax.persistence.MappedSuperclass;
-import javax.persistence.OneToOne;
-
-import org.jbpm.api.client.ProcessEngine;
-import org.jbpm.api.model.Assignment;
-import org.jbpm.api.model.Message;
-import org.jbpm.api.model.Node;
-import org.jbpm.api.model.Property;
-import org.jbpm.api.model.internal.ProcessStructure;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * A process definition
- * 
- * @author thomas.diesler at jboss.com
- * @since 08-Jul-2008
- */
- at MappedSuperclass
-public abstract class StructureDelegateImpl extends AbstractElementImpl implements ProcessStructure
-{
-  private static final long serialVersionUID = 1L;
-
-  // provide logging
-  final static Logger log = LoggerFactory.getLogger(StructureDelegateImpl.class);
-
-  @OneToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER, targetEntity = ProcessStructureImpl.class)
-  protected ProcessStructureImpl procStruct;
-  
-  public StructureDelegateImpl(ProcessEngine engine, ProcessStructureImpl procStruct)
-  {
-    super(engine);
-    this.procStruct = procStruct;
-  }
-  
-  // Persistence ctor
-  protected StructureDelegateImpl()
-  {
-  }
-  
-  @Override
-  public String getName()
-  {
-    return procStruct.getName();
-  }
-
-  @Override
-  public Property getProperty(String name)
-  {
-    return procStruct.getProperty(name);
-  }
-
-  @Override
-  public void addProperty(Property prop)
-  {
-    procStruct.addProperty(prop);
-  }
-
-  @Override
-  public Set<String> getPropertyNames()
-  {
-    return procStruct.getPropertyNames();
-  }
-
-  @Override
-  public boolean removeProperty(String name)
-  {
-    return procStruct.removeProperty(name);
-  }
-
-  @Override
-  public List<Node> getNodes()
-  {
-    return procStruct.getNodes();
-  }
-
-  @Override
-  public Node getNode(String name)
-  {
-    return procStruct.getNode(name);
-  }
-
-  @Override
-  public <T extends Node> List<T> getNodes(Class<T> clazz)
-  {
-    return procStruct.getNodes(clazz);
-  }
-
-  @Override
-  public <T extends Node> T getNode(Class<T> clazz, String name)
-  {
-    return procStruct.getNode(clazz, name);
-  }
-
-  @Override
-  public Set<Message> getMessages()
-  {
-    return procStruct.getMessages();
-  }
-
-  @Override
-  public Message getMessage(String msgName)
-  {
-    return procStruct.getMessage(msgName);
-  }
-
-  @Override
-  public List<Assignment> getAssignments()
-  {
-    return procStruct.getAssignments();
-  }
-}
\ No newline at end of file

Modified: projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/TaskImpl.java
===================================================================
--- projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/TaskImpl.java	2008-10-09 19:52:07 UTC (rev 2515)
+++ projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/TaskImpl.java	2008-10-10 06:56:39 UTC (rev 2516)
@@ -28,11 +28,15 @@
 import java.util.List;
 
 import javax.management.ObjectName;
+import javax.persistence.CascadeType;
 import javax.persistence.Entity;
 import javax.persistence.EnumType;
 import javax.persistence.Enumerated;
+import javax.persistence.FetchType;
+import javax.persistence.OneToMany;
 import javax.persistence.Transient;
 
+import org.hibernate.annotations.IndexColumn;
 import org.jbpm.api.Constants;
 import org.jbpm.api.InvalidProcessException;
 import org.jbpm.api.NotImplementedException;
@@ -74,16 +78,19 @@
   @Enumerated(EnumType.STRING)
   protected TaskType taskType;
 
-  @Transient
+  @IndexColumn(name = "setIndex")
+  @OneToMany(cascade = { CascadeType.ALL }, fetch = FetchType.EAGER, targetEntity = InputSetImpl.class)
   private List<InputSet> inputSets = new ArrayList<InputSet>();
   
-  @Transient
+  @IndexColumn(name = "setIndex")
+  @OneToMany(cascade = { CascadeType.ALL }, fetch = FetchType.EAGER, targetEntity = OutputSetImpl.class)
   private List<OutputSet> outputSets = new ArrayList<OutputSet>();
   
-  @Transient
+  @IndexColumn(name = "exprIndex")
+  @OneToMany(cascade = { CascadeType.ALL }, fetch = FetchType.EAGER, targetEntity = ExpressionImpl.class)
   private List<Expression> ioRules = new ArrayList<Expression>();
   
-  public TaskImpl(ProcessStructure procStruct, String name, TaskType taskType)
+  public TaskImpl(ProcessStructure procStruct, TaskType taskType, String name)
   {
     super(procStruct, name);
     this.taskType = taskType;
@@ -100,7 +107,6 @@
   }
 
   @Override
-  @Transient
   public ObjectName getKey()
   {
     StringBuilder str = new StringBuilder(Constants.ID_DOMAIN + ":");
@@ -119,7 +125,8 @@
 
   public void setInFlow(SequenceFlowImpl inFlow)
   {
-    inFlow.setSourceIndex(inFlows.size());
+    inFlow.setTargetIndex(inFlows.size());
+    inFlow.setTargetRef(this);
     inFlows.add(inFlow);
   }
 
@@ -133,7 +140,8 @@
 
   public void setOutFlow(SequenceFlowImpl outFlow)
   {
-    outFlow.setTargetIndex(outFlows.size());
+    outFlow.setSourceIndex(outFlows.size());
+    outFlow.setSourceRef(this);
     outFlows.add(outFlow);
   }
 
@@ -143,8 +151,9 @@
     return Collections.unmodifiableList(inputSets);
   }
 
-  public void addInputSet(InputSet inputSet)
+  public void addInputSet(InputSetImpl inputSet)
   {
+    inputSet.setSetIndex(inputSets.size());
     inputSets.add(inputSet);
   }
 
@@ -154,8 +163,9 @@
     return Collections.unmodifiableList(outputSets);
   }
 
-  public void addOutputSet(OutputSet outputSet)
+  public void addOutputSet(OutputSetImpl outputSet)
   {
+    outputSet.setSetIndex(outputSets.size());
     outputSets.add(outputSet);
   }
 
@@ -164,8 +174,9 @@
     return Collections.unmodifiableList(ioRules);
   }
 
-  public void addIORule(Expression expr)
+  public void addIORule(ExpressionImpl expr)
   {
+    expr.setExprIndex(ioRules.size());
     ioRules.add(expr);
   }
 
@@ -315,17 +326,17 @@
     {
       private static final long serialVersionUID = 1L;
       
-      ProcessEngine engine = getProcessDefinition().getProcessEngine();
+      ProcessEngine engine = getProcessEngine();
       SignalService sigService = engine.getService(SignalService.class);
       public void throwEnterSignal(Token token)
       {
-        Signal signal = new Signal(getKey(), Signal.SignalType.SYSTEM_TASK_ENTER);
+        Signal signal = new SignalImpl(Signal.SignalType.SYSTEM_TASK_ENTER, getKey());
         sigService.throwSignal(signal);
       }
 
       public void throwExitSignal(Token token)
       {
-        Signal signal = new Signal(getKey(), Signal.SignalType.SYSTEM_TASK_EXIT);
+        Signal signal = new SignalImpl(Signal.SignalType.SYSTEM_TASK_EXIT, getKey());
         sigService.throwSignal(signal);
       }
 

Modified: projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/UserTaskImpl.java
===================================================================
--- projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/UserTaskImpl.java	2008-10-09 19:52:07 UTC (rev 2515)
+++ projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/UserTaskImpl.java	2008-10-10 06:56:39 UTC (rev 2516)
@@ -80,7 +80,7 @@
   
   public UserTaskImpl(ProcessStructure procStruct, String name)
   {
-    super(procStruct, name, TaskType.User);
+    super(procStruct, TaskType.User, name);
   }
 
   // Persistence ctor

Modified: projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/builder/EventBuilderImpl.java
===================================================================
--- projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/builder/EventBuilderImpl.java	2008-10-09 19:52:07 UTC (rev 2515)
+++ projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/builder/EventBuilderImpl.java	2008-10-10 06:56:39 UTC (rev 2516)
@@ -24,11 +24,11 @@
 //$Id$
 
 import org.jbpm.api.model.Event;
-import org.jbpm.api.model.Signal;
 import org.jbpm.api.model.Signal.SignalType;
 import org.jbpm.api.model.builder.EventBuilder;
 import org.jbpm.ri.model.EventImpl;
 import org.jbpm.ri.model.MessageImpl;
+import org.jbpm.ri.model.SignalImpl;
 
 /**
  * The EventBuilder can be used to build an {@link Event} dynamically.
@@ -53,7 +53,7 @@
   public EventBuilder addSignalRef(SignalType signalType, String message)
   {
     EventImpl eventImpl = getEvent();
-    eventImpl.setSignalRef(new Signal(node.getKey(), signalType, message));
+    eventImpl.setSignalRef(new SignalImpl(signalType, node.getKey(), message));
     return this;
   }
   

Modified: projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/builder/ProcessBuilderImpl.java
===================================================================
--- projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/builder/ProcessBuilderImpl.java	2008-10-09 19:52:07 UTC (rev 2515)
+++ projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/builder/ProcessBuilderImpl.java	2008-10-10 06:56:39 UTC (rev 2516)
@@ -158,7 +158,7 @@
   {
     if (type == TaskType.None || type == null)
     {
-      node = new TaskImpl(procStruct, name, TaskType.None);
+      node = new TaskImpl(procStruct, TaskType.None, name);
     }
     else if (type == TaskType.Service)
     {

Added: projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/builder/SignalBuilderImpl.java
===================================================================
--- projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/builder/SignalBuilderImpl.java	                        (rev 0)
+++ projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/model/builder/SignalBuilderImpl.java	2008-10-10 06:56:39 UTC (rev 2516)
@@ -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.model.builder;
+
+//$Id$
+
+import javax.management.ObjectName;
+
+import org.jbpm.api.model.Signal;
+import org.jbpm.api.model.Signal.SignalType;
+import org.jbpm.api.model.builder.SignalBuilder;
+import org.jbpm.ri.model.SignalImpl;
+
+
+/**
+ * A SignalBuilder can be used to build a {@link Signal} dynamically.
+ * 
+ * @author thomas.diesler at jboss.com
+ * @since 08-Jul-2008
+ */
+public class SignalBuilderImpl implements SignalBuilder
+{
+  @Override
+  public Signal newSignal(SignalType signalType, ObjectName fromRef, String message)
+  {
+    return new SignalImpl(signalType, fromRef, message);
+  }
+}
\ No newline at end of file


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

Modified: projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/runtime/DelegatingExecutionContext.java
===================================================================
--- projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/runtime/DelegatingExecutionContext.java	2008-10-09 19:52:07 UTC (rev 2515)
+++ projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/runtime/DelegatingExecutionContext.java	2008-10-10 06:56:39 UTC (rev 2516)
@@ -29,10 +29,10 @@
 import java.util.Map;
 
 import org.jbpm.api.model.Node;
+import org.jbpm.api.model.Process;
 import org.jbpm.api.model.ProcessDefinition;
 import org.jbpm.api.model.Property;
 import org.jbpm.api.runtime.ExecutionContext;
-import org.jbpm.api.model.Process;
 
 /**
  * An ExecutionContext that delegates to the current {@link Node} or {@link Process} for property rerieval.

Modified: projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/runtime/RuntimeProcess.java
===================================================================
--- projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/runtime/RuntimeProcess.java	2008-10-09 19:52:07 UTC (rev 2515)
+++ projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/runtime/RuntimeProcess.java	2008-10-10 06:56:39 UTC (rev 2516)
@@ -23,8 +23,8 @@
 
 //$Id$
 
+import org.jbpm.api.model.Process;
 import org.jbpm.api.runtime.TokenExecutor;
-import org.jbpm.api.model.Process;
 
 /**
  * A RuntimeProcess add runtime behaviour to the {@link Process} <p/> To protect the engine from maligious user code it

Modified: projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/service/ExecutionServiceImpl.java
===================================================================
--- projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/service/ExecutionServiceImpl.java	2008-10-09 19:52:07 UTC (rev 2515)
+++ projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/service/ExecutionServiceImpl.java	2008-10-10 06:56:39 UTC (rev 2516)
@@ -36,7 +36,6 @@
 import org.jbpm.api.model.Assignment;
 import org.jbpm.api.model.Expression;
 import org.jbpm.api.model.Process;
-import org.jbpm.api.model.Signal;
 import org.jbpm.api.model.StartEvent;
 import org.jbpm.api.model.Assignment.AssignTime;
 import org.jbpm.api.model.Event.EventDetailType;
@@ -51,6 +50,7 @@
 import org.jbpm.api.service.SignalService;
 import org.jbpm.ri.model.ProcessImpl;
 import org.jbpm.ri.model.SequenceFlowImpl;
+import org.jbpm.ri.model.SignalImpl;
 import org.jbpm.ri.runtime.DelegatingToken;
 import org.jbpm.ri.runtime.ExpressionEvaluator;
 import org.jbpm.ri.runtime.MutableToken;
@@ -335,7 +335,7 @@
         synchronized (proc)
         {
           procImpl.setProcessStatus(ProcessStatus.Active);
-          sigService.throwSignal(new Signal(procID, SignalType.SYSTEM_PROCESS_ENTER));
+          sigService.throwSignal(new SignalImpl(SignalType.SYSTEM_PROCESS_ENTER, procID));
 
           // Notify that the process is now Active
           proc.notifyAll();
@@ -364,7 +364,7 @@
       }
       finally
       {
-        sigService.throwSignal(new Signal(procID, Signal.SignalType.SYSTEM_PROCESS_EXIT));
+        sigService.throwSignal(new SignalImpl(SignalType.SYSTEM_PROCESS_EXIT, procID));
 
         synchronized (proc)
         {

Modified: projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/service/HibernatePersistenceServiceImpl.java
===================================================================
--- projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/service/HibernatePersistenceServiceImpl.java	2008-10-09 19:52:07 UTC (rev 2515)
+++ projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/service/HibernatePersistenceServiceImpl.java	2008-10-10 06:56:39 UTC (rev 2516)
@@ -31,10 +31,10 @@
 
 import org.hibernate.Hibernate;
 import org.hibernate.ObjectNotFoundException;
+import org.hibernate.Session;
 import org.hibernate.SessionFactory;
 import org.hibernate.Transaction;
 import org.hibernate.cfg.AnnotationConfiguration;
-import org.hibernate.Session;
 import org.jbpm.api.ProcessNotFoundException;
 import org.jbpm.api.client.ProcessEngine;
 import org.jbpm.api.model.Node;
@@ -42,7 +42,6 @@
 import org.jbpm.api.model.ProcessDefinition;
 import org.jbpm.api.service.PersistenceService;
 import org.jbpm.api.service.Service;
-import org.jbpm.ri.model.NodeImpl;
 import org.jbpm.ri.model.ProcessDefinitionImpl;
 import org.jbpm.ri.model.ProcessImpl;
 import org.slf4j.Logger;
@@ -219,14 +218,15 @@
   }
 
   @Override
-  public Node loadNode(Session session, ObjectName nodeID)
+  @SuppressWarnings("unchecked")
+  public <T extends Node> T loadNode(Session session, Class<T> nodeImpl, ObjectName nodeID)
   {
     log.debug("START loadNode: " + nodeID);
-    Node node = null;
+    T node = null;
     try
     {
       Integer id = Integer.valueOf(nodeID.getKeyProperty("id"));
-      node = (Node)session.load(NodeImpl.class, id);
+      node = (T)session.load(nodeImpl, id);
       Hibernate.initialize(node);
     }
     catch (ObjectNotFoundException ex)
@@ -237,6 +237,15 @@
     return node;
   }
 
+  public void deleteNode(Session session, Node node)
+  {
+    log.debug("START deleteNode: " + node);
+    
+    session.delete(node);
+    
+    log.debug("END deleteNode: " + node);
+  }
+
   @SuppressWarnings("unchecked")
   private SessionFactory getSessionFactory()
   {

Modified: projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/service/InMemoryPersistenceServiceImpl.java
===================================================================
--- projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/service/InMemoryPersistenceServiceImpl.java	2008-10-09 19:52:07 UTC (rev 2515)
+++ projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/service/InMemoryPersistenceServiceImpl.java	2008-10-10 06:56:39 UTC (rev 2516)
@@ -125,9 +125,10 @@
   }
 
   @Override
-  public Node loadNode(Session session, ObjectName nodeID)
+  @SuppressWarnings("unchecked")
+  public <T extends Node> T loadNode(Session session, Class<T> nodeImpl, ObjectName nodeID)
   {
-    Node node = nodes.get(nodeID);
+    T node = (T)nodes.get(nodeID);
     if (node == null)
       throw new ProcessNotFoundException("Cannot find node: " + nodeID);
     

Added: projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/service/SignalBuilderServiceImpl.java
===================================================================
--- projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/service/SignalBuilderServiceImpl.java	                        (rev 0)
+++ projects/spec/trunk/modules/ri/src/main/java/org/jbpm/ri/service/SignalBuilderServiceImpl.java	2008-10-10 06:56:39 UTC (rev 2516)
@@ -0,0 +1,51 @@
+/*
+ * 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 org.jbpm.api.client.ProcessEngine;
+import org.jbpm.api.model.Signal;
+import org.jbpm.api.model.builder.SignalBuilder;
+import org.jbpm.api.service.SignalBuilderService;
+import org.jbpm.ri.model.builder.SignalBuilderImpl;
+
+/**
+ * The SignalBuilder can be used to build a {@link Signal} dynamically.
+ * 
+ * @author thomas.diesler at jboss.com
+ * @since 17-Sep-2008
+ */
+public class SignalBuilderServiceImpl extends SignalBuilderService implements MutableService
+{
+  @Override
+  public void setProcessEngine(ProcessEngine engine)
+  {
+    super.setProcessEngine(engine);
+  }
+
+  @Override
+  public SignalBuilder getSignalBuilder()
+  {
+    return new SignalBuilderImpl();
+  }
+}


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

Modified: projects/spec/trunk/modules/ri/src/main/resources/jbpm-cfg-beans.xml
===================================================================
--- projects/spec/trunk/modules/ri/src/main/resources/jbpm-cfg-beans.xml	2008-10-09 19:52:07 UTC (rev 2515)
+++ projects/spec/trunk/modules/ri/src/main/resources/jbpm-cfg-beans.xml	2008-10-10 06:56:39 UTC (rev 2516)
@@ -16,6 +16,7 @@
           <inject bean="jBPMProcessDefinitionService" />
           <inject bean="jBPMProcessService" />
           <inject bean="jBPMSignalService" />
+          <inject bean="jBPMSignalBuilderService" />
         </set>
       </property>
     </bean>
@@ -25,24 +26,29 @@
       <property name="annotatedClasses">
         <set elementClass="java.lang.String">
           <value>org.jbpm.ri.model.AbstractElementImpl</value>
+          <value>org.jbpm.ri.model.AssignmentImpl</value>
           <value>org.jbpm.ri.model.ComplexGatewayImpl</value>
           <value>org.jbpm.ri.model.EndEventImpl</value>
           <value>org.jbpm.ri.model.ExclusiveGatewayImpl</value>
+          <value>org.jbpm.ri.model.ExpressionImpl</value>
           <value>org.jbpm.ri.model.GatewayImpl</value>
           <value>org.jbpm.ri.model.InclusiveGatewayImpl</value>
+          <value>org.jbpm.ri.model.InputSetImpl</value>
           <value>org.jbpm.ri.model.MessageImpl</value>
           <value>org.jbpm.ri.model.NodeImpl</value>
+          <value>org.jbpm.ri.model.OutputSetImpl</value>
           <value>org.jbpm.ri.model.ParallelGatewayImpl</value>
           <value>org.jbpm.ri.model.ParticipantImpl</value>
           <value>org.jbpm.ri.model.ProcessDefinitionImpl</value>
           <value>org.jbpm.ri.model.ProcessStructureImpl</value>
           <value>org.jbpm.ri.model.ProcessImpl</value>
           <value>org.jbpm.ri.model.PropertyImpl</value>
+          <value>org.jbpm.ri.model.PropertySupportImpl</value>
           <value>org.jbpm.ri.model.ReceiveTaskImpl</value>
           <value>org.jbpm.ri.model.SendTaskImpl</value>
           <value>org.jbpm.ri.model.SequenceFlowImpl</value>
+          <value>org.jbpm.ri.model.SignalImpl</value>
           <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>
@@ -68,6 +74,7 @@
     <bean name="jBPMMessageBuilderService" class="org.jbpm.ri.service.MessageBuilderServiceImpl" />
     <bean name="jBPMProcessBuilderService" class="org.jbpm.ri.service.ProcessBuilderServiceImpl" />
     <bean name="jBPMProcessDefinitionService" class="org.jbpm.ri.service.ProcessDefinitionServiceImpl" />
+    <bean name="jBPMSignalBuilderService" class="org.jbpm.ri.service.SignalBuilderServiceImpl" />
     <bean name="jBPMSignalService" class="org.jbpm.ri.service.SignalServiceImpl" />
     
   </deployment>

Added: projects/spec/trunk/modules/ri/src/test/java/org/jbpm/test/ri/service/persistence/TaskPersistenceTest.java
===================================================================
--- projects/spec/trunk/modules/ri/src/test/java/org/jbpm/test/ri/service/persistence/TaskPersistenceTest.java	                        (rev 0)
+++ projects/spec/trunk/modules/ri/src/test/java/org/jbpm/test/ri/service/persistence/TaskPersistenceTest.java	2008-10-10 06:56:39 UTC (rev 2516)
@@ -0,0 +1,398 @@
+/*
+ * 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.ri.service.persistence;
+
+// $Id$
+
+import java.util.List;
+import java.util.Set;
+
+import javax.management.ObjectName;
+
+import org.hibernate.Hibernate;
+import org.hibernate.Session;
+import org.hibernate.StaleStateException;
+import org.hibernate.Transaction;
+import org.jbpm.api.model.Assignment;
+import org.jbpm.api.model.Expression;
+import org.jbpm.api.model.InputSet;
+import org.jbpm.api.model.Node;
+import org.jbpm.api.model.OutputSet;
+import org.jbpm.api.model.SequenceFlow;
+import org.jbpm.api.model.Task;
+import org.jbpm.api.model.Assignment.AssignTime;
+import org.jbpm.api.model.SequenceFlow.ConditionType;
+import org.jbpm.api.model.Task.TaskType;
+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.service.PersistenceService;
+import org.jbpm.api.test.CTSTestCase;
+import org.jbpm.ri.model.AssignmentImpl;
+import org.jbpm.ri.model.ExpressionImpl;
+import org.jbpm.ri.model.InputSetImpl;
+import org.jbpm.ri.model.OutputSetImpl;
+import org.jbpm.ri.model.PropertyImpl;
+import org.jbpm.ri.model.SequenceFlowImpl;
+import org.jbpm.ri.model.TaskImpl;
+import org.jbpm.ri.service.HibernatePersistenceServiceImpl;
+
+/**
+ * Test the HibernatePersistenceService for Tasks
+ * 
+ * @author thomas.diesler at jboss.com
+ * @since 08-Jul-2008
+ */
+public class TaskPersistenceTest extends CTSTestCase
+{
+  HibernatePersistenceServiceImpl service;
+  
+  @Override
+  protected void setUp() throws Exception
+  {
+    super.setUp();
+    service = (HibernatePersistenceServiceImpl)PersistenceService.locatePersistenceService();
+  }
+
+  public void testSimpleTask() throws Exception
+  {
+    Task orgTask = new TaskImpl(null, TaskType.None, "Task");
+    
+    ObjectName taskID = saveNode(orgTask);
+    
+    Task wasTask = loadNode(taskID);
+    assertEquals("Task", wasTask.getName());
+    assertEquals(TaskType.None, wasTask.getTaskType());
+    
+    deleteNode(wasTask);
+  }
+
+  public void testTaskProperties() throws Exception
+  {
+    TaskImpl orgTask = new TaskImpl(null, TaskType.None, "Task");
+    orgTask.addProperty("propOne", "valOne");
+    orgTask.addProperty("propTwo", "valTwo");
+    
+    ObjectName taskID = saveNode(orgTask);
+    
+    Task wasTask = loadNode(taskID);
+    Set<String> propNames = wasTask.getPropertyNames();
+    assertEquals(2, propNames.size());
+    assertEquals("valOne", wasTask.getProperty("propOne").getValue());
+    assertEquals("valTwo", wasTask.getProperty("propTwo").getValue());
+    
+    deleteNode(wasTask);
+  }
+
+  public void testTaskAssignments() throws Exception
+  {
+    TaskImpl orgTask = new TaskImpl(null, TaskType.None, "Task");
+    orgTask.addAssignment(new AssignmentImpl(AssignTime.Start, new ExpressionImpl("foo"), new PropertyImpl("propFoo", null)));
+    orgTask.addAssignment(new AssignmentImpl(AssignTime.End, new ExpressionImpl("bar"), new PropertyImpl("propBar", null)));
+    
+    ObjectName taskID = saveNode(orgTask);
+    
+    Task wasTask = loadNode(taskID);
+    List<Assignment> ass = wasTask.getAssignments();
+    assertEquals(2, ass.size());
+    Assignment assOne = ass.get(0);
+    Assignment assTwo = ass.get(1);
+    assertEquals(AssignTime.Start, assOne.getAssignTime());
+    assertEquals("foo", assOne.getFrom().getExpressionBody());
+    assertEquals("propFoo", assOne.getTo().getName());
+    assertEquals(AssignTime.End, assTwo.getAssignTime());
+    assertEquals("bar", assTwo.getFrom().getExpressionBody());
+    assertEquals("propBar", assTwo.getTo().getName());
+    
+    deleteNode(wasTask);
+  }
+
+  public void testInOutFlows() throws Exception
+  {
+    TaskImpl taskA = new TaskImpl(null, TaskType.None, "TaskA");
+    TaskImpl taskB = new TaskImpl(null, TaskType.None, "TaskB");
+    
+    SequenceFlowImpl flow = new SequenceFlowImpl("TaskB", ConditionType.Expression, new ExpressionImpl("expr"));
+    taskA.setOutFlow(flow);
+    taskB.setInFlow(flow);
+    
+    ObjectName aID = saveNode(taskA);
+    ObjectName bID = saveNode(taskB);
+    
+    Task wasA = loadNode(aID);
+    Task wasB = loadNode(bID);
+
+    SequenceFlow outFlowA = wasA.getOutFlow();
+    assertEquals("TaskB", outFlowA.getTargetName());
+    assertEquals("TaskB", outFlowA.getTargetRef().getName());
+    assertEquals(ConditionType.Expression, outFlowA.getConditionType());
+    assertEquals("expr", outFlowA.getConditionExpression().getExpressionBody());
+    assertSame(wasA, outFlowA.getSourceRef());
+    
+    SequenceFlow inFlowB = wasB.getInFlow();
+    assertEquals(outFlowA.getTargetName(), inFlowB.getTargetName());
+    
+    deleteNode(wasA);
+    deleteNode(wasB);
+  }
+
+  public void testExecHandler() throws Exception
+  {
+    class ExecHandler implements ExecutionHandler
+    {
+      private static final long serialVersionUID = 1L;
+
+      @Override
+      public void execute(Token token)
+      {
+      }
+
+      @Override
+      public Node getNode()
+      {
+        return null;
+      }
+
+      @Override
+      public void setNode(Node node)
+      {
+      }
+    }
+    
+    TaskImpl orgTask = new TaskImpl(null, TaskType.None, "Task");
+    orgTask.setExecutionHandler(ExecHandler.class);
+    
+    ObjectName taskID = saveNode(orgTask);
+    
+    Task wasTask = loadNode(taskID);
+    
+    ExecutionHandler execHandler = wasTask.getExecutionHandler();
+    assertNotNull(execHandler);
+    assertTrue(execHandler instanceof ExecutionHandler);
+    
+    deleteNode(wasTask);
+  }
+
+  public void testSignalHandler() throws Exception
+  {
+    class SigHandler implements SignalHandler
+    {
+      private static final long serialVersionUID = 1L;
+
+      @Override
+      public Node getNode()
+      {
+        return null;
+      }
+
+      @Override
+      public void setNode(Node node)
+      {
+      }
+
+      @Override
+      public void throwEnterSignal(Token token)
+      {
+      }
+
+      @Override
+      public void throwExitSignal(Token token)
+      {
+      }
+    }
+    
+    TaskImpl orgTask = new TaskImpl(null, TaskType.None, "Task");
+    orgTask.setSignalHandler(SigHandler.class);
+    
+    ObjectName taskID = saveNode(orgTask);
+    
+    Task wasTask = loadNode(taskID);
+    
+    SignalHandler sigHandler = wasTask.getSignalHandler();
+    assertNotNull(sigHandler);
+    assertTrue(sigHandler instanceof SignalHandler);
+    
+    deleteNode(wasTask);
+  }
+
+  public void testFlowHandler() throws Exception
+  {
+    class FlowHandlerImpl implements FlowHandler
+    {
+      private static final long serialVersionUID = 1L;
+
+      @Override
+      public Node getNode()
+      {
+        return null;
+      }
+
+      @Override
+      public void setNode(Node node)
+      {
+      }
+
+      @Override
+      public void execute(TokenExecutor tokenExecutor, Token token)
+      {
+      }
+    }
+    
+    TaskImpl orgTask = new TaskImpl(null, TaskType.None, "Task");
+    orgTask.setFlowHandler(FlowHandlerImpl.class);
+    
+    ObjectName taskID = saveNode(orgTask);
+    
+    Task wasTask = loadNode(taskID);
+    
+    FlowHandler flowHandler = wasTask.getFlowHandler();
+    assertNotNull(flowHandler);
+    assertTrue(flowHandler instanceof FlowHandler);
+    
+    deleteNode(wasTask);
+  }
+
+  public void testInputSet() throws Exception
+  {
+    TaskImpl orgTask = new TaskImpl(null, TaskType.None, "Task");
+    
+    InputSetImpl inSetOne = new InputSetImpl();
+    inSetOne.addProperty("oneName", "oneValue");
+    orgTask.addInputSet(inSetOne);
+    
+    InputSetImpl inSetTwo = new InputSetImpl();
+    inSetTwo.addProperty("twoName", "twoValue");
+    orgTask.addInputSet(inSetTwo);
+    
+    ObjectName taskID = saveNode(orgTask);
+    
+    Task wasTask = loadNode(taskID);
+    
+    List<InputSet> inSets = wasTask.getInputSets();
+    assertEquals(2, inSets.size());
+    InputSet wasOne = inSets.get(0);
+    assertEquals("oneValue", wasOne.getProperty("oneName").getValue());
+    InputSet wasTwo = inSets.get(1);
+    assertEquals("twoValue", wasTwo.getProperty("twoName").getValue());
+    
+    deleteNode(wasTask);
+  }
+
+  public void testOutputSet() throws Exception
+  {
+    TaskImpl orgTask = new TaskImpl(null, TaskType.None, "Task");
+    
+    OutputSetImpl outSetOne = new OutputSetImpl();
+    outSetOne.addProperty("oneName", "oneValue");
+    orgTask.addOutputSet(outSetOne);
+    
+    OutputSetImpl outSetTwo = new OutputSetImpl();
+    outSetTwo.addProperty("twoName", "twoValue");
+    orgTask.addOutputSet(outSetTwo);
+    
+    ObjectName taskID = saveNode(orgTask);
+    
+    Task wasTask = loadNode(taskID);
+    
+    List<OutputSet> outSets = wasTask.getOutputSets();
+    assertEquals(2, outSets.size());
+    OutputSet wasOne = outSets.get(0);
+    assertEquals("oneValue", wasOne.getProperty("oneName").getValue());
+    OutputSet wasTwo = outSets.get(1);
+    assertEquals("twoValue", wasTwo.getProperty("twoName").getValue());
+    
+    deleteNode(wasTask);
+  }
+
+  public void testIORules() throws Exception
+  {
+    TaskImpl orgTask = new TaskImpl(null, TaskType.None, "Task");
+    orgTask.addIORule(new ExpressionImpl("ioOne"));
+    orgTask.addIORule(new ExpressionImpl("ioTwo"));
+    
+    ObjectName taskID = saveNode(orgTask);
+    
+    Task wasTask = loadNode(taskID);
+    
+    List<Expression> rules = wasTask.getIORules();
+    assertEquals(2, rules.size());
+    Expression wasOne = rules.get(0);
+    assertEquals("ioOne", wasOne.getExpressionBody());
+    Expression wasTwo = rules.get(1);
+    assertEquals("ioTwo", wasTwo.getExpressionBody());
+    
+    deleteNode(wasTask);
+  }
+
+  private ObjectName saveNode(Node node)
+  {
+    Session session = service.createSession();
+    Transaction tx = session.beginTransaction();
+    try
+    {
+      service.saveNode(session, node);
+      tx.commit();
+      
+      return node.getKey();
+    }
+    finally
+    {
+      session.close();
+    }
+  }
+  
+  private Task loadNode(ObjectName nodeID)
+  {
+    Session session = service.createSession();
+    try
+    {
+      Task task = service.loadNode(session, TaskImpl.class, nodeID);
+      Hibernate.initialize(task);
+      return task;
+    }
+    finally
+    {
+      session.close();
+    }
+  }
+
+  private void deleteNode(Node node)
+  {
+    Session session = service.createSession();
+    Transaction tx = session.beginTransaction();
+    try
+    {
+      service.deleteNode(session, node);
+      tx.commit();
+    }
+    catch(StaleStateException ex)
+    {
+      // ignore, because the node was already deleted by a cascade
+    }
+    finally
+    {
+      session.close();
+    }
+  }
+}


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

Modified: projects/spec/trunk/modules/ri/src/test/resources/log4j.xml
===================================================================
--- projects/spec/trunk/modules/ri/src/test/resources/log4j.xml	2008-10-09 19:52:07 UTC (rev 2515)
+++ projects/spec/trunk/modules/ri/src/test/resources/log4j.xml	2008-10-10 06:56:39 UTC (rev 2516)
@@ -24,7 +24,7 @@
     <param name="Target" value="System.out" />
     <param name="Threshold" value="INFO" />
     <layout class="org.apache.log4j.PatternLayout">
-      <param name="ConversionPattern" value="%d{HH:mm:ss,SSS} [%t] %-5p %C{1} : %m%n" />
+      <param name="ConversionPattern" value="%d{HH:mm:ss,SSS} %-5p [%c{1}] %m%n" />
     </layout>
   </appender>
 
@@ -32,17 +32,11 @@
   <!-- Limit categories -->
   <!-- ================ -->
 
-  <category name="org.jbpm">
-    <priority value="DEBUG" />
-  </category>
-
   <category name="org.hibernate">
     <priority value="INFO" />
   </category>
-
-  <!-- hide optimistic locking failures -->
-  <category name="org.hibernate.event.def.AbstractFlushingEventListener">
-    <priority value="FATAL" />
+  <category name="org.hibernate.persister">
+    <priority value="DEBUG" />
   </category>
 
   <!-- ======================= -->
@@ -54,4 +48,4 @@
     <appender-ref ref="FILE"/>
   </root>
 
-</log4j:configuration>
+</log4j:configuration>
\ No newline at end of file

Modified: projects/spec/trunk/pom.xml
===================================================================
--- projects/spec/trunk/pom.xml	2008-10-09 19:52:07 UTC (rev 2515)
+++ projects/spec/trunk/pom.xml	2008-10-10 06:56:39 UTC (rev 2516)
@@ -42,6 +42,7 @@
   <properties>
     <hibernate.version>3.2.6.ga</hibernate.version>
     <log4j.version>1.2.14</log4j.version>
+    <mysql.connector.version>5.1.6</mysql.connector.version>
     <slf4j.version>1.5.3</slf4j.version>
   </properties>
   
@@ -56,6 +57,11 @@
 
       <!-- Please sort by groupid -->      
       <dependency>
+        <groupId>mysql</groupId>
+        <artifactId>mysql-connector-java</artifactId>
+        <version>${mysql.connector.version}</version>
+      </dependency>
+      <dependency>
         <groupId>org.hibernate</groupId>
         <artifactId>hibernate</artifactId>
         <version>${hibernate.version}</version>
@@ -153,6 +159,29 @@
       </build>
     </profile>
 
+    <!-- 
+      Name:  no-database
+      Descr: Setup the default database   
+    -->
+    <profile>
+      <id>no-database</id>
+      <activation>
+        <property>
+          <name>!database</name>
+        </property>
+      </activation>
+      <properties>
+        <database>mysql</database>
+      </properties>
+      <dependencies>
+        <dependency>
+          <groupId>mysql</groupId>
+          <artifactId>mysql-connector-java</artifactId>
+          <scope>test</scope>
+        </dependency>
+      </dependencies>
+    </profile>
+
     <!--
       Name: skiptests
       Desc: Skips the tests 




More information about the jbpm-commits mailing list