[jbpm-commits] JBoss JBPM SVN: r4515 - in jbpm4/trunk/modules: distro/src/main/resources/config-tool/jbpm and 11 other directories.

do-not-reply at jboss.org do-not-reply at jboss.org
Thu Apr 9 10:28:55 EDT 2009


Author: tom.baeyens at jboss.com
Date: 2009-04-09 10:28:55 -0400 (Thu, 09 Apr 2009)
New Revision: 4515

Added:
   jbpm4/trunk/modules/distro/src/main/resources/config-tool/jbpm/jbpm.jpdl.eventlisteners.xml
   jbpm4/trunk/modules/examples/src/test/resources/jbpm.cache.xml
   jbpm4/trunk/modules/examples/src/test/resources/jbpm.definition.hbm.xml
   jbpm4/trunk/modules/examples/src/test/resources/jbpm.jpdl.eventlisteners.xml
   jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/EventListenerBinding.java
   jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/JpdlBinding.java
   jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/xml/BindingsParser.java
   jbpm4/trunk/modules/jpdl/src/test/resources/jbpm.cache.xml
   jbpm4/trunk/modules/jpdl/src/test/resources/jbpm.definition.hbm.xml
   jbpm4/trunk/modules/jpdl/src/test/resources/jbpm.jpdl.eventlisteners.xml
   jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/repository/DeploymentClassLoader.java
   jbpm4/trunk/modules/pvm/src/test/resources/jbpm.cache.xml
   jbpm4/trunk/modules/pvm/src/test/resources/jbpm.definition.hbm.xml
   jbpm4/trunk/modules/pvm/src/test/resources/jbpm.jpdl.eventlisteners.xml
   jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/eventlistener/
   jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/eventlistener/EventListenerTest.java
   jbpm4/trunk/modules/test-db/src/test/resources/jbpm.cache.xml
   jbpm4/trunk/modules/test-db/src/test/resources/jbpm.definition.hbm.xml
   jbpm4/trunk/modules/test-db/src/test/resources/jbpm.jpdl.eventlisteners.xml
Removed:
   jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/JpdlActivityBinding.java
   jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/xml/Activities.java
   jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/xml/ActivitiesParser.java
   jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/eventlistener/EventListenerTest.java
Modified:
   jbpm4/trunk/modules/api/src/main/resources/jpdl.xsd
   jbpm4/trunk/modules/distro/src/main/resources/config-tool/jbpm/jbpm.jpdl.activities.xml
   jbpm4/trunk/modules/examples/src/test/resources/jbpm.jpdl.activities.xml
   jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/EndBinding.java
   jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/EsbBinding.java
   jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/ExclusiveBinding.java
   jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/ForkBinding.java
   jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/HqlBinding.java
   jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/JavaActivity.java
   jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/JavaBinding.java
   jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/JoinBinding.java
   jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/ScriptBinding.java
   jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/StartBinding.java
   jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/StateBinding.java
   jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/TaskBinding.java
   jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/xml/JpdlParser.java
   jbpm4/trunk/modules/jpdl/src/test/resources/jbpm.jpdl.activities.xml
   jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/repository/DeploymentImpl.java
   jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/util/TagBinding.java
   jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/xml/Parser.java
   jbpm4/trunk/modules/pvm/src/test/resources/jbpm.jpdl.activities.xml
   jbpm4/trunk/modules/test-db/src/test/resources/jbpm.jpdl.activities.xml
Log:
JBPM-2027 adding event listeners implementation

Modified: jbpm4/trunk/modules/api/src/main/resources/jpdl.xsd
===================================================================
--- jbpm4/trunk/modules/api/src/main/resources/jpdl.xsd	2009-04-09 14:25:18 UTC (rev 4514)
+++ jbpm4/trunk/modules/api/src/main/resources/jpdl.xsd	2009-04-09 14:28:55 UTC (rev 4515)
@@ -42,6 +42,7 @@
     <complexType>
       <sequence minOccurs="0" maxOccurs="unbounded">
         <element ref="tns:swimlane" minOccurs="0" maxOccurs="unbounded"/>
+        <element ref="tns:on" minOccurs="0" maxOccurs="unbounded"/>
         <group ref="tns:activityGroup" minOccurs="0" maxOccurs="unbounded" />
       </sequence>
       <attribute name="name" use="required" type="string">
@@ -85,6 +86,7 @@
         </documentation></annotation>
         <complexType>
           <sequence>
+            <element ref="tns:on" minOccurs="0" maxOccurs="unbounded"/>
             <element ref="tns:transition" minOccurs="0" maxOccurs="unbounded" />
           </sequence>
           <attributeGroup ref="tns:activityAttributes" />
@@ -97,6 +99,7 @@
         </documentation></annotation>
         <complexType>
           <sequence>
+            <element ref="tns:on" minOccurs="0" maxOccurs="unbounded"/>
           </sequence>
           <attributeGroup ref="tns:activityAttributes" />
           <attribute name="ends" default="process-instance">
@@ -118,6 +121,7 @@
         </documentation></annotation>
         <complexType>
           <sequence>
+            <element ref="tns:on" minOccurs="0" maxOccurs="unbounded"/>
           </sequence>
           <attributeGroup ref="tns:activityAttributes" />
           <attribute name="ends" default="process-instance">
@@ -136,6 +140,7 @@
         </documentation></annotation>
         <complexType>
           <sequence>
+            <element ref="tns:on" minOccurs="0" maxOccurs="unbounded"/>
           </sequence>
           <attributeGroup ref="tns:activityAttributes" />
           <attribute name="ends" default="process-instance">
@@ -157,6 +162,7 @@
         </documentation></annotation>
         <complexType>
           <sequence>
+            <element ref="tns:on" minOccurs="0" maxOccurs="unbounded"/>
             <element ref="tns:transition" minOccurs="0" maxOccurs="unbounded" />
           </sequence>
           <attributeGroup ref="tns:activityAttributes" />
@@ -171,6 +177,7 @@
         <complexType>
           <sequence>
             <element name="handler" minOccurs="0" type="tns:wireObjectType" />
+            <element ref="tns:on" minOccurs="0" maxOccurs="unbounded"/>
             <element name="transition" minOccurs="0" maxOccurs="unbounded">
               <complexType>
                 <complexContent>
@@ -214,6 +221,7 @@
         </documentation></annotation>
         <complexType>
           <sequence>
+            <element ref="tns:on" minOccurs="0" maxOccurs="unbounded"/>
             <element ref="tns:transition" minOccurs="0" maxOccurs="unbounded" />
           </sequence>
           <attributeGroup ref="tns:activityAttributes" />
@@ -226,6 +234,7 @@
         </documentation></annotation>
         <complexType>
           <sequence>
+            <element ref="tns:on" minOccurs="0" maxOccurs="unbounded"/>
             <element ref="tns:transition" minOccurs="0" maxOccurs="unbounded" />
           </sequence>
           <attributeGroup ref="tns:activityAttributes" />
@@ -239,6 +248,7 @@
           <complexContent>
             <extension base="tns:scriptType">
               <sequence>
+                <element ref="tns:on" minOccurs="0" maxOccurs="unbounded"/>
                 <element ref="tns:transition" minOccurs="0" maxOccurs="unbounded" />
               </sequence>
               <attributeGroup ref="tns:activityAttributes" />
@@ -254,6 +264,7 @@
           <complexContent>
             <extension base="tns:qlType">
               <sequence>
+                <element ref="tns:on" minOccurs="0" maxOccurs="unbounded"/>
                 <element ref="tns:transition" minOccurs="0" maxOccurs="unbounded" />
               </sequence>
               <attributeGroup ref="tns:activityAttributes" />
@@ -269,6 +280,7 @@
           <complexContent>
             <extension base="tns:qlType">
               <sequence>
+                <element ref="tns:on" minOccurs="0" maxOccurs="unbounded"/>
                 <element ref="tns:transition" minOccurs="0" maxOccurs="unbounded" />
               </sequence>
               <attributeGroup ref="tns:activityAttributes" />
@@ -287,6 +299,7 @@
           <complexContent>
             <extension base="tns:javaType">
               <sequence>
+                <element ref="tns:on" minOccurs="0" maxOccurs="unbounded"/>
                 <element ref="tns:transition" minOccurs="0" maxOccurs="unbounded" />
               </sequence>
               <attributeGroup ref="tns:activityAttributes" />
@@ -302,6 +315,7 @@
           <complexContent>
             <extension base="tns:esbType">
               <sequence>
+                <element ref="tns:on" minOccurs="0" maxOccurs="unbounded"/>
                 <element ref="tns:transition" minOccurs="0" maxOccurs="unbounded" />
               </sequence>
               <attributeGroup ref="tns:activityAttributes" />
@@ -316,10 +330,12 @@
         <complexType>
           <sequence>
             <element name="assignment-handler" minOccurs="0"  type="tns:wireObjectType" />
+            <element ref="tns:on" minOccurs="0" maxOccurs="unbounded"/>
             <element ref="tns:transition" minOccurs="0" maxOccurs="unbounded" />
           </sequence>
           <attributeGroup ref="tns:activityAttributes" />
           <attributeGroup ref="tns:assignmentAttributes"/>
+          <attribute name="swimlane" type="string" />
           <attribute name="on-transition" default="cancel">
             <simpleType>
               <restriction base="string">
@@ -370,58 +386,6 @@
           <attributeGroup ref="tns:activityAttributes" />
         </complexType>
       </element>
-    
-      <element name="activity">
-        <annotation><documentation>Executes an activity implementation.
-        </documentation></annotation>
-        <complexType>
-          <sequence>
-            <group ref="tns:delegationGroup"/>
-            <element ref="tns:transition" minOccurs="0" maxOccurs="unbounded" />
-            <element ref="tns:on" minOccurs="0" maxOccurs="unbounded">
-              <annotation><documentation>Events on which listeners can be registered.</documentation></annotation>
-            </element>
-          </sequence> 
-          <attributeGroup ref="tns:activityAttributes" />
-        </complexType>
-      </element>
-      
-      <element name="email">
-        <annotation><documentation>Sends an email
-        </documentation></annotation>
-        <complexType>
-          <complexContent>
-            <extension base="tns:emailType">
-              <sequence>
-                <element ref="tns:transition" minOccurs="0" maxOccurs="unbounded" />
-                <element ref="tns:on" minOccurs="0" maxOccurs="unbounded">
-                  <annotation><documentation>Events on which listeners can be registered.</documentation></annotation>
-                </element>
-              </sequence>
-              <attributeGroup ref="tns:activityAttributes" />
-            </extension>
-          </complexContent>
-        </complexType>
-      </element>
-      
-      <element name="task">
-        <annotation><documentation>Creates a human task
-        </documentation></annotation>
-        <complexType>
-          <complexContent>
-            <extension base="tns:taskType">
-              <sequence>
-                <element ref="tns:transition" minOccurs="0" maxOccurs="unbounded" />
-                <element ref="tns:on" minOccurs="0" maxOccurs="unbounded">
-                  <annotation><documentation>Events on which listeners can be registered.</documentation></annotation>
-                </element>
-                <element ref="tns:timer" minOccurs="0" maxOccurs="unbounded"/>
-              </sequence>
-              <attributeGroup ref="tns:activityAttributes" />
-            </extension>
-          </complexContent>
-        </complexType>
-      </element>
       -->
     </choice>
   </group>
@@ -593,98 +557,49 @@
       tasks and swimlanes to specify to whom these respectively are assigned.
     </documentation></annotation>
     <attribute name="assignee" type="string">
-      <annotation><documentation>An expression '#{expr}' that resolves to an identifier of 
-        the actual actor that needs to execute the task. It can be a literal as well.
+      <annotation><documentation>Expression that resolves to a userId referencing 
+      the person to which the task or swimlane will be assigned.
       </documentation></annotation>
     </attribute>
     <attribute name="assignee-lang" type="string">
-      <annotation><documentation>The expression language to use to evaluate the assignee 
-        expression.
+      <annotation><documentation>Expression language for the assignee attribute.
       </documentation></annotation>
     </attribute>
-    <attribute name="candidate-groups" type="string">
-      <annotation><documentation>An expression '#{expr}' that resolves to a comma separated
-        list of groups of actors with candidates to execute the task.
-      </documentation></annotation>
-    </attribute>
-    <attribute name="candidate-groups-lang" type="string">
-      <annotation><documentation>The expression language to use to evaluate the candidate-groups 
-        expression.
-      </documentation></annotation>
-    </attribute>
     <attribute name="candidate-users" type="string">
-      <annotation><documentation>An expression '#{expr}' that resolves to a comma separated
-        list of actors that are candidate to execute the task.
-      </documentation></annotation>
+      <annotation><documentation>Expression that resolves to a comma separated 
+      list of userId's. All the referred people will be candidates for 
+      take the task or swimlane.</documentation></annotation>
     </attribute>
     <attribute name="candidate-users-lang" type="string">
-      <annotation><documentation>The expression language to use to evaluate the candidate-users 
-        expression.
-      </documentation></annotation>
+      <annotation><documentation>Expression language for the 
+      candidate-users attribute.</documentation></annotation>
     </attribute>
-    <attribute name="swimlane" type="string">
-      <annotation><documentation>The name of the swimlane that will contain the actor that
-        needs to execute the task.
-      </documentation></annotation>
-    </attribute>
-  </attributeGroup>
-  
-<!--   <complexType name="assignmentType">
-    <annotation><documentation>An element of type assignmentType will be used in 
-      tasks and swimlanes to specify to whom these respectively are assigned.
-    </documentation></annotation>
-    <attribute name="assignee" type="string">
-      <annotation><documentation>An expression '#{expr}' that resolves to an identifier of 
-        the actual actor that needs to execute the task. It can be a literal as well.
-      </documentation></annotation>
-    </attribute>
     <attribute name="candidate-groups" type="string">
-      <annotation><documentation>An expression '#{expr}' that resolves to a comma separated
-        list of groups of actors with candidates to execute the task.
-      </documentation></annotation>
+      <annotation><documentation>Resolves to a comma separated list of groupId's.  
+      All the referred people will be candidates to 
+      take the task or swimlane.</documentation></annotation>
     </attribute>
-    <attribute name="candidate-users" type="string">
-      <annotation><documentation>An expression '#{expr}' that resolves to a comma separated
-        list of actors that are candidate to execute the task.
-      </documentation></annotation>
+    <attribute name="candidate-groups-lang" type="string">
+      <annotation><documentation>Expression language for the 
+      candidate-groups attribute.</documentation></annotation>
     </attribute>
-    <attribute name="swimlane" type="string">
-      <annotation><documentation>The name of the swimlane that will contain the actor that
-        needs to execute the task.
-      </documentation></annotation>
-    </attribute>
-  </complexType> 
+  </attributeGroup>
   
-  <element name="assignment" type="tns:assignmentType">
-    <annotation><documentation>The assignment which specifies who needs to execute
-      task or who is among the candidates to execute it.
-    </documentation></annotation>
-  </element> -->
-  
-  <complexType name="swimlaneType">
-    <annotation><documentation>Elements of type swimlaneType will be used in the 
-      process to enumerate all the participating swimlanes. 
-    </documentation></annotation>
-    <sequence>
-    </sequence>
-    <attribute name="name" type="string"/>
-    <attributeGroup ref="tns:assignmentAttributes"></attributeGroup>
-  </complexType>
-  
-  <element name="swimlane" type="tns:swimlaneType"  >
-    <annotation><documentation>A participating swimlane for this process
-    </documentation></annotation>
+  <element name="swimlane">
+    <annotation><documentation>A process role.</documentation></annotation>
+    <complexType>
+      <attribute name="name" type="string" use="required" />
+      <attributeGroup ref="tns:assignmentAttributes" />
+    </complexType>
   </element>
   
   <complexType name="transitionType">
     <annotation><documentation>The outgoing transitions.  The first in the list 
       will be the default outgoing transition.
     </documentation></annotation>
-    <!-- 
     <sequence>
-      <group ref="tns:eventListenerGroup" />
+      <group ref="tns:eventListenerGroup" minOccurs="0" maxOccurs="unbounded" />
     </sequence>
-    -->
     <attribute name="name" type="string">
       <annotation><documentation>Name of this outgoing transition</documentation></annotation>
     </attribute>
@@ -703,84 +618,30 @@
   </element>
   
   <element name="on">
-    <annotation><documentation>Events on which listeners can be registered.</documentation></annotation>
     <complexType>
-      <!-- 
       <sequence>
         <group ref="tns:eventListenerGroup" minOccurs="0" maxOccurs="unbounded">
           <annotation><documentation>A list of event listeners that will 
           be notified when the event is fired</documentation></annotation>
         </group>
       </sequence>
-      -->
       <attribute name="event" type="string">
-        <annotation><documentation>The event identification
+        <annotation><documentation>The event identification.  start, end, take or 
+        any other custom event.
         </documentation></annotation>
       </attribute>
     </complexType>
   </element>
   
-  <!-- 
-
   <group name="eventListenerGroup">
     <choice>
-      <element name="notify">
-        <annotation><documentation>Calls the notify method on an 
-        EventListener.
+      <element name="event-listener" type="tns:wireObjectType" >
+        <annotation><documentation>An EventListener
         </documentation></annotation>
-        <complexType>
-          <group ref="tns:delegationGroup" />
-          <attribute name="object" type="string">
-            <annotation><documentation>The reference to an object that is declared 
-            in the objects section of this process definition.
-            </documentation></annotation>
-          </attribute>
-          <attribute name="expr" type="string">
-            <annotation><documentation>The expression that will resolve to 
-            an Activity implementation.</documentation></annotation>
-          </attribute>
-        </complexType>
       </element>
-      <element name="invoke" type="tns:invokeType">
-        <annotation><documentation>Invokes a method on a Java object
-        through reflection.  The return value can be captured in a 
-        process variable.
-        </documentation></annotation>
-      </element>
-      <element name="script" type="tns:scriptType">
-        <annotation><documentation>Evaluates a piece of text as a script
-        </documentation></annotation>
-      </element>
-      <element name="email" type="tns:emailType">
-        <annotation><documentation>Sends an email
-        </documentation></annotation>
-      </element>
-      <element ref="tns:timer">
-        <annotation><documentation>Creates a timer.
-        </documentation></annotation>
-      </element>
     </choice>
   </group>
 
-  <complexType name="scriptType">
-    <sequence>
-      <element name="expr" type="string">
-        <annotation><documentation>The content of this expression element 
-        is the script text that will be evaluated.  This is mutually 
-        exclusive with the expression attribute.</documentation></annotation>
-      </element>
-    </sequence>
-    <attribute name="expr" type="string">
-      <annotation><documentation>The script text that will be evaluated.  This 
-      is mutually exclusive with the expression element.
-      </documentation></annotation>
-    </attribute>
-    <attribute name="lang" type="string">
-      <annotation><documentation>Identification of the scripting language 
-      to use.</documentation></annotation>
-    </attribute>
-  </complexType>
-
   <complexType name="emailType">
     <sequence>
       <element name="property">
@@ -797,55 +658,26 @@
     </attribute>
   </complexType>
 
-  <element name="timer">
-    <annotation><documentation>A timer that will be bound to the most inner enclosing scope.
-    Timers can give a signal to an activity instance.  The signal will correspond to a transition 
-    or to an event being fired.
-    </documentation></annotation>
-    <complexType>
-      <choice minOccurs="0" maxOccurs="unbounded">
-        <group ref="tns:eventListenerGroup">
-          <annotation><documentation>An inline list of event listeners 
-          on a timer is a short cut for defining the event separately.
-          </documentation></annotation>
-        </group>
-      </choice>
-      <attribute name="duedate" type="string" use="required" />
-      <attribute name="signal" type="string"  use="required">
-        <annotation><documentation>Refers to the signal that will be used.
-        If inline event listeners are declared, the signal name can not be 
-        the same as an event that is declared in this scope.
-        </documentation></annotation>
-      </attribute>
-      <attribute name="repeat" type="string" />
-    </complexType>
-  </element>
-
-  <complexType name="taskType">
+  <complexType name="taskType" >
+    <!-- 
     <sequence>
-      <element ref="tns:assignment" />
       <element name="reminder">
         <complexType>
           <attribute name="duedate" type="string" use="required" />
           <attribute name="repeat" type="string" />
         </complexType>
       </element>
-      <element ref="tns:subtask" />
     </sequence>
-    <attribute name="title" type="string">
-    </attribute>
+    -->
+    <attributeGroup ref="tns:assignmentAttributes" />
     <attribute name="form" type="string">
     </attribute>
     <attribute name="swimlane" type="string">
     </attribute>
     <attribute name="description" type="string" />
     <attribute name="duedate" type="string" />
-    <attribute name="priority" type="tns:priorityType" default="normal" />
     <attribute name="notify" type="boolean" default="false"/>
-    <attribute name="dynamic" type="boolean" default="true">
-      <annotation><documentation>Is dynamic creation of subtasks 
-      allowed ?</documentation></annotation>
-    </attribute>
+    <!-- 
     <attribute name="subtasksync">
       <simpleType>
         <union>
@@ -871,8 +703,34 @@
         </union>
       </simpleType>
     </attribute>
+    -->
   </complexType>
   
+  <!-- 
+  <element name="timer">
+    <annotation><documentation>A timer that will be bound to the most inner enclosing scope.
+    Timers can give a signal to an activity instance.  The signal will correspond to a transition 
+    or to an event being fired.
+    </documentation></annotation>
+    <complexType>
+      <choice minOccurs="0" maxOccurs="unbounded">
+        <group ref="tns:eventListenerGroup">
+          <annotation><documentation>An inline list of event listeners 
+          on a timer is a short cut for defining the event separately.
+          </documentation></annotation>
+        </group>
+      </choice>
+      <attribute name="duedate" type="string" use="required" />
+      <attribute name="signal" type="string"  use="required">
+        <annotation><documentation>Refers to the signal that will be used.
+        If inline event listeners are declared, the signal name can not be 
+        the same as an event that is declared in this scope.
+        </documentation></annotation>
+      </attribute>
+      <attribute name="repeat" type="string" />
+    </complexType>
+  </element>
+
   <simpleType name="priorityType">
     <restriction base="string">
       <enumeration value="highest"/>
@@ -885,52 +743,40 @@
 
   <element name="subtask" type="tns:taskType">
     <annotation><documentation>Subtask in a task activity.</documentation></annotation>
-  </element>
+  </element> 
+
+  <complexType name="assignmentType">
+    <annotation><documentation>An element of type assignmentType will be used in 
+      tasks and swimlanes to specify to whom these respectively are assigned.
+    </documentation></annotation>
+    <attribute name="assignee" type="string">
+      <annotation><documentation>An expression '#{expr}' that resolves to an identifier of 
+        the actual actor that needs to execute the task. It can be a literal as well.
+      </documentation></annotation>
+    </attribute>
+    <attribute name="candidate-groups" type="string">
+      <annotation><documentation>An expression '#{expr}' that resolves to a comma separated
+        list of groups of actors with candidates to execute the task.
+      </documentation></annotation>
+    </attribute>
+    <attribute name="candidate-users" type="string">
+      <annotation><documentation>An expression '#{expr}' that resolves to a comma separated
+        list of actors that are candidate to execute the task.
+      </documentation></annotation>
+    </attribute>
+    <attribute name="swimlane" type="string">
+      <annotation><documentation>The name of the swimlane that will contain the actor that
+        needs to execute the task.
+      </documentation></annotation>
+    </attribute>
+  </complexType> 
   
-  <element name="swimlane">
-    <annotation><documentation>A process role.</documentation></annotation>
-    <complexType>
-      <sequence>
-        <element ref="tns:assignment"/>
-      </sequence>
-      <attribute name="name" type="string" use="required" />
-    </complexType>
+  <element name="assignment" type="tns:assignmentType">
+    <annotation><documentation>The assignment which specifies who needs to execute
+      task or who is among the candidates to execute it.
+    </documentation></annotation>
   </element>
+
+  -->
   
-  <element name="assignment">
-    <annotation><documentation>Specifies how a task or a swimlane should be assigned 
-    to a specific user or who will be identified as a candidate for it.</documentation></annotation>
-    <complexType>
-      <sequence minOccurs="0">
-        <group ref="tns:delegationGroup">
-          <annotation><documentation>An object that implements the 
-          Assigner interface.
-          </documentation></annotation>
-        </group>
-      </sequence>
-	    <attribute name="assignee" type="string">
-	      <annotation><documentation>User ID of the person to which the task
-	      or swimlane will be assigned.
-	      </documentation></annotation>
-	    </attribute>
-	    <attribute name="assignee-expr" type="string">
-	      <annotation><documentation>Expression that resolves to a 
-	      User ID to which the task or swimlane will be assigned.
-	      </documentation></annotation>
-	    </attribute>
-	    <attribute name="candidates" type="string">
-	      <annotation><documentation>Comma separated list of User ID's 
-	      or Group ID's.  All the referred people will be candidates to 
-	      take the task or swimlane.</documentation></annotation>
-	    </attribute>
-	    <attribute name="candidate-expr" type="string">
-	      <annotation><documentation>Expression that resolves to a 
-	      comma separated list of User ID's or Group ID's.  All the 
-	      referred people will be candidates to 
-	      take the task or swimlane.</documentation></annotation>
-	    </attribute>
-    </complexType>
-  </element>
-  -->  
-  
 </schema>

Modified: jbpm4/trunk/modules/distro/src/main/resources/config-tool/jbpm/jbpm.jpdl.activities.xml
===================================================================
--- jbpm4/trunk/modules/distro/src/main/resources/config-tool/jbpm/jbpm.jpdl.activities.xml	2009-04-09 14:25:18 UTC (rev 4514)
+++ jbpm4/trunk/modules/distro/src/main/resources/config-tool/jbpm/jbpm.jpdl.activities.xml	2009-04-09 14:28:55 UTC (rev 4515)
@@ -1,5 +1,4 @@
 <activities>
-  <schema resource="jpdl.xsd" />
   <activity binding="org.jbpm.jpdl.internal.activity.StartBinding" />
   <activity binding="org.jbpm.jpdl.internal.activity.StateBinding" />
   <activity binding="org.jbpm.jpdl.internal.activity.ExclusiveBinding" />

Copied: jbpm4/trunk/modules/distro/src/main/resources/config-tool/jbpm/jbpm.jpdl.eventlisteners.xml (from rev 4513, jbpm4/branches/tbaeyens/modules/distro/src/main/resources/config-tool/jbpm/jbpm.jpdl.eventlisteners.xml)
===================================================================
--- jbpm4/trunk/modules/distro/src/main/resources/config-tool/jbpm/jbpm.jpdl.eventlisteners.xml	                        (rev 0)
+++ jbpm4/trunk/modules/distro/src/main/resources/config-tool/jbpm/jbpm.jpdl.eventlisteners.xml	2009-04-09 14:28:55 UTC (rev 4515)
@@ -0,0 +1,4 @@
+<eventlisteners>
+  <eventlistener binding="org.jbpm.jpdl.internal.activity.JavaBinding" />
+  <eventlistener binding="org.jbpm.jpdl.internal.activity.EventListenerBinding" />
+</eventlisteners>

Copied: jbpm4/trunk/modules/examples/src/test/resources/jbpm.cache.xml (from rev 4513, jbpm4/branches/tbaeyens/modules/examples/src/test/resources/jbpm.cache.xml)
===================================================================
--- jbpm4/trunk/modules/examples/src/test/resources/jbpm.cache.xml	                        (rev 0)
+++ jbpm4/trunk/modules/examples/src/test/resources/jbpm.cache.xml	2009-04-09 14:28:55 UTC (rev 4515)
@@ -0,0 +1,39 @@
+<hibernate-cache>
+
+  <class-cache class="org.jbpm.pvm.internal.model.ProcessDefinitionImpl" />
+	<class-cache class="org.jbpm.pvm.internal.model.ActivityImpl" />
+	<class-cache class="org.jbpm.pvm.internal.model.TransitionImpl" />
+	<class-cache class="org.jbpm.pvm.internal.model.EventImpl" />
+	<class-cache class="org.jbpm.pvm.internal.model.ExceptionHandlerImpl" />
+	<class-cache class="org.jbpm.pvm.internal.model.ObjectReference" />
+  <class-cache class="org.jbpm.pvm.internal.model.VariableDefinitionImpl" />
+  <class-cache class="org.jbpm.pvm.internal.model.TimerDefinitionImpl" />
+  <class-cache class="org.jbpm.pvm.internal.wire.descriptor.AbstractDescriptor" />
+
+	<collection-cache collection="org.jbpm.pvm.internal.model.ProcessDefinitionImpl.exceptionHandlers" />
+	<collection-cache collection="org.jbpm.pvm.internal.model.ProcessDefinitionImpl.events" />
+	<collection-cache collection="org.jbpm.pvm.internal.model.ProcessDefinitionImpl.activities" />
+	<collection-cache collection="org.jbpm.pvm.internal.model.ProcessDefinitionImpl.variableDefinitions" />
+	<collection-cache collection="org.jbpm.pvm.internal.model.ProcessDefinitionImpl.timerDefinitions" />
+  <collection-cache collection="org.jbpm.pvm.internal.model.ProcessDefinitionImpl.attachments" />
+
+	<collection-cache collection="org.jbpm.pvm.internal.model.ActivityImpl.exceptionHandlers" />
+	<collection-cache collection="org.jbpm.pvm.internal.model.ActivityImpl.events" />
+	<collection-cache collection="org.jbpm.pvm.internal.model.ActivityImpl.activities" />
+	<collection-cache collection="org.jbpm.pvm.internal.model.ActivityImpl.variableDefinitions" />
+	<collection-cache collection="org.jbpm.pvm.internal.model.ActivityImpl.timerDefinitions" />
+	<collection-cache collection="org.jbpm.pvm.internal.model.ActivityImpl.incomingTransitions" />
+	<collection-cache collection="org.jbpm.pvm.internal.model.ActivityImpl.outgoingTransitions" />
+
+	<collection-cache collection="org.jbpm.pvm.internal.model.TransitionImpl.exceptionHandlers" />
+	<collection-cache collection="org.jbpm.pvm.internal.model.TransitionImpl.events" />
+
+	<collection-cache collection="org.jbpm.pvm.internal.model.EventImpl.exceptionHandlers" />
+	<collection-cache collection="org.jbpm.pvm.internal.model.EventImpl.listenerReferences" />
+	  
+	<collection-cache collection="org.jbpm.pvm.internal.model.ExceptionHandlerImpl.eventListenerReferences" />
+
+  <collection-cache collection="org.jbpm.pvm.internal.wire.descriptor.ObjectDescriptor.argDescriptors" />
+  <collection-cache collection="org.jbpm.pvm.internal.wire.descriptor.ObjectDescriptor.operations" />
+	
+</hibernate-cache>

Copied: jbpm4/trunk/modules/examples/src/test/resources/jbpm.definition.hbm.xml (from rev 4513, jbpm4/branches/tbaeyens/modules/examples/src/test/resources/jbpm.definition.hbm.xml)
===================================================================
--- jbpm4/trunk/modules/examples/src/test/resources/jbpm.definition.hbm.xml	                        (rev 0)
+++ jbpm4/trunk/modules/examples/src/test/resources/jbpm.definition.hbm.xml	2009-04-09 14:28:55 UTC (rev 4515)
@@ -0,0 +1,646 @@
+<?xml version="1.0"?>
+<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+
+<hibernate-mapping package="org.jbpm.pvm.internal.model" default-access="field">
+
+  <!-- ### PROCESS DEFINITION ############################################# -->
+  <class name="ProcessDefinitionImpl" 
+         table="JBPM_PROCESS"
+         discriminator-value="pvm">
+    <!-- ProcessElementImpl part ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
+    <id name="dbid" column="DBID_">
+      <generator class="native" />
+    </id>
+    <discriminator><column name="CLASS_" /></discriminator>
+
+    <version name="dbversion" column="DBVERSION_" />
+    <many-to-one name="properties"
+                 class="WireProperties" 
+                 column="PROPS_" 
+                 foreign-key="FK_PROCDEF_PROPS"
+                 index="IDX_PROCDEF_PROPS"
+                 cascade="all" />
+    <list name="exceptionHandlers" cascade="all">
+      <key foreign-key="FK_EXHDLR_PROCESS">
+        <column name="PROCESS_" index="IDX_EXHDLR_PROCESS"/>
+      </key>
+      <index column="PROCESS_IDX_" />
+      <one-to-many class="ExceptionHandlerImpl"/>
+    </list>
+
+    <!-- ObservableElementImpl part ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
+    <property name="name" column="NAME_" />
+    <property name="description" column="DESCR_" />
+    <map name="events" cascade="all-delete-orphan">
+      <key foreign-key="FK_EVENT_PROCESS">
+        <column name="PROCESS_" index="IDX_EVENT_PROCESS" />
+      </key>
+      <map-key type="string" column="NAME_" />
+      <one-to-many class="org.jbpm.pvm.internal.model.EventImpl"/>
+    </map>
+
+    <!-- CompositeElementImpl part ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
+    <list name="activities" cascade="all" inverse="false">
+      <key foreign-key="FK_ACTS_PROCESS">
+        <column name="ACTSPROCESS_" index="IDX_ACTS_PROCESS"/>
+      </key>
+      <list-index column="ACTSPROCESS_IDX_" />
+      <one-to-many class="ActivityImpl" />
+    </list>
+    <property name="hasVariableDefinitions" column="HAS_VAR_DEF_" />
+    <list name="variableDefinitions" cascade="all">
+      <key foreign-key="FK_VARDEF_PROCESS">
+        <column name="PROCESS_" index="IDX_VARDEF_PROCESS"/>
+      </key>
+      <index column="PROCESS_IDX_" />
+      <one-to-many class="VariableDefinitionImpl" />
+    </list>
+    <property name="hasTimerDefinitions" column="HAS_TIMER_DEF_" />
+    <set name="timerDefinitions" cascade="all">
+      <key foreign-key="FK_TMRDEF_PROCESS">
+        <column name="PROCESS_" index="IDX_TMRDEF_PROCESS"/>
+      </key>
+      <one-to-many class="TimerDefinitionImpl" />
+    </set>
+
+    <!-- ProcessDefinitionImpl part ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
+    <property name="key" column="KEY_" />
+    <property name="id" column="ID_" unique="true" />
+
+    <property name="packageName" column="PACKAGE_" />
+    <property name="version" column="VERSION_" />
+    <property name="deploymentTime" column="DEPLOYED_" />
+    <many-to-one name="initial" 
+                 column="INITIAL_"
+                 class="ActivityImpl"
+                 cascade="all" 
+                 foreign-key="FK_PROCDEF_INITIAL"
+                 index="IDX_PROCDEF_INIT"
+                 fetch="select" />
+
+    <map name="attachments" cascade="all-delete-orphan">
+      <key foreign-key="FK_LOB_PROCESS">
+        <column name="PROCESS_" index="IDX_LOB_PROCESS" />
+      </key>
+      <map-key type="string" column="NAME_" />
+      <one-to-many class="org.jbpm.pvm.internal.lob.Lob"/>
+    </map>
+  </class>
+
+  <!-- ### Activity ############################################################## -->
+  <class name="ActivityImpl" table="JBPM_ACTIVITY">
+    <!-- ProcessElementImpl part ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
+    <id name="dbid" column="DBID_">
+      <generator class="native" />
+    </id>
+    <version name="dbversion" column="DBVERSION_" />
+    <many-to-one name="processDefinition"
+                 class="ProcessDefinitionImpl" 
+                 column="PROCESS_" 
+                 foreign-key="FK_ACT_PROCESS"
+                 index="IDX_ACT_PROCESS" />
+    <many-to-one name="properties"
+                 class="WireProperties" 
+                 column="PROPS_" 
+                 foreign-key="FK_ACT_PROPS"
+                 index="IDX_ACT_PROPS"
+                 cascade="all" />
+    <list name="exceptionHandlers" cascade="all">
+      <key foreign-key="FK_EXHDLR_ACT">
+        <column name="ACT_" index="IDX_EXHDLR_ACT"/>
+      </key>
+      <index column="ACT_IDX_" />
+      <one-to-many class="ExceptionHandlerImpl" />
+    </list>
+
+    <!-- ObservableElementImpl part ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
+    <property name="name" column="NAME_"/>
+    <property name="description" column="DESCR_"/>
+    <map name="events" cascade="all-delete-orphan">
+      <key foreign-key="FK_EVENT_ACT">
+        <column name="ACT_" index="IDX_EVENT_ACT" />
+      </key>
+      <map-key type="string" column="NAME_" />
+      <one-to-many class="org.jbpm.pvm.internal.model.EventImpl" />
+    </map>
+
+    <!-- CompositeElementImpl part ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
+    <list name="activities" cascade="all" inverse="false">
+      <key column="PARENT_" foreign-key="none" />
+      <list-index column="PARENT_IDX_" />
+      <one-to-many class="ActivityImpl" />
+    </list>
+    <property name="hasVariableDefinitions" column="HAS_VAR_DEF_" />
+    <list name="variableDefinitions" cascade="all">
+      <key foreign-key="FK_VARDEF_ACT">
+        <column name="ACT_" index="IDX_VARDEF_ACT"/>
+      </key>
+      <index column="ACT_IDX_" />
+      <one-to-many class="VariableDefinitionImpl" />
+    </list>
+    <property name="hasTimerDefinitions" column="HAS_TIMER_DEF_" />
+    <set name="timerDefinitions" cascade="all">
+      <key foreign-key="FK_TMRDEF_ACT">
+        <column name="ACT_" index="IDX_TMRDEF_ACT"/>
+      </key>
+      <one-to-many class="TimerDefinitionImpl" />
+    </set>
+
+    <!-- ActivityImpl part ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
+    <property name="type" column="TYPE_" />
+    <property name="isLocalScope" column="LOCAL_SCOPE_" />
+    <property name="isExecutionAsync" column="EXEC_ASYNC_" />
+    <property name="isSignalAsync" column="SIGNAL_ASYNC_" />
+    <property name="isPreviousNeeded" column="PREV_NEEDED_" />
+
+    <many-to-one name="parentActivity" 
+                 column="PARENT_"
+                 class="ActivityImpl"
+                 cascade="all"
+                 foreign-key="FK_ACT_PARENT" 
+                 index="IDX_ACT_PARENT" />
+
+    <many-to-one name="defaultTransition"
+                 column="DEFTRANS_" 
+                 class="TransitionImpl"
+                 fetch="select"
+                 foreign-key="FK_ACT_DEFTRANS" 
+                 index="IDX_ACT_DEFTRANS" />
+
+    <list name="incomingTransitions" inverse="false">
+      <key column="DESTINATION_" />
+      <index column="IN_IDX_" />
+      <one-to-many class="TransitionImpl" />
+    </list>
+
+    <list name="outgoingTransitions" inverse="false" cascade="all">
+      <key column="SOURCE_" />
+      <index column="OUT_IDX_" />
+      <one-to-many class="TransitionImpl" />
+    </list>
+
+    <component name="behaviourReference" class="ObjectReference">
+      <many-to-one name="descriptor"
+                   column="BEHAV_DESCR_" 
+                   cascade="all"
+                   class="org.jbpm.pvm.internal.wire.descriptor.AbstractDescriptor"
+                   foreign-key="FK_NODE_BEHAV_DESCR"
+                   index="IDX_NODE_BEHAV_DESCR" />
+      <any name="object" id-type="long" cascade="all">
+        <!--  TODO: Specify names for classes -->
+        <!--        <meta-value value="bpel::activity" class="org.jbpm.pvm.bpel.BpelActivity"/> -->
+        <column name="BEHAV_CLASS_" />
+        <column name="BEHAV_ID_" />
+      </any>
+    </component>
+  </class>
+
+  <!-- ### TRANSITION ##################################################### -->
+  <class name="TransitionImpl" table="JBPM_TRANSITION">
+    <!-- ProcessElementImpl part ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
+    <id name="dbid" column="DBID_">
+      <generator class="native" />
+    </id>
+    <version name="dbversion" column="DBVERSION_" />
+    <many-to-one name="processDefinition"
+                 class="ProcessDefinitionImpl" 
+                 column="PROCESS_" 
+                 foreign-key="FK_TRANS_PROCDEF"
+                 index="IDX_TRANS_PROCDEF" />
+    <many-to-one name="properties"
+                 class="WireProperties" 
+                 column="PROPS_" 
+                 foreign-key="FK_TRANS_PROPS"
+                 index="IDX_TRANS_PROPS"
+                 cascade="all" />
+    <list name="exceptionHandlers" cascade="all">
+      <key foreign-key="FK_EXHDLR_TRANS">
+        <column name="TRANSITION_" index="IDX_EXHDLR_TRANS" />
+      </key>
+      <index column="TRANSITION_IDX_" />
+      <one-to-many class="ExceptionHandlerImpl" />
+    </list>
+
+    <!-- ObservableElementImpl part ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
+    <property name="name" column="NAME_" />
+    <property name="description" column="DESCR_" />
+    <map name="events" cascade="all-delete-orphan">
+      <key foreign-key="FK_EVENT_TRANS">
+        <column name="TRANSITION_" index="IDX_EVENT_TRANS" />
+      </key>
+      <map-key type="string" column="NAME_" />
+      <one-to-many class="org.jbpm.pvm.internal.model.EventImpl" />
+    </map>
+    
+    <!-- TransitionImpl part ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
+    <many-to-one name="source"
+                 column="SRC_" 
+                 class="ActivityImpl" 
+                 fetch="select" 
+                 foreign-key="FK_TRANS_SRC" 
+                 index="IDX_TRANS_SRC" />
+
+    <many-to-one name="destination"
+                 column="DEST_" 
+                 class="ActivityImpl" 
+                 fetch="select"
+                 cascade="all"
+                 foreign-key="FK_TRANS_DST" 
+                 index="IDX_TRANS_DST" />
+
+    <many-to-one name="conditionDescriptor" 
+                 column="COND_DESCR_"
+                 class="org.jbpm.pvm.internal.wire.descriptor.AbstractDescriptor"
+                 cascade="all"
+                 foreign-key="FK_TRANS_COND"
+                 index="IDX_TRANS_COND" />
+                 
+    <!-- 
+    <many-to-one name="waitConditionDescriptor" 
+                 column="WAIT_DESCR_"
+                 class="org.jbpm.pvm.internal.wire.descriptor.AbstractDescriptor"
+                 cascade="all"
+                 foreign-key="FK_TRANS_WAIT_DESCR" 
+                 index="IDX_TRANS_WAIT_DESCR" />
+    -->
+    
+    <property name="isTakeAsync" column="TAKEASYNC_" />
+  </class>
+
+  <!-- ### EVENT ########################################################## -->
+  <class name="EventImpl" table="JBPM_EVENT">
+    <!-- ProcessElementImpl part ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
+    <id name="dbid" column="DBID_">
+      <generator class="native" />
+    </id>
+    <version name="dbversion" column="DBVERSION_" />
+    <many-to-one name="processDefinition"
+                 class="ProcessDefinitionImpl" 
+                 column="PROCESSDEF_" 
+                 foreign-key="FK_EVENT_PROCDEF" 
+                 index="IDX_EVENT_PROCDEF" />
+    <many-to-one name="properties"
+                 class="WireProperties" 
+                 column="PROPS_" 
+                 foreign-key="FK_EVENT_PROPS"
+                 index="IDX_EVENT_PROPS"
+                 cascade="all" />
+    <list name="exceptionHandlers" cascade="all">
+      <key foreign-key="FK_EXHDLR_EVENT">
+        <column name="EVENT_" index="IDX_EXHDLR_EVENT"/>
+      </key>
+      <index column="EVENT_IDX_" />
+      <one-to-many class="ExceptionHandlerImpl" />
+    </list>
+
+    <!-- EventImpl part ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
+    <property name="name" column="NAME_" />
+    <list name="listenerReferences" table="JBPM_OBJECTREFERENCES" cascade="all-delete-orphan">
+      <key foreign-key="FK_OBJECTREF_EVENT">
+        <column name="EVENT_" index="IDX_OBJREF_EVENT"/>
+      </key>
+      <list-index column="EVENT_IDX_" />
+      <one-to-many class="EventListenerReference" />
+    </list>
+  </class>
+  
+  <!-- ### EXCEPTION HANDLER ############################################## -->
+  <class name="ExceptionHandlerImpl" table="JBPM_EXCEPTHNDLR">
+    <id name="dbid" column="DBID_">
+      <generator class="native" />
+    </id>
+    <version name="dbversion" column="DBVERSION_" />
+    <property name="exceptionClassName" column="EXCEPT_CLASS_" />
+    <property name="isTransactional" column="TRANSACT_" />
+    <property name="isRethrowMasked" column="RETHROW_MASKED_"/>
+    <property name="transitionName" column="TRANSITIONNAME_" />
+    <property name="activityName" column="NODENAME_" />
+    <list name="eventListenerReferences" 
+          inverse="false"
+          cascade="all-delete-orphan"
+          table="JBPM_OBJECTREFERENCES">
+      <key foreign-key="FK_OBJREF_EXHNDLR" not-null="false">
+        <column name="EXHNDLR_" index="IDX_OBJREF_EXHNDLR" />
+      </key>
+      <list-index column="EXHNDLR_IDX_" />
+      <one-to-many class="ObjectReference" />
+    </list>
+  </class>
+  
+  <!-- ### OBJECT REFERENCE ############################################### -->
+  <class name="ObjectReference" discriminator-value="objref" table="JBPM_OBJECTREF">
+    <id name="dbid" column="DBID_">
+      <generator class="native" />
+    </id>
+    <discriminator column="CLASS_" />
+    <version name="dbversion" column="DBVERSION_" />
+    <many-to-one name="descriptor"
+                 column="OBJ_DESCR_"
+                 class="org.jbpm.pvm.internal.wire.descriptor.AbstractDescriptor"
+                 cascade="all"
+                 foreign-key="FK_OBJREF_EVENT" 
+                 index="IDX_OBJREF_EVENT"/>
+    <any name="object" id-type="long" cascade="all">
+      <!--  TODO: Specify names for classes -->
+      <column name="OBJ_CLASS_" />
+      <column name="OBJ_ID_" />
+    </any>
+    <property name="expression" column="OBJ_EXPRESSION_"/>
+    <property name="expressionLanguage" column="OBJ_EXPRLANG_"/>
+    
+    <subclass name="EventListenerReference" discriminator-value="evtlis">
+      <property name="isPropagationEnabled" column="PROPAGATE_" />
+    </subclass>
+        
+  </class>
+
+  <!-- ### VARIABLE DEFINITION ############################################ -->
+  <class name="VariableDefinitionImpl" table="JBPM_VARIABLEDEF">
+    <id name="dbid" column="DBID_">
+      <generator class="native" />
+    </id>
+    <version name="dbversion" column="DBVERSION_" />
+    <property name="name" column="NAME_"/>
+    <property name="typeName" column="TYPE_"/>
+    
+    <property name="inVariableName" column="INVAR_" />
+    <property name="inExpression" column="INEXPR_" />
+    <many-to-one name="inDescriptor" 
+                 column="INDESCR_"
+                 class="org.jbpm.pvm.internal.wire.descriptor.AbstractDescriptor"
+                 cascade="all"
+                 foreign-key="FK_VARDEF_INDES" 
+                 index="IDX_VARDEF_INDES"/>
+    <property name="outVariableName" column="OUTVAR_" />
+    <property name="outExpression" column="OUTEXPR_" />
+  </class>
+
+  <!-- ### TIMER DEFINITION ############################################### -->
+  <class name="TimerDefinitionImpl" table="JBPM_TIMERDEF">
+    <id name="dbid" column="DBID_">
+      <generator class="native" />
+    </id>
+    <version name="dbversion" column="DBVERSION_" />
+    <property name="dueDateDescription" column="DUEDATEDESCR_"/>
+    <property name="repeat" column="REPEAT_"/>
+    <property name="isExclusive" column="ISEXCL_"/>
+    <property name="retries" column="RETRIES_"/>
+    <property name="eventName" column="EVENT_"/>
+    <property name="signalName" column="SIGNAL_"/>
+    <property name="dueDate" column="DUEDATE_" type="timestamp"/>
+  </class>
+  
+  <!-- ### DESCRIPTORS #################################################### -->
+  <class name="org.jbpm.pvm.internal.wire.descriptor.AbstractDescriptor" table="JBPM_DESCRIPTOR" abstract="true"
+    discriminator-value="abstract">
+    <!--
+    byte     : ByteDescriptor 
+    string   : StringDescriptor
+    char     : CharacterDescriptor
+    class    : ClassDescriptor
+    double   : DoubleDescriptor
+    expr     : ExpressionDescriptor
+    float    : FloatDescriptor 
+    long     : LongDescriptor
+    int      : IntegerDescriptor
+    short    : ShortDescriptor
+    coll     : CollectionDescriptor 
+    map      : MapDescriptor
+    list     : ListDescriptor
+    set      : SetDescriptor
+    object   : ObjectDescriptor
+    ref      : ReferenceDescriptor
+    null     : NullDescriptor
+    true     : TrueDescriptor
+    false    : FalseDescriptor
+    provided : ProvidedObjectDescriptor
+    -->
+    <id name="dbid" column="DBID_">
+      <generator class="native" />
+    </id>
+    <discriminator column="CLASS_" />
+    <version name="dbversion" column="DBVERSION_" />
+
+    <property name="name" column="NAME_" />
+    <property name="init" column="INIT_" />
+
+    <subclass name="org.jbpm.pvm.internal.wire.descriptor.NullDescriptor" discriminator-value="null_" />
+    <subclass name="org.jbpm.pvm.internal.wire.descriptor.TrueDescriptor" discriminator-value="true" />
+    <subclass name="org.jbpm.pvm.internal.wire.descriptor.FalseDescriptor" discriminator-value="false" />
+
+    <subclass name="org.jbpm.pvm.internal.wire.descriptor.StringDescriptor" discriminator-value="string">
+      <property name="text" column="TEXT_" />
+    </subclass>
+
+    <subclass name="org.jbpm.pvm.internal.wire.descriptor.CharacterDescriptor" discriminator-value="char">
+      <property name="text" column="TEXT_" />
+    </subclass>
+    <subclass name="org.jbpm.pvm.internal.wire.descriptor.ClassDescriptor" discriminator-value="class">
+      <property name="text" column="TEXT_" />
+    </subclass>
+    <subclass name="org.jbpm.pvm.internal.wire.descriptor.ReferenceDescriptor" discriminator-value="ref">
+      <property name="text" column="TEXT_" />
+    </subclass>
+
+    <subclass name="org.jbpm.pvm.internal.wire.descriptor.DoubleDescriptor" discriminator-value="double">
+      <property name="doubleVal" column="DOUBLEVAL_" />
+    </subclass>
+    <subclass name="org.jbpm.pvm.internal.wire.descriptor.FloatDescriptor" discriminator-value="float">
+      <property name="doubleVal" column="DOUBLEVAL_" />
+    </subclass>
+
+    <subclass name="org.jbpm.pvm.internal.wire.descriptor.LongDescriptor" discriminator-value="long">
+      <property name="longVal" column="LONGVAL_" />
+    </subclass>
+    <subclass name="org.jbpm.pvm.internal.wire.descriptor.IntegerDescriptor" discriminator-value="int">
+      <property name="longVal" column="LONGVAL_" />
+    </subclass>
+    <subclass name="org.jbpm.pvm.internal.wire.descriptor.ShortDescriptor" discriminator-value="short">
+      <property name="longVal" column="LONGVAL_" />
+    </subclass>
+    <subclass name="org.jbpm.pvm.internal.wire.descriptor.ByteDescriptor" discriminator-value="byte">
+      <property name="longVal" column="LONGVAL_" />
+    </subclass>
+
+    <subclass name="org.jbpm.pvm.internal.wire.descriptor.CollectionDescriptor" discriminator-value="coll">
+      <property name="className" column="CLASSNAME_" />
+      <list name="valueDescriptors" cascade="all-delete-orphan">
+        <key foreign-key="FK_DESCR_VALDESCR">
+          <column name="VALUEDESCR_" index="IDX_DESCR_VALDESCR" />
+        </key>
+        <list-index column="VALUEDESCR_IDX_" />
+        <one-to-many class="org.jbpm.pvm.internal.wire.descriptor.AbstractDescriptor" />
+      </list>
+
+      <subclass name="org.jbpm.pvm.internal.wire.descriptor.MapDescriptor" discriminator-value="map">
+        <list name="keyDescriptors" cascade="all-delete-orphan">
+          <key column="KEYDESCR_" foreign-key="FK_DESCR_KEYDESCR" />
+          <list-index column="KEYDESCR_IDX_" />
+          <one-to-many class="org.jbpm.pvm.internal.wire.descriptor.AbstractDescriptor" />
+        </list>
+      </subclass>
+
+      <subclass name="org.jbpm.pvm.internal.wire.descriptor.ListDescriptor" discriminator-value="list" />
+      <subclass name="org.jbpm.pvm.internal.wire.descriptor.SetDescriptor" discriminator-value="set" />
+    </subclass>
+
+
+    <subclass name="org.jbpm.pvm.internal.wire.descriptor.ObjectDescriptor" discriminator-value="object">
+      <property name="className" column="TEXT_" />
+      <property name="methodName" column="METHOD_" />
+      <property name="isAutoWireEnabled" column="BOOLVAL_" />
+      <property name="factoryObjectName" column="FACTORYNAME_" />
+
+      <many-to-one name="factoryDescriptor" class="org.jbpm.pvm.internal.wire.descriptor.AbstractDescriptor" column="FACTORYDESCR_"
+        foreign-key="FK_DESCR_ARG_REF" index="IDX_DESCR_ARG_REF" cascade="all" />
+
+      <list name="argDescriptors" cascade="all-delete-orphan">
+        <key foreign-key="FK_OBJARG_DESCR">
+          <column name="OBJARG_DESCR_" index="IDX_OBJARG_DESCR" />
+        </key>
+        <list-index column="OBJARG_DESCR_IDX_" />
+        <one-to-many class="org.jbpm.pvm.internal.wire.descriptor.ArgDescriptor" />
+      </list>
+
+      <list name="operations" cascade="all-delete-orphan">
+        <key foreign-key="FK_OBJOPER_DESCR">
+          <column name="OBJOPER_DESCR_" index="IDX_OBJOPER_DESCR" />
+        </key>
+        <list-index column="OBJOPER_DESCR_IDX_" />
+        <one-to-many class="org.jbpm.pvm.internal.wire.operation.AbstractOperation" />
+      </list>
+    </subclass>
+
+    <subclass name="org.jbpm.pvm.internal.wire.descriptor.ExpressionDescriptor" discriminator-value="expr">
+      <property name="expr" column="TEXT_" />
+      <property name="lang" column="METHOD_" />
+    </subclass>
+
+    <subclass name="org.jbpm.pvm.internal.wire.descriptor.ProvidedObjectDescriptor" discriminator-value="provided">
+      <any name="providedObject" id-type="long" cascade="all">
+        <column name="TEXT_" />
+        <column name="LONGVAL_" />
+      </any>
+      <property name="exposeType" column="BOOLVAL_" />
+    </subclass>
+
+    <subclass name="org.jbpm.pvm.internal.wire.descriptor.EnvDescriptor" discriminator-value="env">
+      <property name="objectName" column="TEXT_" />
+      <property name="typeName" column="CLASSNAME_" />
+    </subclass>
+
+  </class>
+
+  <!-- ### OPERATIONS ##################################################### -->
+  <class name="org.jbpm.pvm.internal.wire.operation.AbstractOperation" abstract="true"
+    table="JBPM_OPERATION" discriminator-value="oper">
+    <id name="dbid" column="DBID_">
+      <generator class="native" />
+    </id>
+    <discriminator column="CLASS_" />
+    <version name="dbversion" column="DBVERSION_" />
+
+    <subclass name="org.jbpm.pvm.internal.wire.operation.FieldOperation"
+      discriminator-value="field">
+      <property name="fieldName" column="TEXT_" />
+      <many-to-one name="descriptor" column="DESCR_" cascade="all" 
+                   class="org.jbpm.pvm.internal.wire.descriptor.AbstractDescriptor"
+        foreign-key="FK_OPER_DESC" index="IDX_OPER_DESC" />
+    </subclass>
+
+    <subclass name="org.jbpm.pvm.internal.wire.operation.PropertyOperation"
+      discriminator-value="prop">
+      <property name="setterName" column="TEXT_" />
+      <many-to-one name="descriptor" column="DESCR_" cascade="all" 
+                   class="org.jbpm.pvm.internal.wire.descriptor.AbstractDescriptor" />
+    </subclass>
+
+    <subclass name="org.jbpm.pvm.internal.wire.operation.InvokeOperation"
+      discriminator-value="invoke">
+      <property name="methodName" column="TEXT_" />
+      <list name="argDescriptors" cascade="all-delete-orphan">
+        <key foreign-key="FK_ARGDSCR_OPER">
+          <column name="OPER_" index="IDX_ARGDSCR_OPER" />
+        </key>
+        <list-index column="OPER_IDX_" />
+        <one-to-many class="org.jbpm.pvm.internal.wire.descriptor.ArgDescriptor" />
+      </list>
+    </subclass>
+  </class>
+
+  <!-- ### ARG DESCRIPTOR ################################################# -->
+  <class name="org.jbpm.pvm.internal.wire.descriptor.ArgDescriptor" table="JBPM_ARGDESCRIPTOR">
+    <id name="dbid" column="DBID_">
+      <generator class="native" />
+    </id>
+    <version name="dbversion" column="DBVERSION_" />
+    <property name="typeName" column="TYPENAME_" />
+    <many-to-one name="descriptor" column="DESCRIPTOR_" 
+                 class="org.jbpm.pvm.internal.wire.descriptor.AbstractDescriptor"
+      foreign-key="FK_ARGDESCR_DESCR" index="IDX_ARGDESCR_DESCR" cascade="all" />
+  </class>
+
+  <!-- ### PROPERTIES ##################################################### -->
+  <class name="org.jbpm.pvm.internal.model.WireProperties" table="JBPM_WIREPROPS">
+    <id name="dbid" column="DBID_">
+      <generator class="native" />
+    </id>
+    <version name="dbversion" column="DBVERSION_" />
+    <component name="wireContext" class="org.jbpm.pvm.internal.wire.WireContext">
+      <component name="wireDefinition" class="org.jbpm.pvm.internal.wire.WireDefinition">
+        <map name="descriptors" cascade="all-delete-orphan" lazy="false">
+          <key foreign-key="FK_DESCR_PROPS">
+            <column name="PROPS_" index="IDX_DESCR_PROPS" />
+          </key>
+          <map-key type="string" column="NAME_" />
+          <one-to-many class="org.jbpm.pvm.internal.wire.descriptor.AbstractDescriptor" />
+        </map>
+      </component>
+    </component>
+  </class>
+  
+  
+  <!-- ### QUERIES ######################################################## -->
+  
+  <query name="findProcessDefinitionKeys">
+    <![CDATA[
+     select distinct process.key
+     from org.jbpm.pvm.internal.model.ProcessDefinitionImpl as process
+     order by process.key asc
+    ]]>
+  </query>
+
+  <query name="findProcessDefinitionsByKey">
+    <![CDATA[
+     select process
+     from org.jbpm.pvm.internal.model.ProcessDefinitionImpl as process
+     where process.key = :key
+     order by process.version desc    
+    ]]>
+  </query>
+
+  <query name="findProcessDefinitionById">
+    <![CDATA[
+     select process
+     from org.jbpm.pvm.internal.model.ProcessDefinitionImpl as process
+     where process.id = :id
+    ]]>
+  </query>
+  
+  <query name="findProcessDefinitionKeysByName">
+    <![CDATA[
+     select process.key
+     from org.jbpm.pvm.internal.model.ProcessDefinitionImpl as process
+     where process.name = :name
+    ]]>
+  </query>
+  
+  <query name="findProcessDefinitionNamesByKey">
+    <![CDATA[
+     select process.name
+     from org.jbpm.pvm.internal.model.ProcessDefinitionImpl as process
+     where process.key = :key
+    ]]>
+  </query>
+
+</hibernate-mapping>
\ No newline at end of file

Modified: jbpm4/trunk/modules/examples/src/test/resources/jbpm.jpdl.activities.xml
===================================================================
--- jbpm4/trunk/modules/examples/src/test/resources/jbpm.jpdl.activities.xml	2009-04-09 14:25:18 UTC (rev 4514)
+++ jbpm4/trunk/modules/examples/src/test/resources/jbpm.jpdl.activities.xml	2009-04-09 14:28:55 UTC (rev 4515)
@@ -1,5 +1,4 @@
 <activities>
-  <schema resource="jpdl.xsd" />
   <activity binding="org.jbpm.jpdl.internal.activity.StartBinding" />
   <activity binding="org.jbpm.jpdl.internal.activity.StateBinding" />
   <activity binding="org.jbpm.jpdl.internal.activity.ExclusiveBinding" />

Copied: jbpm4/trunk/modules/examples/src/test/resources/jbpm.jpdl.eventlisteners.xml (from rev 4513, jbpm4/branches/tbaeyens/modules/examples/src/test/resources/jbpm.jpdl.eventlisteners.xml)
===================================================================
--- jbpm4/trunk/modules/examples/src/test/resources/jbpm.jpdl.eventlisteners.xml	                        (rev 0)
+++ jbpm4/trunk/modules/examples/src/test/resources/jbpm.jpdl.eventlisteners.xml	2009-04-09 14:28:55 UTC (rev 4515)
@@ -0,0 +1,4 @@
+<eventlisteners>
+  <eventlistener binding="org.jbpm.jpdl.internal.activity.JavaBinding" />
+  <eventlistener binding="org.jbpm.jpdl.internal.activity.EventListenerBinding" />
+</eventlisteners>

Modified: jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/EndBinding.java
===================================================================
--- jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/EndBinding.java	2009-04-09 14:25:18 UTC (rev 4514)
+++ jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/EndBinding.java	2009-04-09 14:28:55 UTC (rev 4515)
@@ -30,7 +30,7 @@
 /**
  * @author Tom Baeyens
  */
-public class EndBinding extends JpdlActivityBinding {
+public class EndBinding extends JpdlBinding {
 
   public EndBinding() {
     super("end");

Modified: jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/EsbBinding.java
===================================================================
--- jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/EsbBinding.java	2009-04-09 14:25:18 UTC (rev 4514)
+++ jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/EsbBinding.java	2009-04-09 14:28:55 UTC (rev 4515)
@@ -38,7 +38,7 @@
 /**
  * @author Tom Baeyens
  */
-public class EsbBinding extends JpdlActivityBinding {
+public class EsbBinding extends JpdlBinding {
 
   public static final String TAG = "esb";
   private static final WireParser wireParser = WireParser.getInstance(); 

Copied: jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/EventListenerBinding.java (from rev 4513, jbpm4/branches/tbaeyens/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/EventListenerBinding.java)
===================================================================
--- jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/EventListenerBinding.java	                        (rev 0)
+++ jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/EventListenerBinding.java	2009-04-09 14:28:55 UTC (rev 4515)
@@ -0,0 +1,48 @@
+/*
+ * 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.jpdl.internal.activity;
+
+import org.jbpm.jpdl.internal.xml.JpdlParser;
+import org.jbpm.listener.EventListener;
+import org.jbpm.pvm.internal.wire.Descriptor;
+import org.jbpm.pvm.internal.wire.WireContext;
+import org.jbpm.pvm.internal.xml.Parse;
+import org.jbpm.pvm.internal.xml.Parser;
+import org.w3c.dom.Element;
+
+
+/**
+ * @author Tom Baeyens
+ */
+public class EventListenerBinding extends JpdlBinding {
+
+  public EventListenerBinding() {
+    super("event-listener");
+  }
+
+  public Object parse(Element element, Parse parse, Parser parser) {
+    Descriptor descriptor = JpdlParser.parseObjectDescriptor(element, parse);
+    EventListener eventListener = (EventListener) WireContext.create(descriptor);
+    return eventListener;
+  }
+
+}

Modified: jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/ExclusiveBinding.java
===================================================================
--- jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/ExclusiveBinding.java	2009-04-09 14:25:18 UTC (rev 4514)
+++ jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/ExclusiveBinding.java	2009-04-09 14:28:55 UTC (rev 4515)
@@ -40,7 +40,7 @@
 /**
  * @author Tom Baeyens
  */
-public class ExclusiveBinding extends JpdlActivityBinding {
+public class ExclusiveBinding extends JpdlBinding {
 
   static ObjectBinding objectBinding = new ObjectBinding();
   static WireParser wireParser = WireParser.getInstance();

Modified: jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/ForkBinding.java
===================================================================
--- jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/ForkBinding.java	2009-04-09 14:25:18 UTC (rev 4514)
+++ jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/ForkBinding.java	2009-04-09 14:28:55 UTC (rev 4515)
@@ -29,7 +29,7 @@
 /**
  * @author Tom Baeyens
  */
-public class ForkBinding extends JpdlActivityBinding {
+public class ForkBinding extends JpdlBinding {
 
   public ForkBinding() {
     super("fork");

Modified: jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/HqlBinding.java
===================================================================
--- jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/HqlBinding.java	2009-04-09 14:25:18 UTC (rev 4514)
+++ jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/HqlBinding.java	2009-04-09 14:28:55 UTC (rev 4515)
@@ -36,7 +36,7 @@
 /**
  * @author Tom Baeyens
  */
-public class HqlBinding extends JpdlActivityBinding {
+public class HqlBinding extends JpdlBinding {
 
   public static final String TAG = "hql";
 

Modified: jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/JavaActivity.java
===================================================================
--- jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/JavaActivity.java	2009-04-09 14:25:18 UTC (rev 4514)
+++ jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/JavaActivity.java	2009-04-09 14:28:55 UTC (rev 4515)
@@ -25,6 +25,9 @@
 import java.util.List;
 
 import org.jbpm.activity.ActivityExecution;
+import org.jbpm.listener.EventListener;
+import org.jbpm.listener.EventListenerExecution;
+import org.jbpm.model.OpenExecution;
 import org.jbpm.pvm.internal.util.ReflectUtil;
 import org.jbpm.pvm.internal.wire.Descriptor;
 import org.jbpm.pvm.internal.wire.WireContext;
@@ -37,7 +40,7 @@
 /**
  * @author Tom Baeyens
  */
-public class JavaActivity extends JpdlActivity {
+public class JavaActivity extends JpdlActivity implements EventListener {
 
   private static final long serialVersionUID = 1L;
   
@@ -47,6 +50,15 @@
   protected InvokeOperation invokeOperation;
   
   public void execute(ActivityExecution execution) throws Exception {
+    perform(execution);
+    execution.historyAutomatic();
+  }
+    
+  public void notify(EventListenerExecution execution) throws Exception {
+    perform(execution);
+  }    
+    
+  public void perform(OpenExecution execution) throws Exception {
     WireContext wireContext = new WireContext();
     Object target = wireContext.create(descriptor, false);
 
@@ -70,8 +82,6 @@
         execution.setVariable(variableName, returnValue);
       }
       
-      execution.historyAutomatic();
-
     } catch (WireException e) {
       throw e;
     } catch (Exception e) {

Modified: jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/JavaBinding.java
===================================================================
--- jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/JavaBinding.java	2009-04-09 14:25:18 UTC (rev 4514)
+++ jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/JavaBinding.java	2009-04-09 14:28:55 UTC (rev 4515)
@@ -36,7 +36,7 @@
 /**
  * @author Tom Baeyens
  */
-public class JavaBinding extends JpdlActivityBinding {
+public class JavaBinding extends JpdlBinding {
 
   public static final String TAG = "java";
   

Modified: jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/JoinBinding.java
===================================================================
--- jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/JoinBinding.java	2009-04-09 14:25:18 UTC (rev 4514)
+++ jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/JoinBinding.java	2009-04-09 14:28:55 UTC (rev 4515)
@@ -29,7 +29,7 @@
 /**
  * @author Tom Baeyens
  */
-public class JoinBinding extends JpdlActivityBinding {
+public class JoinBinding extends JpdlBinding {
 
   public JoinBinding() {
     super("join");

Deleted: jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/JpdlActivityBinding.java
===================================================================
--- jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/JpdlActivityBinding.java	2009-04-09 14:25:18 UTC (rev 4514)
+++ jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/JpdlActivityBinding.java	2009-04-09 14:28:55 UTC (rev 4515)
@@ -1,75 +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.jpdl.internal.activity;
-
-import java.util.List;
-
-import org.jbpm.jpdl.internal.xml.JpdlParser;
-import org.jbpm.jpdl.internal.xml.UnresolvedTransitions;
-import org.jbpm.pvm.internal.model.ActivityImpl;
-import org.jbpm.pvm.internal.model.TransitionImpl;
-import org.jbpm.pvm.internal.util.TagBinding;
-import org.jbpm.pvm.internal.util.XmlUtil;
-import org.jbpm.pvm.internal.wire.xml.WireParser;
-import org.jbpm.pvm.internal.xml.Parse;
-import org.w3c.dom.Element;
-
-
-/**
- * @author Tom Baeyens
- */
-public abstract class JpdlActivityBinding extends TagBinding {
-  
-  protected static final WireParser wireParser = JpdlParser.wireParser;
-
-  public JpdlActivityBinding(String tagName) {
-    super(tagName, "http://jbpm.org/4/jpdl", "activity");
-  }
-
-  public void parseName(Element element, ActivityImpl activity, Parse parse) {
-    String name = XmlUtil.attribute(element, "name", isNameRequired(), parse);
-    
-    if (name!=null) {
-      // basic name validation
-      if ("".equals(name)) {
-        parse.addProblem(XmlUtil.errorMessageAttribute(element, "name", name, "is empty"));
-      } else if (name.indexOf('/')!=-1) {
-        parse.addProblem(XmlUtil.errorMessageAttribute(element, "name", name, "contains slash (/)"));
-      }
-      activity.setName(name);
-    }
-  }
-
-  public boolean isNameRequired() {
-    return true;
-  }
-
-  public void parseFlows(Element element, ActivityImpl activity, Parse parse) {
-    List<Element> transitionElements = XmlUtil.elements(element, "transition");
-    UnresolvedTransitions unresolvedTransitions = parse.findObject(UnresolvedTransitions.class);
-    for (Element transitionElement: transitionElements) {
-      String transitionName = XmlUtil.attribute(transitionElement, "name", false, parse);
-      TransitionImpl transition = activity.createOutgoingTransition(transitionName);
-      unresolvedTransitions.add(transition, transitionElement);
-    }
-  }
-}

Copied: jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/JpdlBinding.java (from rev 4513, jbpm4/branches/tbaeyens/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/JpdlBinding.java)
===================================================================
--- jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/JpdlBinding.java	                        (rev 0)
+++ jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/JpdlBinding.java	2009-04-09 14:28:55 UTC (rev 4515)
@@ -0,0 +1,78 @@
+/*
+ * 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.jpdl.internal.activity;
+
+import java.util.List;
+
+import org.jbpm.jpdl.internal.xml.JpdlParser;
+import org.jbpm.jpdl.internal.xml.UnresolvedTransitions;
+import org.jbpm.model.Event;
+import org.jbpm.pvm.internal.model.ActivityImpl;
+import org.jbpm.pvm.internal.model.TransitionImpl;
+import org.jbpm.pvm.internal.util.TagBinding;
+import org.jbpm.pvm.internal.util.XmlUtil;
+import org.jbpm.pvm.internal.wire.xml.WireParser;
+import org.jbpm.pvm.internal.xml.Parse;
+import org.w3c.dom.Element;
+
+
+/**
+ * @author Tom Baeyens
+ */
+public abstract class JpdlBinding extends TagBinding {
+  
+  protected static final WireParser wireParser = JpdlParser.wireParser;
+
+  public JpdlBinding(String tagName) {
+    super(tagName, "http://jbpm.org/4/jpdl", null);
+  }
+
+  public void parseName(Element element, ActivityImpl activity, Parse parse) {
+    String name = XmlUtil.attribute(element, "name", isNameRequired(), parse);
+    
+    if (name!=null) {
+      // basic name validation
+      if ("".equals(name)) {
+        parse.addProblem(XmlUtil.errorMessageAttribute(element, "name", name, "is empty"));
+      } else if (name.indexOf('/')!=-1) {
+        parse.addProblem(XmlUtil.errorMessageAttribute(element, "name", name, "contains slash (/)"));
+      }
+      activity.setName(name);
+    }
+  }
+
+  public boolean isNameRequired() {
+    return true;
+  }
+
+  public void parseTransitions(Element element, ActivityImpl activity, Parse parse, JpdlParser jpdlParser) {
+    List<Element> transitionElements = XmlUtil.elements(element, "transition");
+    UnresolvedTransitions unresolvedTransitions = parse.findObject(UnresolvedTransitions.class);
+    for (Element transitionElement: transitionElements) {
+      String transitionName = XmlUtil.attribute(transitionElement, "name", false, parse);
+      TransitionImpl transition = activity.createOutgoingTransition(transitionName);
+      unresolvedTransitions.add(transition, transitionElement);
+      
+      jpdlParser.parseEventListeners(transitionElement, transition, Event.TAKE, parse);
+    }
+  }
+}

Modified: jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/ScriptBinding.java
===================================================================
--- jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/ScriptBinding.java	2009-04-09 14:25:18 UTC (rev 4514)
+++ jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/ScriptBinding.java	2009-04-09 14:28:55 UTC (rev 4515)
@@ -32,7 +32,7 @@
 /**
  * @author Tom Baeyens
  */
-public class ScriptBinding extends JpdlActivityBinding {
+public class ScriptBinding extends JpdlBinding {
 
   private static final String TAG = "script";
 

Modified: jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/StartBinding.java
===================================================================
--- jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/StartBinding.java	2009-04-09 14:25:18 UTC (rev 4514)
+++ jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/StartBinding.java	2009-04-09 14:28:55 UTC (rev 4515)
@@ -31,7 +31,7 @@
 /**
  * @author Tom Baeyens
  */
-public class StartBinding extends JpdlActivityBinding {
+public class StartBinding extends JpdlBinding {
 
   public StartBinding() {
     super("start");

Modified: jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/StateBinding.java
===================================================================
--- jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/StateBinding.java	2009-04-09 14:25:18 UTC (rev 4514)
+++ jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/StateBinding.java	2009-04-09 14:28:55 UTC (rev 4515)
@@ -31,7 +31,7 @@
 /**
  * @author Tom Baeyens
  */
-public class StateBinding extends JpdlActivityBinding {
+public class StateBinding extends JpdlBinding {
 
   public StateBinding() {
     super("state");

Modified: jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/TaskBinding.java
===================================================================
--- jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/TaskBinding.java	2009-04-09 14:25:18 UTC (rev 4514)
+++ jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/activity/TaskBinding.java	2009-04-09 14:28:55 UTC (rev 4515)
@@ -30,7 +30,7 @@
 /**
  * @author Tom Baeyens
  */
-public class TaskBinding extends JpdlActivityBinding {
+public class TaskBinding extends JpdlBinding {
 
   private static final String TAG = "task";
 

Deleted: jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/xml/Activities.java
===================================================================
--- jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/xml/Activities.java	2009-04-09 14:25:18 UTC (rev 4514)
+++ jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/xml/Activities.java	2009-04-09 14:28:55 UTC (rev 4515)
@@ -1,38 +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.jpdl.internal.xml;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.jbpm.pvm.internal.xml.Bindings;
-
-
-/**
- * @author Tom Baeyens
- */
-public class Activities {
-
-  List<String> schemaResources = new ArrayList<String>();
-  Bindings bindings = new Bindings();
-  
-}

Deleted: jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/xml/ActivitiesParser.java
===================================================================
--- jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/xml/ActivitiesParser.java	2009-04-09 14:25:18 UTC (rev 4514)
+++ jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/xml/ActivitiesParser.java	2009-04-09 14:28:55 UTC (rev 4515)
@@ -1,74 +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.jpdl.internal.xml;
-
-import org.jbpm.internal.log.Log;
-import org.jbpm.pvm.internal.util.ReflectUtil;
-import org.jbpm.pvm.internal.util.XmlUtil;
-import org.jbpm.pvm.internal.xml.Binding;
-import org.jbpm.pvm.internal.xml.Parse;
-import org.jbpm.pvm.internal.xml.Parser;
-import org.w3c.dom.Element;
-
-/**
- * @author Tom Baeyens
- */
-public class ActivitiesParser extends Parser {
-
-  private static final Log log = Log.getLog(ActivitiesParser.class.getName());
-  
-  public Object parseDocumentElement(Element documentElement, Parse parse) {
-    Activities activities = parse.findObject(Activities.class);
-    if (activities==null) {
-      activities = new Activities();
-    }
-    parse.setDocumentObject(activities);
-    
-    for (Element bindingElement : XmlUtil.elements(documentElement, "activity")) {
-      Binding binding = instantiateBinding(bindingElement, parse);
-      activities.bindings.addBinding(binding);
-    }
-    
-    for (Element schemaElement : XmlUtil.elements(documentElement, "schema")) {
-      String schemaResource = XmlUtil.attribute(schemaElement, "resource", true, parse);
-      activities.schemaResources.add(schemaResource);
-    }
-
-    return activities;
-  }
-
-  protected Binding instantiateBinding(Element bindingElement, Parse parse) {
-    String bindingClassName = XmlUtil.attribute(bindingElement, "binding", true, parse);
-    
-    log.trace("adding activity binding "+bindingClassName);
-    
-    if (bindingClassName!=null) {
-      try {
-        Class<?> bindingClass = ReflectUtil.loadClass(classLoader, bindingClassName);
-        return (Binding) bindingClass.newInstance();
-      } catch (Exception e) {
-        parse.addProblem("couldn't instantiate activity binding "+bindingClassName, e);
-      }
-    }
-    return null;
-  }
-}

Copied: jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/xml/BindingsParser.java (from rev 4513, jbpm4/branches/tbaeyens/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/xml/BindingsParser.java)
===================================================================
--- jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/xml/BindingsParser.java	                        (rev 0)
+++ jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/xml/BindingsParser.java	2009-04-09 14:28:55 UTC (rev 4515)
@@ -0,0 +1,69 @@
+/*
+ * 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.jpdl.internal.xml;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.jbpm.internal.log.Log;
+import org.jbpm.pvm.internal.util.ReflectUtil;
+import org.jbpm.pvm.internal.util.XmlUtil;
+import org.jbpm.pvm.internal.xml.Binding;
+import org.jbpm.pvm.internal.xml.Parse;
+import org.jbpm.pvm.internal.xml.Parser;
+import org.w3c.dom.Element;
+
+/**
+ * @author Tom Baeyens
+ */
+public class BindingsParser extends Parser {
+
+  private static final Log log = Log.getLog(BindingsParser.class.getName());
+  
+  public Object parseDocumentElement(Element documentElement, Parse parse) {
+    List<Binding> bindings = new ArrayList<Binding>();
+    parse.setDocumentObject(bindings);
+    
+    for (Element bindingElement : XmlUtil.elements(documentElement)) {
+      Binding binding = instantiateBinding(bindingElement, parse);
+      bindings.add(binding);
+    }
+    
+    return bindings;
+  }
+
+  protected Binding instantiateBinding(Element bindingElement, Parse parse) {
+    String bindingClassName = XmlUtil.attribute(bindingElement, "binding", true, parse);
+    
+    log.trace("adding jpdl binding "+bindingClassName);
+    
+    if (bindingClassName!=null) {
+      try {
+        Class<?> bindingClass = ReflectUtil.loadClass(classLoader, bindingClassName);
+        return (Binding) bindingClass.newInstance();
+      } catch (Exception e) {
+        parse.addProblem("couldn't instantiate activity binding "+bindingClassName, e);
+      }
+    }
+    return null;
+  }
+}

Modified: jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/xml/JpdlParser.java
===================================================================
--- jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/xml/JpdlParser.java	2009-04-09 14:25:18 UTC (rev 4514)
+++ jbpm4/trunk/modules/jpdl/src/main/java/org/jbpm/jpdl/internal/xml/JpdlParser.java	2009-04-09 14:28:55 UTC (rev 4515)
@@ -29,9 +29,12 @@
 
 import org.jbpm.activity.ActivityBehaviour;
 import org.jbpm.internal.log.Log;
-import org.jbpm.jpdl.internal.activity.JpdlActivityBinding;
+import org.jbpm.jpdl.internal.activity.JpdlBinding;
 import org.jbpm.jpdl.internal.model.JpdlProcessDefinition;
+import org.jbpm.listener.EventListener;
 import org.jbpm.pvm.internal.model.ActivityImpl;
+import org.jbpm.pvm.internal.model.EventImpl;
+import org.jbpm.pvm.internal.model.ObservableElementImpl;
 import org.jbpm.pvm.internal.model.ProcessDefinitionImpl;
 import org.jbpm.pvm.internal.task.AssignableDefinitionImpl;
 import org.jbpm.pvm.internal.task.SwimlaneDefinitionImpl;
@@ -41,6 +44,7 @@
 import org.jbpm.pvm.internal.wire.descriptor.ObjectDescriptor;
 import org.jbpm.pvm.internal.wire.operation.Operation;
 import org.jbpm.pvm.internal.wire.xml.WireParser;
+import org.jbpm.pvm.internal.xml.Bindings;
 import org.jbpm.pvm.internal.xml.Parse;
 import org.jbpm.pvm.internal.xml.Parser;
 import org.w3c.dom.Element;
@@ -59,18 +63,26 @@
     "jbpm.user.activities.xml"
   }; 
 
-  static ActivitiesParser activityParser = new ActivitiesParser();
+  public static final String[] DEFAULT_EVENTLISTENERS_RESOURCES = new String[]{
+    "jbpm.jpdl.eventlisteners.xml",
+    "jbpm.user.eventlisteners.xml"
+  }; 
 
+  static BindingsParser bindingsParser = new BindingsParser();
+
   public JpdlParser() {
     initialize(); 
     
-    Activities activitiesConfiguration = parseActivitiesConfiguration();
-    setBindings(activitiesConfiguration.bindings);
-    setSchemaResources(activitiesConfiguration.schemaResources);
+    parseBindings();
+    
+    List<String> schemaResources =  new ArrayList<String>();
+    schemaResources.add("jpdl.xsd");
+    setSchemaResources(schemaResources);
   }
 
-  protected Activities parseActivitiesConfiguration() {
-    Activities activities = new Activities();
+  protected void parseBindings() {
+    Bindings bindings = new Bindings();
+    setBindings(bindings);
 
     for (String activityResource: DEFAULT_ACTIVITIES_RESOURCES) {
       Enumeration<URL> resourceUrls = ReflectUtil.getResources(null, activityResource);
@@ -78,18 +90,45 @@
         while (resourceUrls.hasMoreElements()) {
           URL resourceUrl = resourceUrls.nextElement();
           log.trace("loading jpdl activities from resource: "+resourceUrl);
-          activityParser.createParse()
+          List<JpdlBinding> activityBindings = (List<JpdlBinding>) bindingsParser.createParse()
             .setUrl(resourceUrl)
-            .pushObject(activities)
             .execute()
-            .checkProblems("jpdl activities from "+resourceUrl.toString());
+            .checkProblems("jpdl activities from "+resourceUrl.toString())
+            .getDocumentObject();
+          
+          for (JpdlBinding binding: activityBindings) {
+            binding.setCategory("activity");
+            bindings.addBinding(binding);
+          }
+          
         }
       } else {
         log.trace("skipping unavailable jpdl activities resource: "+activityResource);
       }
     }
-    
-    return activities;
+
+    for (String eventListenerResource: DEFAULT_EVENTLISTENERS_RESOURCES) {
+      Enumeration<URL> resourceUrls = ReflectUtil.getResources(null, eventListenerResource);
+      if (resourceUrls.hasMoreElements()) {
+        while (resourceUrls.hasMoreElements()) {
+          URL resourceUrl = resourceUrls.nextElement();
+          log.trace("loading jpdl eventlisteners from resource: "+resourceUrl);
+          List<JpdlBinding> activityBindings = (List<JpdlBinding>) bindingsParser.createParse()
+            .setUrl(resourceUrl)
+            .execute()
+            .checkProblems("jpdl eventlisteners from "+resourceUrl.toString())
+            .getDocumentObject();
+          
+          for (JpdlBinding binding: activityBindings) {
+            binding.setCategory("eventlistener");
+            bindings.addBinding(binding);
+          }
+          
+        }
+      } else {
+        log.trace("skipping unavailable jpdl eventlistener resource: "+eventListenerResource);
+      }
+    }
   }
 
   public Object parseDocumentElement(Element documentElement, Parse parse) {
@@ -137,26 +176,33 @@
           JpdlParser.parseAssignmentAttributes(swimlaneElement, swimlaneDefinition, parse);
         }
       }
-      
+
+      parseOnEvents(documentElement, parse, processDefinition);
+
       // activities
       List<Element> elements = XmlUtil.elements(documentElement);
       for (Element element: elements) {
-        JpdlActivityBinding activityBinding = (JpdlActivityBinding) getBinding(element, "activity");
-        if (activityBinding!=null) {
-          ActivityImpl activity = (ActivityImpl) processDefinition.createActivity();
-          parse.pushObject(activity);
-          try {
-            activity.setType(activityBinding.getTagName());
-            activityBinding.parseName(element, activity, parse);
-            activityBinding.parseFlows(element, activity, parse);
-            ActivityBehaviour activityBehaviour = (ActivityBehaviour) activityBinding.parse(element, parse, this);
-            activity.setBehaviour(activityBehaviour);
-          } finally {
-            parse.popObject();
+    	if (!"on".equals(XmlUtil.getTagLocalName(element))) {
+          JpdlBinding activityBinding = (JpdlBinding) getBinding(element, "activity");
+          if (activityBinding!=null) {
+            ActivityImpl activity = processDefinition.createActivity();
+            parse.pushObject(activity);
+            try {
+              activity.setType(activityBinding.getTagName());
+              activityBinding.parseName(element, activity, parse);
+              activityBinding.parseTransitions(element, activity, parse, this);
+              ActivityBehaviour activityBehaviour = (ActivityBehaviour) activityBinding.parse(element, parse, this);
+              activity.setBehaviour(activityBehaviour);
+              
+              parseOnEvents(element, parse, activity);
+              
+            } finally {
+              parse.popObject();
+            }
+          } else {
+            log.debug("unrecognized activity: "+XmlUtil.getTagLocalName(element));
           }
-        } else {
-          log.debug("unrecognized activity: "+XmlUtil.getTagLocalName(element));
-        }
+    	}
       }
       
       for (UnresolvedTransition unresolvedTransition: unresolvedTransitions.list) {
@@ -175,6 +221,34 @@
     return processDefinition;
   }
 
+  public void parseOnEvents(Element element, Parse parse, ObservableElementImpl observableElement) {
+    // event listeners
+    List<Element> onElements = XmlUtil.elements(element, "on");
+    for (Element onElement: onElements) {
+      String eventName = XmlUtil.attribute(onElement, "event", true, parse);
+      parseEventListeners(onElement, observableElement, eventName, parse);
+    }
+  }
+
+  public void parseEventListeners(Element element, ObservableElementImpl observableElement, String eventName, Parse parse) {
+    if (eventName!=null) {
+      EventImpl event = observableElement.getEvent(eventName);
+      if (event==null) {
+        event = observableElement.createEvent(eventName);
+      }
+      
+      for (Element eventListenerElement: XmlUtil.elements(element)) {
+        JpdlBinding eventBinding = (JpdlBinding) getBinding(eventListenerElement, "eventlistener");
+        if (eventBinding!=null) {
+          EventListener eventListener = (EventListener) eventBinding.parse(eventListenerElement, parse, this);
+          event.createEventListenerReference(eventListener);
+        } else {
+          log.debug("unrecognized event listener: "+XmlUtil.getTagLocalName(eventListenerElement));
+        }
+      }
+    }
+  }
+
   public static void parseAssignmentAttributes(Element element, AssignableDefinitionImpl assignableDefinition, Parse parse) {
     Element descriptionElement = XmlUtil.element(element, "description");
     if (descriptionElement!=null) {

Copied: jbpm4/trunk/modules/jpdl/src/test/resources/jbpm.cache.xml (from rev 4513, jbpm4/branches/tbaeyens/modules/jpdl/src/test/resources/jbpm.cache.xml)
===================================================================
--- jbpm4/trunk/modules/jpdl/src/test/resources/jbpm.cache.xml	                        (rev 0)
+++ jbpm4/trunk/modules/jpdl/src/test/resources/jbpm.cache.xml	2009-04-09 14:28:55 UTC (rev 4515)
@@ -0,0 +1,39 @@
+<hibernate-cache>
+
+  <class-cache class="org.jbpm.pvm.internal.model.ProcessDefinitionImpl" />
+	<class-cache class="org.jbpm.pvm.internal.model.ActivityImpl" />
+	<class-cache class="org.jbpm.pvm.internal.model.TransitionImpl" />
+	<class-cache class="org.jbpm.pvm.internal.model.EventImpl" />
+	<class-cache class="org.jbpm.pvm.internal.model.ExceptionHandlerImpl" />
+	<class-cache class="org.jbpm.pvm.internal.model.ObjectReference" />
+  <class-cache class="org.jbpm.pvm.internal.model.VariableDefinitionImpl" />
+  <class-cache class="org.jbpm.pvm.internal.model.TimerDefinitionImpl" />
+  <class-cache class="org.jbpm.pvm.internal.wire.descriptor.AbstractDescriptor" />
+
+	<collection-cache collection="org.jbpm.pvm.internal.model.ProcessDefinitionImpl.exceptionHandlers" />
+	<collection-cache collection="org.jbpm.pvm.internal.model.ProcessDefinitionImpl.events" />
+	<collection-cache collection="org.jbpm.pvm.internal.model.ProcessDefinitionImpl.activities" />
+	<collection-cache collection="org.jbpm.pvm.internal.model.ProcessDefinitionImpl.variableDefinitions" />
+	<collection-cache collection="org.jbpm.pvm.internal.model.ProcessDefinitionImpl.timerDefinitions" />
+  <collection-cache collection="org.jbpm.pvm.internal.model.ProcessDefinitionImpl.attachments" />
+
+	<collection-cache collection="org.jbpm.pvm.internal.model.ActivityImpl.exceptionHandlers" />
+	<collection-cache collection="org.jbpm.pvm.internal.model.ActivityImpl.events" />
+	<collection-cache collection="org.jbpm.pvm.internal.model.ActivityImpl.activities" />
+	<collection-cache collection="org.jbpm.pvm.internal.model.ActivityImpl.variableDefinitions" />
+	<collection-cache collection="org.jbpm.pvm.internal.model.ActivityImpl.timerDefinitions" />
+	<collection-cache collection="org.jbpm.pvm.internal.model.ActivityImpl.incomingTransitions" />
+	<collection-cache collection="org.jbpm.pvm.internal.model.ActivityImpl.outgoingTransitions" />
+
+	<collection-cache collection="org.jbpm.pvm.internal.model.TransitionImpl.exceptionHandlers" />
+	<collection-cache collection="org.jbpm.pvm.internal.model.TransitionImpl.events" />
+
+	<collection-cache collection="org.jbpm.pvm.internal.model.EventImpl.exceptionHandlers" />
+	<collection-cache collection="org.jbpm.pvm.internal.model.EventImpl.listenerReferences" />
+	  
+	<collection-cache collection="org.jbpm.pvm.internal.model.ExceptionHandlerImpl.eventListenerReferences" />
+
+  <collection-cache collection="org.jbpm.pvm.internal.wire.descriptor.ObjectDescriptor.argDescriptors" />
+  <collection-cache collection="org.jbpm.pvm.internal.wire.descriptor.ObjectDescriptor.operations" />
+	
+</hibernate-cache>

Copied: jbpm4/trunk/modules/jpdl/src/test/resources/jbpm.definition.hbm.xml (from rev 4513, jbpm4/branches/tbaeyens/modules/jpdl/src/test/resources/jbpm.definition.hbm.xml)
===================================================================
--- jbpm4/trunk/modules/jpdl/src/test/resources/jbpm.definition.hbm.xml	                        (rev 0)
+++ jbpm4/trunk/modules/jpdl/src/test/resources/jbpm.definition.hbm.xml	2009-04-09 14:28:55 UTC (rev 4515)
@@ -0,0 +1,646 @@
+<?xml version="1.0"?>
+<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+
+<hibernate-mapping package="org.jbpm.pvm.internal.model" default-access="field">
+
+  <!-- ### PROCESS DEFINITION ############################################# -->
+  <class name="ProcessDefinitionImpl" 
+         table="JBPM_PROCESS"
+         discriminator-value="pvm">
+    <!-- ProcessElementImpl part ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
+    <id name="dbid" column="DBID_">
+      <generator class="native" />
+    </id>
+    <discriminator><column name="CLASS_" /></discriminator>
+
+    <version name="dbversion" column="DBVERSION_" />
+    <many-to-one name="properties"
+                 class="WireProperties" 
+                 column="PROPS_" 
+                 foreign-key="FK_PROCDEF_PROPS"
+                 index="IDX_PROCDEF_PROPS"
+                 cascade="all" />
+    <list name="exceptionHandlers" cascade="all">
+      <key foreign-key="FK_EXHDLR_PROCESS">
+        <column name="PROCESS_" index="IDX_EXHDLR_PROCESS"/>
+      </key>
+      <index column="PROCESS_IDX_" />
+      <one-to-many class="ExceptionHandlerImpl"/>
+    </list>
+
+    <!-- ObservableElementImpl part ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
+    <property name="name" column="NAME_" />
+    <property name="description" column="DESCR_" />
+    <map name="events" cascade="all-delete-orphan">
+      <key foreign-key="FK_EVENT_PROCESS">
+        <column name="PROCESS_" index="IDX_EVENT_PROCESS" />
+      </key>
+      <map-key type="string" column="NAME_" />
+      <one-to-many class="org.jbpm.pvm.internal.model.EventImpl"/>
+    </map>
+
+    <!-- CompositeElementImpl part ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
+    <list name="activities" cascade="all" inverse="false">
+      <key foreign-key="FK_ACTS_PROCESS">
+        <column name="ACTSPROCESS_" index="IDX_ACTS_PROCESS"/>
+      </key>
+      <list-index column="ACTSPROCESS_IDX_" />
+      <one-to-many class="ActivityImpl" />
+    </list>
+    <property name="hasVariableDefinitions" column="HAS_VAR_DEF_" />
+    <list name="variableDefinitions" cascade="all">
+      <key foreign-key="FK_VARDEF_PROCESS">
+        <column name="PROCESS_" index="IDX_VARDEF_PROCESS"/>
+      </key>
+      <index column="PROCESS_IDX_" />
+      <one-to-many class="VariableDefinitionImpl" />
+    </list>
+    <property name="hasTimerDefinitions" column="HAS_TIMER_DEF_" />
+    <set name="timerDefinitions" cascade="all">
+      <key foreign-key="FK_TMRDEF_PROCESS">
+        <column name="PROCESS_" index="IDX_TMRDEF_PROCESS"/>
+      </key>
+      <one-to-many class="TimerDefinitionImpl" />
+    </set>
+
+    <!-- ProcessDefinitionImpl part ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
+    <property name="key" column="KEY_" />
+    <property name="id" column="ID_" unique="true" />
+
+    <property name="packageName" column="PACKAGE_" />
+    <property name="version" column="VERSION_" />
+    <property name="deploymentTime" column="DEPLOYED_" />
+    <many-to-one name="initial" 
+                 column="INITIAL_"
+                 class="ActivityImpl"
+                 cascade="all" 
+                 foreign-key="FK_PROCDEF_INITIAL"
+                 index="IDX_PROCDEF_INIT"
+                 fetch="select" />
+
+    <map name="attachments" cascade="all-delete-orphan">
+      <key foreign-key="FK_LOB_PROCESS">
+        <column name="PROCESS_" index="IDX_LOB_PROCESS" />
+      </key>
+      <map-key type="string" column="NAME_" />
+      <one-to-many class="org.jbpm.pvm.internal.lob.Lob"/>
+    </map>
+  </class>
+
+  <!-- ### Activity ############################################################## -->
+  <class name="ActivityImpl" table="JBPM_ACTIVITY">
+    <!-- ProcessElementImpl part ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
+    <id name="dbid" column="DBID_">
+      <generator class="native" />
+    </id>
+    <version name="dbversion" column="DBVERSION_" />
+    <many-to-one name="processDefinition"
+                 class="ProcessDefinitionImpl" 
+                 column="PROCESS_" 
+                 foreign-key="FK_ACT_PROCESS"
+                 index="IDX_ACT_PROCESS" />
+    <many-to-one name="properties"
+                 class="WireProperties" 
+                 column="PROPS_" 
+                 foreign-key="FK_ACT_PROPS"
+                 index="IDX_ACT_PROPS"
+                 cascade="all" />
+    <list name="exceptionHandlers" cascade="all">
+      <key foreign-key="FK_EXHDLR_ACT">
+        <column name="ACT_" index="IDX_EXHDLR_ACT"/>
+      </key>
+      <index column="ACT_IDX_" />
+      <one-to-many class="ExceptionHandlerImpl" />
+    </list>
+
+    <!-- ObservableElementImpl part ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
+    <property name="name" column="NAME_"/>
+    <property name="description" column="DESCR_"/>
+    <map name="events" cascade="all-delete-orphan">
+      <key foreign-key="FK_EVENT_ACT">
+        <column name="ACT_" index="IDX_EVENT_ACT" />
+      </key>
+      <map-key type="string" column="NAME_" />
+      <one-to-many class="org.jbpm.pvm.internal.model.EventImpl" />
+    </map>
+
+    <!-- CompositeElementImpl part ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
+    <list name="activities" cascade="all" inverse="false">
+      <key column="PARENT_" foreign-key="none" />
+      <list-index column="PARENT_IDX_" />
+      <one-to-many class="ActivityImpl" />
+    </list>
+    <property name="hasVariableDefinitions" column="HAS_VAR_DEF_" />
+    <list name="variableDefinitions" cascade="all">
+      <key foreign-key="FK_VARDEF_ACT">
+        <column name="ACT_" index="IDX_VARDEF_ACT"/>
+      </key>
+      <index column="ACT_IDX_" />
+      <one-to-many class="VariableDefinitionImpl" />
+    </list>
+    <property name="hasTimerDefinitions" column="HAS_TIMER_DEF_" />
+    <set name="timerDefinitions" cascade="all">
+      <key foreign-key="FK_TMRDEF_ACT">
+        <column name="ACT_" index="IDX_TMRDEF_ACT"/>
+      </key>
+      <one-to-many class="TimerDefinitionImpl" />
+    </set>
+
+    <!-- ActivityImpl part ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
+    <property name="type" column="TYPE_" />
+    <property name="isLocalScope" column="LOCAL_SCOPE_" />
+    <property name="isExecutionAsync" column="EXEC_ASYNC_" />
+    <property name="isSignalAsync" column="SIGNAL_ASYNC_" />
+    <property name="isPreviousNeeded" column="PREV_NEEDED_" />
+
+    <many-to-one name="parentActivity" 
+                 column="PARENT_"
+                 class="ActivityImpl"
+                 cascade="all"
+                 foreign-key="FK_ACT_PARENT" 
+                 index="IDX_ACT_PARENT" />
+
+    <many-to-one name="defaultTransition"
+                 column="DEFTRANS_" 
+                 class="TransitionImpl"
+                 fetch="select"
+                 foreign-key="FK_ACT_DEFTRANS" 
+                 index="IDX_ACT_DEFTRANS" />
+
+    <list name="incomingTransitions" inverse="false">
+      <key column="DESTINATION_" />
+      <index column="IN_IDX_" />
+      <one-to-many class="TransitionImpl" />
+    </list>
+
+    <list name="outgoingTransitions" inverse="false" cascade="all">
+      <key column="SOURCE_" />
+      <index column="OUT_IDX_" />
+      <one-to-many class="TransitionImpl" />
+    </list>
+
+    <component name="behaviourReference" class="ObjectReference">
+      <many-to-one name="descriptor"
+                   column="BEHAV_DESCR_" 
+                   cascade="all"
+                   class="org.jbpm.pvm.internal.wire.descriptor.AbstractDescriptor"
+                   foreign-key="FK_NODE_BEHAV_DESCR"
+                   index="IDX_NODE_BEHAV_DESCR" />
+      <any name="object" id-type="long" cascade="all">
+        <!--  TODO: Specify names for classes -->
+        <!--        <meta-value value="bpel::activity" class="org.jbpm.pvm.bpel.BpelActivity"/> -->
+        <column name="BEHAV_CLASS_" />
+        <column name="BEHAV_ID_" />
+      </any>
+    </component>
+  </class>
+
+  <!-- ### TRANSITION ##################################################### -->
+  <class name="TransitionImpl" table="JBPM_TRANSITION">
+    <!-- ProcessElementImpl part ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
+    <id name="dbid" column="DBID_">
+      <generator class="native" />
+    </id>
+    <version name="dbversion" column="DBVERSION_" />
+    <many-to-one name="processDefinition"
+                 class="ProcessDefinitionImpl" 
+                 column="PROCESS_" 
+                 foreign-key="FK_TRANS_PROCDEF"
+                 index="IDX_TRANS_PROCDEF" />
+    <many-to-one name="properties"
+                 class="WireProperties" 
+                 column="PROPS_" 
+                 foreign-key="FK_TRANS_PROPS"
+                 index="IDX_TRANS_PROPS"
+                 cascade="all" />
+    <list name="exceptionHandlers" cascade="all">
+      <key foreign-key="FK_EXHDLR_TRANS">
+        <column name="TRANSITION_" index="IDX_EXHDLR_TRANS" />
+      </key>
+      <index column="TRANSITION_IDX_" />
+      <one-to-many class="ExceptionHandlerImpl" />
+    </list>
+
+    <!-- ObservableElementImpl part ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
+    <property name="name" column="NAME_" />
+    <property name="description" column="DESCR_" />
+    <map name="events" cascade="all-delete-orphan">
+      <key foreign-key="FK_EVENT_TRANS">
+        <column name="TRANSITION_" index="IDX_EVENT_TRANS" />
+      </key>
+      <map-key type="string" column="NAME_" />
+      <one-to-many class="org.jbpm.pvm.internal.model.EventImpl" />
+    </map>
+    
+    <!-- TransitionImpl part ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
+    <many-to-one name="source"
+                 column="SRC_" 
+                 class="ActivityImpl" 
+                 fetch="select" 
+                 foreign-key="FK_TRANS_SRC" 
+                 index="IDX_TRANS_SRC" />
+
+    <many-to-one name="destination"
+                 column="DEST_" 
+                 class="ActivityImpl" 
+                 fetch="select"
+                 cascade="all"
+                 foreign-key="FK_TRANS_DST" 
+                 index="IDX_TRANS_DST" />
+
+    <many-to-one name="conditionDescriptor" 
+                 column="COND_DESCR_"
+                 class="org.jbpm.pvm.internal.wire.descriptor.AbstractDescriptor"
+                 cascade="all"
+                 foreign-key="FK_TRANS_COND"
+                 index="IDX_TRANS_COND" />
+                 
+    <!-- 
+    <many-to-one name="waitConditionDescriptor" 
+                 column="WAIT_DESCR_"
+                 class="org.jbpm.pvm.internal.wire.descriptor.AbstractDescriptor"
+                 cascade="all"
+                 foreign-key="FK_TRANS_WAIT_DESCR" 
+                 index="IDX_TRANS_WAIT_DESCR" />
+    -->
+    
+    <property name="isTakeAsync" column="TAKEASYNC_" />
+  </class>
+
+  <!-- ### EVENT ########################################################## -->
+  <class name="EventImpl" table="JBPM_EVENT">
+    <!-- ProcessElementImpl part ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
+    <id name="dbid" column="DBID_">
+      <generator class="native" />
+    </id>
+    <version name="dbversion" column="DBVERSION_" />
+    <many-to-one name="processDefinition"
+                 class="ProcessDefinitionImpl" 
+                 column="PROCESSDEF_" 
+                 foreign-key="FK_EVENT_PROCDEF" 
+                 index="IDX_EVENT_PROCDEF" />
+    <many-to-one name="properties"
+                 class="WireProperties" 
+                 column="PROPS_" 
+                 foreign-key="FK_EVENT_PROPS"
+                 index="IDX_EVENT_PROPS"
+                 cascade="all" />
+    <list name="exceptionHandlers" cascade="all">
+      <key foreign-key="FK_EXHDLR_EVENT">
+        <column name="EVENT_" index="IDX_EXHDLR_EVENT"/>
+      </key>
+      <index column="EVENT_IDX_" />
+      <one-to-many class="ExceptionHandlerImpl" />
+    </list>
+
+    <!-- EventImpl part ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
+    <property name="name" column="NAME_" />
+    <list name="listenerReferences" table="JBPM_OBJECTREFERENCES" cascade="all-delete-orphan">
+      <key foreign-key="FK_OBJECTREF_EVENT">
+        <column name="EVENT_" index="IDX_OBJREF_EVENT"/>
+      </key>
+      <list-index column="EVENT_IDX_" />
+      <one-to-many class="EventListenerReference" />
+    </list>
+  </class>
+  
+  <!-- ### EXCEPTION HANDLER ############################################## -->
+  <class name="ExceptionHandlerImpl" table="JBPM_EXCEPTHNDLR">
+    <id name="dbid" column="DBID_">
+      <generator class="native" />
+    </id>
+    <version name="dbversion" column="DBVERSION_" />
+    <property name="exceptionClassName" column="EXCEPT_CLASS_" />
+    <property name="isTransactional" column="TRANSACT_" />
+    <property name="isRethrowMasked" column="RETHROW_MASKED_"/>
+    <property name="transitionName" column="TRANSITIONNAME_" />
+    <property name="activityName" column="NODENAME_" />
+    <list name="eventListenerReferences" 
+          inverse="false"
+          cascade="all-delete-orphan"
+          table="JBPM_OBJECTREFERENCES">
+      <key foreign-key="FK_OBJREF_EXHNDLR" not-null="false">
+        <column name="EXHNDLR_" index="IDX_OBJREF_EXHNDLR" />
+      </key>
+      <list-index column="EXHNDLR_IDX_" />
+      <one-to-many class="ObjectReference" />
+    </list>
+  </class>
+  
+  <!-- ### OBJECT REFERENCE ############################################### -->
+  <class name="ObjectReference" discriminator-value="objref" table="JBPM_OBJECTREF">
+    <id name="dbid" column="DBID_">
+      <generator class="native" />
+    </id>
+    <discriminator column="CLASS_" />
+    <version name="dbversion" column="DBVERSION_" />
+    <many-to-one name="descriptor"
+                 column="OBJ_DESCR_"
+                 class="org.jbpm.pvm.internal.wire.descriptor.AbstractDescriptor"
+                 cascade="all"
+                 foreign-key="FK_OBJREF_EVENT" 
+                 index="IDX_OBJREF_EVENT"/>
+    <any name="object" id-type="long" cascade="all">
+      <!--  TODO: Specify names for classes -->
+      <column name="OBJ_CLASS_" />
+      <column name="OBJ_ID_" />
+    </any>
+    <property name="expression" column="OBJ_EXPRESSION_"/>
+    <property name="expressionLanguage" column="OBJ_EXPRLANG_"/>
+    
+    <subclass name="EventListenerReference" discriminator-value="evtlis">
+      <property name="isPropagationEnabled" column="PROPAGATE_" />
+    </subclass>
+        
+  </class>
+
+  <!-- ### VARIABLE DEFINITION ############################################ -->
+  <class name="VariableDefinitionImpl" table="JBPM_VARIABLEDEF">
+    <id name="dbid" column="DBID_">
+      <generator class="native" />
+    </id>
+    <version name="dbversion" column="DBVERSION_" />
+    <property name="name" column="NAME_"/>
+    <property name="typeName" column="TYPE_"/>
+    
+    <property name="inVariableName" column="INVAR_" />
+    <property name="inExpression" column="INEXPR_" />
+    <many-to-one name="inDescriptor" 
+                 column="INDESCR_"
+                 class="org.jbpm.pvm.internal.wire.descriptor.AbstractDescriptor"
+                 cascade="all"
+                 foreign-key="FK_VARDEF_INDES" 
+                 index="IDX_VARDEF_INDES"/>
+    <property name="outVariableName" column="OUTVAR_" />
+    <property name="outExpression" column="OUTEXPR_" />
+  </class>
+
+  <!-- ### TIMER DEFINITION ############################################### -->
+  <class name="TimerDefinitionImpl" table="JBPM_TIMERDEF">
+    <id name="dbid" column="DBID_">
+      <generator class="native" />
+    </id>
+    <version name="dbversion" column="DBVERSION_" />
+    <property name="dueDateDescription" column="DUEDATEDESCR_"/>
+    <property name="repeat" column="REPEAT_"/>
+    <property name="isExclusive" column="ISEXCL_"/>
+    <property name="retries" column="RETRIES_"/>
+    <property name="eventName" column="EVENT_"/>
+    <property name="signalName" column="SIGNAL_"/>
+    <property name="dueDate" column="DUEDATE_" type="timestamp"/>
+  </class>
+  
+  <!-- ### DESCRIPTORS #################################################### -->
+  <class name="org.jbpm.pvm.internal.wire.descriptor.AbstractDescriptor" table="JBPM_DESCRIPTOR" abstract="true"
+    discriminator-value="abstract">
+    <!--
+    byte     : ByteDescriptor 
+    string   : StringDescriptor
+    char     : CharacterDescriptor
+    class    : ClassDescriptor
+    double   : DoubleDescriptor
+    expr     : ExpressionDescriptor
+    float    : FloatDescriptor 
+    long     : LongDescriptor
+    int      : IntegerDescriptor
+    short    : ShortDescriptor
+    coll     : CollectionDescriptor 
+    map      : MapDescriptor
+    list     : ListDescriptor
+    set      : SetDescriptor
+    object   : ObjectDescriptor
+    ref      : ReferenceDescriptor
+    null     : NullDescriptor
+    true     : TrueDescriptor
+    false    : FalseDescriptor
+    provided : ProvidedObjectDescriptor
+    -->
+    <id name="dbid" column="DBID_">
+      <generator class="native" />
+    </id>
+    <discriminator column="CLASS_" />
+    <version name="dbversion" column="DBVERSION_" />
+
+    <property name="name" column="NAME_" />
+    <property name="init" column="INIT_" />
+
+    <subclass name="org.jbpm.pvm.internal.wire.descriptor.NullDescriptor" discriminator-value="null_" />
+    <subclass name="org.jbpm.pvm.internal.wire.descriptor.TrueDescriptor" discriminator-value="true" />
+    <subclass name="org.jbpm.pvm.internal.wire.descriptor.FalseDescriptor" discriminator-value="false" />
+
+    <subclass name="org.jbpm.pvm.internal.wire.descriptor.StringDescriptor" discriminator-value="string">
+      <property name="text" column="TEXT_" />
+    </subclass>
+
+    <subclass name="org.jbpm.pvm.internal.wire.descriptor.CharacterDescriptor" discriminator-value="char">
+      <property name="text" column="TEXT_" />
+    </subclass>
+    <subclass name="org.jbpm.pvm.internal.wire.descriptor.ClassDescriptor" discriminator-value="class">
+      <property name="text" column="TEXT_" />
+    </subclass>
+    <subclass name="org.jbpm.pvm.internal.wire.descriptor.ReferenceDescriptor" discriminator-value="ref">
+      <property name="text" column="TEXT_" />
+    </subclass>
+
+    <subclass name="org.jbpm.pvm.internal.wire.descriptor.DoubleDescriptor" discriminator-value="double">
+      <property name="doubleVal" column="DOUBLEVAL_" />
+    </subclass>
+    <subclass name="org.jbpm.pvm.internal.wire.descriptor.FloatDescriptor" discriminator-value="float">
+      <property name="doubleVal" column="DOUBLEVAL_" />
+    </subclass>
+
+    <subclass name="org.jbpm.pvm.internal.wire.descriptor.LongDescriptor" discriminator-value="long">
+      <property name="longVal" column="LONGVAL_" />
+    </subclass>
+    <subclass name="org.jbpm.pvm.internal.wire.descriptor.IntegerDescriptor" discriminator-value="int">
+      <property name="longVal" column="LONGVAL_" />
+    </subclass>
+    <subclass name="org.jbpm.pvm.internal.wire.descriptor.ShortDescriptor" discriminator-value="short">
+      <property name="longVal" column="LONGVAL_" />
+    </subclass>
+    <subclass name="org.jbpm.pvm.internal.wire.descriptor.ByteDescriptor" discriminator-value="byte">
+      <property name="longVal" column="LONGVAL_" />
+    </subclass>
+
+    <subclass name="org.jbpm.pvm.internal.wire.descriptor.CollectionDescriptor" discriminator-value="coll">
+      <property name="className" column="CLASSNAME_" />
+      <list name="valueDescriptors" cascade="all-delete-orphan">
+        <key foreign-key="FK_DESCR_VALDESCR">
+          <column name="VALUEDESCR_" index="IDX_DESCR_VALDESCR" />
+        </key>
+        <list-index column="VALUEDESCR_IDX_" />
+        <one-to-many class="org.jbpm.pvm.internal.wire.descriptor.AbstractDescriptor" />
+      </list>
+
+      <subclass name="org.jbpm.pvm.internal.wire.descriptor.MapDescriptor" discriminator-value="map">
+        <list name="keyDescriptors" cascade="all-delete-orphan">
+          <key column="KEYDESCR_" foreign-key="FK_DESCR_KEYDESCR" />
+          <list-index column="KEYDESCR_IDX_" />
+          <one-to-many class="org.jbpm.pvm.internal.wire.descriptor.AbstractDescriptor" />
+        </list>
+      </subclass>
+
+      <subclass name="org.jbpm.pvm.internal.wire.descriptor.ListDescriptor" discriminator-value="list" />
+      <subclass name="org.jbpm.pvm.internal.wire.descriptor.SetDescriptor" discriminator-value="set" />
+    </subclass>
+
+
+    <subclass name="org.jbpm.pvm.internal.wire.descriptor.ObjectDescriptor" discriminator-value="object">
+      <property name="className" column="TEXT_" />
+      <property name="methodName" column="METHOD_" />
+      <property name="isAutoWireEnabled" column="BOOLVAL_" />
+      <property name="factoryObjectName" column="FACTORYNAME_" />
+
+      <many-to-one name="factoryDescriptor" class="org.jbpm.pvm.internal.wire.descriptor.AbstractDescriptor" column="FACTORYDESCR_"
+        foreign-key="FK_DESCR_ARG_REF" index="IDX_DESCR_ARG_REF" cascade="all" />
+
+      <list name="argDescriptors" cascade="all-delete-orphan">
+        <key foreign-key="FK_OBJARG_DESCR">
+          <column name="OBJARG_DESCR_" index="IDX_OBJARG_DESCR" />
+        </key>
+        <list-index column="OBJARG_DESCR_IDX_" />
+        <one-to-many class="org.jbpm.pvm.internal.wire.descriptor.ArgDescriptor" />
+      </list>
+
+      <list name="operations" cascade="all-delete-orphan">
+        <key foreign-key="FK_OBJOPER_DESCR">
+          <column name="OBJOPER_DESCR_" index="IDX_OBJOPER_DESCR" />
+        </key>
+        <list-index column="OBJOPER_DESCR_IDX_" />
+        <one-to-many class="org.jbpm.pvm.internal.wire.operation.AbstractOperation" />
+      </list>
+    </subclass>
+
+    <subclass name="org.jbpm.pvm.internal.wire.descriptor.ExpressionDescriptor" discriminator-value="expr">
+      <property name="expr" column="TEXT_" />
+      <property name="lang" column="METHOD_" />
+    </subclass>
+
+    <subclass name="org.jbpm.pvm.internal.wire.descriptor.ProvidedObjectDescriptor" discriminator-value="provided">
+      <any name="providedObject" id-type="long" cascade="all">
+        <column name="TEXT_" />
+        <column name="LONGVAL_" />
+      </any>
+      <property name="exposeType" column="BOOLVAL_" />
+    </subclass>
+
+    <subclass name="org.jbpm.pvm.internal.wire.descriptor.EnvDescriptor" discriminator-value="env">
+      <property name="objectName" column="TEXT_" />
+      <property name="typeName" column="CLASSNAME_" />
+    </subclass>
+
+  </class>
+
+  <!-- ### OPERATIONS ##################################################### -->
+  <class name="org.jbpm.pvm.internal.wire.operation.AbstractOperation" abstract="true"
+    table="JBPM_OPERATION" discriminator-value="oper">
+    <id name="dbid" column="DBID_">
+      <generator class="native" />
+    </id>
+    <discriminator column="CLASS_" />
+    <version name="dbversion" column="DBVERSION_" />
+
+    <subclass name="org.jbpm.pvm.internal.wire.operation.FieldOperation"
+      discriminator-value="field">
+      <property name="fieldName" column="TEXT_" />
+      <many-to-one name="descriptor" column="DESCR_" cascade="all" 
+                   class="org.jbpm.pvm.internal.wire.descriptor.AbstractDescriptor"
+        foreign-key="FK_OPER_DESC" index="IDX_OPER_DESC" />
+    </subclass>
+
+    <subclass name="org.jbpm.pvm.internal.wire.operation.PropertyOperation"
+      discriminator-value="prop">
+      <property name="setterName" column="TEXT_" />
+      <many-to-one name="descriptor" column="DESCR_" cascade="all" 
+                   class="org.jbpm.pvm.internal.wire.descriptor.AbstractDescriptor" />
+    </subclass>
+
+    <subclass name="org.jbpm.pvm.internal.wire.operation.InvokeOperation"
+      discriminator-value="invoke">
+      <property name="methodName" column="TEXT_" />
+      <list name="argDescriptors" cascade="all-delete-orphan">
+        <key foreign-key="FK_ARGDSCR_OPER">
+          <column name="OPER_" index="IDX_ARGDSCR_OPER" />
+        </key>
+        <list-index column="OPER_IDX_" />
+        <one-to-many class="org.jbpm.pvm.internal.wire.descriptor.ArgDescriptor" />
+      </list>
+    </subclass>
+  </class>
+
+  <!-- ### ARG DESCRIPTOR ################################################# -->
+  <class name="org.jbpm.pvm.internal.wire.descriptor.ArgDescriptor" table="JBPM_ARGDESCRIPTOR">
+    <id name="dbid" column="DBID_">
+      <generator class="native" />
+    </id>
+    <version name="dbversion" column="DBVERSION_" />
+    <property name="typeName" column="TYPENAME_" />
+    <many-to-one name="descriptor" column="DESCRIPTOR_" 
+                 class="org.jbpm.pvm.internal.wire.descriptor.AbstractDescriptor"
+      foreign-key="FK_ARGDESCR_DESCR" index="IDX_ARGDESCR_DESCR" cascade="all" />
+  </class>
+
+  <!-- ### PROPERTIES ##################################################### -->
+  <class name="org.jbpm.pvm.internal.model.WireProperties" table="JBPM_WIREPROPS">
+    <id name="dbid" column="DBID_">
+      <generator class="native" />
+    </id>
+    <version name="dbversion" column="DBVERSION_" />
+    <component name="wireContext" class="org.jbpm.pvm.internal.wire.WireContext">
+      <component name="wireDefinition" class="org.jbpm.pvm.internal.wire.WireDefinition">
+        <map name="descriptors" cascade="all-delete-orphan" lazy="false">
+          <key foreign-key="FK_DESCR_PROPS">
+            <column name="PROPS_" index="IDX_DESCR_PROPS" />
+          </key>
+          <map-key type="string" column="NAME_" />
+          <one-to-many class="org.jbpm.pvm.internal.wire.descriptor.AbstractDescriptor" />
+        </map>
+      </component>
+    </component>
+  </class>
+  
+  
+  <!-- ### QUERIES ######################################################## -->
+  
+  <query name="findProcessDefinitionKeys">
+    <![CDATA[
+     select distinct process.key
+     from org.jbpm.pvm.internal.model.ProcessDefinitionImpl as process
+     order by process.key asc
+    ]]>
+  </query>
+
+  <query name="findProcessDefinitionsByKey">
+    <![CDATA[
+     select process
+     from org.jbpm.pvm.internal.model.ProcessDefinitionImpl as process
+     where process.key = :key
+     order by process.version desc    
+    ]]>
+  </query>
+
+  <query name="findProcessDefinitionById">
+    <![CDATA[
+     select process
+     from org.jbpm.pvm.internal.model.ProcessDefinitionImpl as process
+     where process.id = :id
+    ]]>
+  </query>
+  
+  <query name="findProcessDefinitionKeysByName">
+    <![CDATA[
+     select process.key
+     from org.jbpm.pvm.internal.model.ProcessDefinitionImpl as process
+     where process.name = :name
+    ]]>
+  </query>
+  
+  <query name="findProcessDefinitionNamesByKey">
+    <![CDATA[
+     select process.name
+     from org.jbpm.pvm.internal.model.ProcessDefinitionImpl as process
+     where process.key = :key
+    ]]>
+  </query>
+
+</hibernate-mapping>
\ No newline at end of file

Modified: jbpm4/trunk/modules/jpdl/src/test/resources/jbpm.jpdl.activities.xml
===================================================================
--- jbpm4/trunk/modules/jpdl/src/test/resources/jbpm.jpdl.activities.xml	2009-04-09 14:25:18 UTC (rev 4514)
+++ jbpm4/trunk/modules/jpdl/src/test/resources/jbpm.jpdl.activities.xml	2009-04-09 14:28:55 UTC (rev 4515)
@@ -1,5 +1,4 @@
 <activities>
-  <schema resource="jpdl.xsd" />
   <activity binding="org.jbpm.jpdl.internal.activity.StartBinding" />
   <activity binding="org.jbpm.jpdl.internal.activity.StateBinding" />
   <activity binding="org.jbpm.jpdl.internal.activity.ExclusiveBinding" />

Copied: jbpm4/trunk/modules/jpdl/src/test/resources/jbpm.jpdl.eventlisteners.xml (from rev 4513, jbpm4/branches/tbaeyens/modules/jpdl/src/test/resources/jbpm.jpdl.eventlisteners.xml)
===================================================================
--- jbpm4/trunk/modules/jpdl/src/test/resources/jbpm.jpdl.eventlisteners.xml	                        (rev 0)
+++ jbpm4/trunk/modules/jpdl/src/test/resources/jbpm.jpdl.eventlisteners.xml	2009-04-09 14:28:55 UTC (rev 4515)
@@ -0,0 +1,4 @@
+<eventlisteners>
+  <eventlistener binding="org.jbpm.jpdl.internal.activity.JavaBinding" />
+  <eventlistener binding="org.jbpm.jpdl.internal.activity.EventListenerBinding" />
+</eventlisteners>

Copied: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/repository/DeploymentClassLoader.java (from rev 4513, jbpm4/branches/tbaeyens/modules/pvm/src/main/java/org/jbpm/pvm/internal/repository/DeploymentClassLoader.java)
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/repository/DeploymentClassLoader.java	                        (rev 0)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/repository/DeploymentClassLoader.java	2009-04-09 14:28:55 UTC (rev 4515)
@@ -0,0 +1,114 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jbpm.pvm.internal.repository;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.URLConnection;
+import java.net.URLStreamHandler;
+
+import org.jbpm.JbpmException;
+import org.jbpm.pvm.internal.util.IoUtil;
+
+
+/**
+ * @author Tom Baeyens
+ */
+public class DeploymentClassLoader extends ClassLoader {
+
+  private DeploymentImpl deployment = null;
+
+  public DeploymentClassLoader(ClassLoader parent, DeploymentImpl deployment ) {
+    super(parent);
+    this.deployment = deployment;
+  }
+
+  public URL findResource(String name) {
+    URL url = null;
+    InputStream inputStream = deployment.getResourceAsStream(name);
+    if (inputStream!=null) {
+      try {
+        url = new URL(null, "jbpm://"+deployment.getDbid()+"/"+name, new BytesUrlStreamHandler(inputStream));
+      } catch (MalformedURLException e) {
+        throw new JbpmException("couldn't create url", e);
+      }
+    }
+    return url;
+  }
+  
+  public static class BytesUrlStreamHandler extends URLStreamHandler {
+    InputStream inputStream;
+    public BytesUrlStreamHandler(InputStream inputStream) {
+      this.inputStream = inputStream;
+    }
+    protected URLConnection openConnection(URL u) throws IOException {
+      return new BytesUrlConnection(inputStream, u);
+    }
+  }
+
+  public static class BytesUrlConnection extends URLConnection {
+    InputStream inputStream;
+    public BytesUrlConnection(InputStream inputStream, URL url) {
+      super(url);
+      this.inputStream = inputStream;
+    }
+    public void connect() throws IOException {
+    }
+    public InputStream getInputStream() throws IOException {
+      return inputStream;
+    }
+  }
+
+  public Class findClass(String name) throws ClassNotFoundException {
+    Class clazz = null;
+
+    String fileName = name.replace( '.', '/' ) + ".class";
+    InputStream inputStream = deployment.getResourceAsStream(fileName);
+    if (inputStream!=null) {
+      try {
+        byte[] classBytes = IoUtil.readBytes(inputStream);
+        clazz = defineClass(name, classBytes, 0, classBytes.length);
+
+        // Add the package information
+        final int packageIndex = name.lastIndexOf('.');
+        if (packageIndex != -1) {
+          final String packageName = name.substring(0, packageIndex);
+          final Package classPackage = getPackage(packageName);
+          if (classPackage == null) {
+            definePackage(packageName, null, null, null, null, null, null, null);
+          }
+        }
+
+      } catch (JbpmException e) {
+        clazz = null;
+      }
+    }
+
+    if (clazz==null) {
+      throw new ClassNotFoundException("class '"+name+"' could not be found in jbpm "+deployment);
+    }
+
+    return clazz;
+  }
+}

Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/repository/DeploymentImpl.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/repository/DeploymentImpl.java	2009-04-09 14:25:18 UTC (rev 4514)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/repository/DeploymentImpl.java	2009-04-09 14:28:55 UTC (rev 4515)
@@ -70,6 +70,10 @@
     this.commandService = commandService;
   }
   
+  public String toString() {
+    return "deployment("+dbid+")";
+  }
+  
   public long deploy() {
     return commandService.execute(new DeployCmd(this));
   }

Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/util/TagBinding.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/util/TagBinding.java	2009-04-09 14:25:18 UTC (rev 4514)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/util/TagBinding.java	2009-04-09 14:28:55 UTC (rev 4515)
@@ -79,4 +79,13 @@
   public String getNamespaceUri() {
     return namespaceUri;
   }
+  public void setCategory(String category) {
+    this.category = category;
+  }
+  public void setTagName(String tagName) {
+    this.tagName = tagName;
+  }
+  public void setNamespaceUri(String namespaceUri) {
+    this.namespaceUri = namespaceUri;
+  }
 }

Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/xml/Parser.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/xml/Parser.java	2009-04-09 14:25:18 UTC (rev 4514)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/xml/Parser.java	2009-04-09 14:28:55 UTC (rev 4515)
@@ -319,7 +319,7 @@
       URL schemaUrl = classLoader.getResource(schemaResource);
       if (schemaUrl!=null) {
         String schemaLocation = schemaUrl.toString();
-        log.debug("schema resource found: " + schemaResource);
+        log.trace("schema resource found: " + schemaResource);
         schemaLocations.add(schemaLocation);
       } else {
         log.debug("skipping unavailble schema resource: " + schemaResource);

Copied: jbpm4/trunk/modules/pvm/src/test/resources/jbpm.cache.xml (from rev 4513, jbpm4/branches/tbaeyens/modules/pvm/src/test/resources/jbpm.cache.xml)
===================================================================
--- jbpm4/trunk/modules/pvm/src/test/resources/jbpm.cache.xml	                        (rev 0)
+++ jbpm4/trunk/modules/pvm/src/test/resources/jbpm.cache.xml	2009-04-09 14:28:55 UTC (rev 4515)
@@ -0,0 +1,39 @@
+<hibernate-cache>
+
+  <class-cache class="org.jbpm.pvm.internal.model.ProcessDefinitionImpl" />
+	<class-cache class="org.jbpm.pvm.internal.model.ActivityImpl" />
+	<class-cache class="org.jbpm.pvm.internal.model.TransitionImpl" />
+	<class-cache class="org.jbpm.pvm.internal.model.EventImpl" />
+	<class-cache class="org.jbpm.pvm.internal.model.ExceptionHandlerImpl" />
+	<class-cache class="org.jbpm.pvm.internal.model.ObjectReference" />
+  <class-cache class="org.jbpm.pvm.internal.model.VariableDefinitionImpl" />
+  <class-cache class="org.jbpm.pvm.internal.model.TimerDefinitionImpl" />
+  <class-cache class="org.jbpm.pvm.internal.wire.descriptor.AbstractDescriptor" />
+
+	<collection-cache collection="org.jbpm.pvm.internal.model.ProcessDefinitionImpl.exceptionHandlers" />
+	<collection-cache collection="org.jbpm.pvm.internal.model.ProcessDefinitionImpl.events" />
+	<collection-cache collection="org.jbpm.pvm.internal.model.ProcessDefinitionImpl.activities" />
+	<collection-cache collection="org.jbpm.pvm.internal.model.ProcessDefinitionImpl.variableDefinitions" />
+	<collection-cache collection="org.jbpm.pvm.internal.model.ProcessDefinitionImpl.timerDefinitions" />
+  <collection-cache collection="org.jbpm.pvm.internal.model.ProcessDefinitionImpl.attachments" />
+
+	<collection-cache collection="org.jbpm.pvm.internal.model.ActivityImpl.exceptionHandlers" />
+	<collection-cache collection="org.jbpm.pvm.internal.model.ActivityImpl.events" />
+	<collection-cache collection="org.jbpm.pvm.internal.model.ActivityImpl.activities" />
+	<collection-cache collection="org.jbpm.pvm.internal.model.ActivityImpl.variableDefinitions" />
+	<collection-cache collection="org.jbpm.pvm.internal.model.ActivityImpl.timerDefinitions" />
+	<collection-cache collection="org.jbpm.pvm.internal.model.ActivityImpl.incomingTransitions" />
+	<collection-cache collection="org.jbpm.pvm.internal.model.ActivityImpl.outgoingTransitions" />
+
+	<collection-cache collection="org.jbpm.pvm.internal.model.TransitionImpl.exceptionHandlers" />
+	<collection-cache collection="org.jbpm.pvm.internal.model.TransitionImpl.events" />
+
+	<collection-cache collection="org.jbpm.pvm.internal.model.EventImpl.exceptionHandlers" />
+	<collection-cache collection="org.jbpm.pvm.internal.model.EventImpl.listenerReferences" />
+	  
+	<collection-cache collection="org.jbpm.pvm.internal.model.ExceptionHandlerImpl.eventListenerReferences" />
+
+  <collection-cache collection="org.jbpm.pvm.internal.wire.descriptor.ObjectDescriptor.argDescriptors" />
+  <collection-cache collection="org.jbpm.pvm.internal.wire.descriptor.ObjectDescriptor.operations" />
+	
+</hibernate-cache>

Copied: jbpm4/trunk/modules/pvm/src/test/resources/jbpm.definition.hbm.xml (from rev 4513, jbpm4/branches/tbaeyens/modules/pvm/src/test/resources/jbpm.definition.hbm.xml)
===================================================================
--- jbpm4/trunk/modules/pvm/src/test/resources/jbpm.definition.hbm.xml	                        (rev 0)
+++ jbpm4/trunk/modules/pvm/src/test/resources/jbpm.definition.hbm.xml	2009-04-09 14:28:55 UTC (rev 4515)
@@ -0,0 +1,646 @@
+<?xml version="1.0"?>
+<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+
+<hibernate-mapping package="org.jbpm.pvm.internal.model" default-access="field">
+
+  <!-- ### PROCESS DEFINITION ############################################# -->
+  <class name="ProcessDefinitionImpl" 
+         table="JBPM_PROCESS"
+         discriminator-value="pvm">
+    <!-- ProcessElementImpl part ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
+    <id name="dbid" column="DBID_">
+      <generator class="native" />
+    </id>
+    <discriminator><column name="CLASS_" /></discriminator>
+
+    <version name="dbversion" column="DBVERSION_" />
+    <many-to-one name="properties"
+                 class="WireProperties" 
+                 column="PROPS_" 
+                 foreign-key="FK_PROCDEF_PROPS"
+                 index="IDX_PROCDEF_PROPS"
+                 cascade="all" />
+    <list name="exceptionHandlers" cascade="all">
+      <key foreign-key="FK_EXHDLR_PROCESS">
+        <column name="PROCESS_" index="IDX_EXHDLR_PROCESS"/>
+      </key>
+      <index column="PROCESS_IDX_" />
+      <one-to-many class="ExceptionHandlerImpl"/>
+    </list>
+
+    <!-- ObservableElementImpl part ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
+    <property name="name" column="NAME_" />
+    <property name="description" column="DESCR_" />
+    <map name="events" cascade="all-delete-orphan">
+      <key foreign-key="FK_EVENT_PROCESS">
+        <column name="PROCESS_" index="IDX_EVENT_PROCESS" />
+      </key>
+      <map-key type="string" column="NAME_" />
+      <one-to-many class="org.jbpm.pvm.internal.model.EventImpl"/>
+    </map>
+
+    <!-- CompositeElementImpl part ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
+    <list name="activities" cascade="all" inverse="false">
+      <key foreign-key="FK_ACTS_PROCESS">
+        <column name="ACTSPROCESS_" index="IDX_ACTS_PROCESS"/>
+      </key>
+      <list-index column="ACTSPROCESS_IDX_" />
+      <one-to-many class="ActivityImpl" />
+    </list>
+    <property name="hasVariableDefinitions" column="HAS_VAR_DEF_" />
+    <list name="variableDefinitions" cascade="all">
+      <key foreign-key="FK_VARDEF_PROCESS">
+        <column name="PROCESS_" index="IDX_VARDEF_PROCESS"/>
+      </key>
+      <index column="PROCESS_IDX_" />
+      <one-to-many class="VariableDefinitionImpl" />
+    </list>
+    <property name="hasTimerDefinitions" column="HAS_TIMER_DEF_" />
+    <set name="timerDefinitions" cascade="all">
+      <key foreign-key="FK_TMRDEF_PROCESS">
+        <column name="PROCESS_" index="IDX_TMRDEF_PROCESS"/>
+      </key>
+      <one-to-many class="TimerDefinitionImpl" />
+    </set>
+
+    <!-- ProcessDefinitionImpl part ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
+    <property name="key" column="KEY_" />
+    <property name="id" column="ID_" unique="true" />
+
+    <property name="packageName" column="PACKAGE_" />
+    <property name="version" column="VERSION_" />
+    <property name="deploymentTime" column="DEPLOYED_" />
+    <many-to-one name="initial" 
+                 column="INITIAL_"
+                 class="ActivityImpl"
+                 cascade="all" 
+                 foreign-key="FK_PROCDEF_INITIAL"
+                 index="IDX_PROCDEF_INIT"
+                 fetch="select" />
+
+    <map name="attachments" cascade="all-delete-orphan">
+      <key foreign-key="FK_LOB_PROCESS">
+        <column name="PROCESS_" index="IDX_LOB_PROCESS" />
+      </key>
+      <map-key type="string" column="NAME_" />
+      <one-to-many class="org.jbpm.pvm.internal.lob.Lob"/>
+    </map>
+  </class>
+
+  <!-- ### Activity ############################################################## -->
+  <class name="ActivityImpl" table="JBPM_ACTIVITY">
+    <!-- ProcessElementImpl part ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
+    <id name="dbid" column="DBID_">
+      <generator class="native" />
+    </id>
+    <version name="dbversion" column="DBVERSION_" />
+    <many-to-one name="processDefinition"
+                 class="ProcessDefinitionImpl" 
+                 column="PROCESS_" 
+                 foreign-key="FK_ACT_PROCESS"
+                 index="IDX_ACT_PROCESS" />
+    <many-to-one name="properties"
+                 class="WireProperties" 
+                 column="PROPS_" 
+                 foreign-key="FK_ACT_PROPS"
+                 index="IDX_ACT_PROPS"
+                 cascade="all" />
+    <list name="exceptionHandlers" cascade="all">
+      <key foreign-key="FK_EXHDLR_ACT">
+        <column name="ACT_" index="IDX_EXHDLR_ACT"/>
+      </key>
+      <index column="ACT_IDX_" />
+      <one-to-many class="ExceptionHandlerImpl" />
+    </list>
+
+    <!-- ObservableElementImpl part ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
+    <property name="name" column="NAME_"/>
+    <property name="description" column="DESCR_"/>
+    <map name="events" cascade="all-delete-orphan">
+      <key foreign-key="FK_EVENT_ACT">
+        <column name="ACT_" index="IDX_EVENT_ACT" />
+      </key>
+      <map-key type="string" column="NAME_" />
+      <one-to-many class="org.jbpm.pvm.internal.model.EventImpl" />
+    </map>
+
+    <!-- CompositeElementImpl part ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
+    <list name="activities" cascade="all" inverse="false">
+      <key column="PARENT_" foreign-key="none" />
+      <list-index column="PARENT_IDX_" />
+      <one-to-many class="ActivityImpl" />
+    </list>
+    <property name="hasVariableDefinitions" column="HAS_VAR_DEF_" />
+    <list name="variableDefinitions" cascade="all">
+      <key foreign-key="FK_VARDEF_ACT">
+        <column name="ACT_" index="IDX_VARDEF_ACT"/>
+      </key>
+      <index column="ACT_IDX_" />
+      <one-to-many class="VariableDefinitionImpl" />
+    </list>
+    <property name="hasTimerDefinitions" column="HAS_TIMER_DEF_" />
+    <set name="timerDefinitions" cascade="all">
+      <key foreign-key="FK_TMRDEF_ACT">
+        <column name="ACT_" index="IDX_TMRDEF_ACT"/>
+      </key>
+      <one-to-many class="TimerDefinitionImpl" />
+    </set>
+
+    <!-- ActivityImpl part ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
+    <property name="type" column="TYPE_" />
+    <property name="isLocalScope" column="LOCAL_SCOPE_" />
+    <property name="isExecutionAsync" column="EXEC_ASYNC_" />
+    <property name="isSignalAsync" column="SIGNAL_ASYNC_" />
+    <property name="isPreviousNeeded" column="PREV_NEEDED_" />
+
+    <many-to-one name="parentActivity" 
+                 column="PARENT_"
+                 class="ActivityImpl"
+                 cascade="all"
+                 foreign-key="FK_ACT_PARENT" 
+                 index="IDX_ACT_PARENT" />
+
+    <many-to-one name="defaultTransition"
+                 column="DEFTRANS_" 
+                 class="TransitionImpl"
+                 fetch="select"
+                 foreign-key="FK_ACT_DEFTRANS" 
+                 index="IDX_ACT_DEFTRANS" />
+
+    <list name="incomingTransitions" inverse="false">
+      <key column="DESTINATION_" />
+      <index column="IN_IDX_" />
+      <one-to-many class="TransitionImpl" />
+    </list>
+
+    <list name="outgoingTransitions" inverse="false" cascade="all">
+      <key column="SOURCE_" />
+      <index column="OUT_IDX_" />
+      <one-to-many class="TransitionImpl" />
+    </list>
+
+    <component name="behaviourReference" class="ObjectReference">
+      <many-to-one name="descriptor"
+                   column="BEHAV_DESCR_" 
+                   cascade="all"
+                   class="org.jbpm.pvm.internal.wire.descriptor.AbstractDescriptor"
+                   foreign-key="FK_NODE_BEHAV_DESCR"
+                   index="IDX_NODE_BEHAV_DESCR" />
+      <any name="object" id-type="long" cascade="all">
+        <!--  TODO: Specify names for classes -->
+        <!--        <meta-value value="bpel::activity" class="org.jbpm.pvm.bpel.BpelActivity"/> -->
+        <column name="BEHAV_CLASS_" />
+        <column name="BEHAV_ID_" />
+      </any>
+    </component>
+  </class>
+
+  <!-- ### TRANSITION ##################################################### -->
+  <class name="TransitionImpl" table="JBPM_TRANSITION">
+    <!-- ProcessElementImpl part ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
+    <id name="dbid" column="DBID_">
+      <generator class="native" />
+    </id>
+    <version name="dbversion" column="DBVERSION_" />
+    <many-to-one name="processDefinition"
+                 class="ProcessDefinitionImpl" 
+                 column="PROCESS_" 
+                 foreign-key="FK_TRANS_PROCDEF"
+                 index="IDX_TRANS_PROCDEF" />
+    <many-to-one name="properties"
+                 class="WireProperties" 
+                 column="PROPS_" 
+                 foreign-key="FK_TRANS_PROPS"
+                 index="IDX_TRANS_PROPS"
+                 cascade="all" />
+    <list name="exceptionHandlers" cascade="all">
+      <key foreign-key="FK_EXHDLR_TRANS">
+        <column name="TRANSITION_" index="IDX_EXHDLR_TRANS" />
+      </key>
+      <index column="TRANSITION_IDX_" />
+      <one-to-many class="ExceptionHandlerImpl" />
+    </list>
+
+    <!-- ObservableElementImpl part ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
+    <property name="name" column="NAME_" />
+    <property name="description" column="DESCR_" />
+    <map name="events" cascade="all-delete-orphan">
+      <key foreign-key="FK_EVENT_TRANS">
+        <column name="TRANSITION_" index="IDX_EVENT_TRANS" />
+      </key>
+      <map-key type="string" column="NAME_" />
+      <one-to-many class="org.jbpm.pvm.internal.model.EventImpl" />
+    </map>
+    
+    <!-- TransitionImpl part ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
+    <many-to-one name="source"
+                 column="SRC_" 
+                 class="ActivityImpl" 
+                 fetch="select" 
+                 foreign-key="FK_TRANS_SRC" 
+                 index="IDX_TRANS_SRC" />
+
+    <many-to-one name="destination"
+                 column="DEST_" 
+                 class="ActivityImpl" 
+                 fetch="select"
+                 cascade="all"
+                 foreign-key="FK_TRANS_DST" 
+                 index="IDX_TRANS_DST" />
+
+    <many-to-one name="conditionDescriptor" 
+                 column="COND_DESCR_"
+                 class="org.jbpm.pvm.internal.wire.descriptor.AbstractDescriptor"
+                 cascade="all"
+                 foreign-key="FK_TRANS_COND"
+                 index="IDX_TRANS_COND" />
+                 
+    <!-- 
+    <many-to-one name="waitConditionDescriptor" 
+                 column="WAIT_DESCR_"
+                 class="org.jbpm.pvm.internal.wire.descriptor.AbstractDescriptor"
+                 cascade="all"
+                 foreign-key="FK_TRANS_WAIT_DESCR" 
+                 index="IDX_TRANS_WAIT_DESCR" />
+    -->
+    
+    <property name="isTakeAsync" column="TAKEASYNC_" />
+  </class>
+
+  <!-- ### EVENT ########################################################## -->
+  <class name="EventImpl" table="JBPM_EVENT">
+    <!-- ProcessElementImpl part ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
+    <id name="dbid" column="DBID_">
+      <generator class="native" />
+    </id>
+    <version name="dbversion" column="DBVERSION_" />
+    <many-to-one name="processDefinition"
+                 class="ProcessDefinitionImpl" 
+                 column="PROCESSDEF_" 
+                 foreign-key="FK_EVENT_PROCDEF" 
+                 index="IDX_EVENT_PROCDEF" />
+    <many-to-one name="properties"
+                 class="WireProperties" 
+                 column="PROPS_" 
+                 foreign-key="FK_EVENT_PROPS"
+                 index="IDX_EVENT_PROPS"
+                 cascade="all" />
+    <list name="exceptionHandlers" cascade="all">
+      <key foreign-key="FK_EXHDLR_EVENT">
+        <column name="EVENT_" index="IDX_EXHDLR_EVENT"/>
+      </key>
+      <index column="EVENT_IDX_" />
+      <one-to-many class="ExceptionHandlerImpl" />
+    </list>
+
+    <!-- EventImpl part ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
+    <property name="name" column="NAME_" />
+    <list name="listenerReferences" table="JBPM_OBJECTREFERENCES" cascade="all-delete-orphan">
+      <key foreign-key="FK_OBJECTREF_EVENT">
+        <column name="EVENT_" index="IDX_OBJREF_EVENT"/>
+      </key>
+      <list-index column="EVENT_IDX_" />
+      <one-to-many class="EventListenerReference" />
+    </list>
+  </class>
+  
+  <!-- ### EXCEPTION HANDLER ############################################## -->
+  <class name="ExceptionHandlerImpl" table="JBPM_EXCEPTHNDLR">
+    <id name="dbid" column="DBID_">
+      <generator class="native" />
+    </id>
+    <version name="dbversion" column="DBVERSION_" />
+    <property name="exceptionClassName" column="EXCEPT_CLASS_" />
+    <property name="isTransactional" column="TRANSACT_" />
+    <property name="isRethrowMasked" column="RETHROW_MASKED_"/>
+    <property name="transitionName" column="TRANSITIONNAME_" />
+    <property name="activityName" column="NODENAME_" />
+    <list name="eventListenerReferences" 
+          inverse="false"
+          cascade="all-delete-orphan"
+          table="JBPM_OBJECTREFERENCES">
+      <key foreign-key="FK_OBJREF_EXHNDLR" not-null="false">
+        <column name="EXHNDLR_" index="IDX_OBJREF_EXHNDLR" />
+      </key>
+      <list-index column="EXHNDLR_IDX_" />
+      <one-to-many class="ObjectReference" />
+    </list>
+  </class>
+  
+  <!-- ### OBJECT REFERENCE ############################################### -->
+  <class name="ObjectReference" discriminator-value="objref" table="JBPM_OBJECTREF">
+    <id name="dbid" column="DBID_">
+      <generator class="native" />
+    </id>
+    <discriminator column="CLASS_" />
+    <version name="dbversion" column="DBVERSION_" />
+    <many-to-one name="descriptor"
+                 column="OBJ_DESCR_"
+                 class="org.jbpm.pvm.internal.wire.descriptor.AbstractDescriptor"
+                 cascade="all"
+                 foreign-key="FK_OBJREF_EVENT" 
+                 index="IDX_OBJREF_EVENT"/>
+    <any name="object" id-type="long" cascade="all">
+      <!--  TODO: Specify names for classes -->
+      <column name="OBJ_CLASS_" />
+      <column name="OBJ_ID_" />
+    </any>
+    <property name="expression" column="OBJ_EXPRESSION_"/>
+    <property name="expressionLanguage" column="OBJ_EXPRLANG_"/>
+    
+    <subclass name="EventListenerReference" discriminator-value="evtlis">
+      <property name="isPropagationEnabled" column="PROPAGATE_" />
+    </subclass>
+        
+  </class>
+
+  <!-- ### VARIABLE DEFINITION ############################################ -->
+  <class name="VariableDefinitionImpl" table="JBPM_VARIABLEDEF">
+    <id name="dbid" column="DBID_">
+      <generator class="native" />
+    </id>
+    <version name="dbversion" column="DBVERSION_" />
+    <property name="name" column="NAME_"/>
+    <property name="typeName" column="TYPE_"/>
+    
+    <property name="inVariableName" column="INVAR_" />
+    <property name="inExpression" column="INEXPR_" />
+    <many-to-one name="inDescriptor" 
+                 column="INDESCR_"
+                 class="org.jbpm.pvm.internal.wire.descriptor.AbstractDescriptor"
+                 cascade="all"
+                 foreign-key="FK_VARDEF_INDES" 
+                 index="IDX_VARDEF_INDES"/>
+    <property name="outVariableName" column="OUTVAR_" />
+    <property name="outExpression" column="OUTEXPR_" />
+  </class>
+
+  <!-- ### TIMER DEFINITION ############################################### -->
+  <class name="TimerDefinitionImpl" table="JBPM_TIMERDEF">
+    <id name="dbid" column="DBID_">
+      <generator class="native" />
+    </id>
+    <version name="dbversion" column="DBVERSION_" />
+    <property name="dueDateDescription" column="DUEDATEDESCR_"/>
+    <property name="repeat" column="REPEAT_"/>
+    <property name="isExclusive" column="ISEXCL_"/>
+    <property name="retries" column="RETRIES_"/>
+    <property name="eventName" column="EVENT_"/>
+    <property name="signalName" column="SIGNAL_"/>
+    <property name="dueDate" column="DUEDATE_" type="timestamp"/>
+  </class>
+  
+  <!-- ### DESCRIPTORS #################################################### -->
+  <class name="org.jbpm.pvm.internal.wire.descriptor.AbstractDescriptor" table="JBPM_DESCRIPTOR" abstract="true"
+    discriminator-value="abstract">
+    <!--
+    byte     : ByteDescriptor 
+    string   : StringDescriptor
+    char     : CharacterDescriptor
+    class    : ClassDescriptor
+    double   : DoubleDescriptor
+    expr     : ExpressionDescriptor
+    float    : FloatDescriptor 
+    long     : LongDescriptor
+    int      : IntegerDescriptor
+    short    : ShortDescriptor
+    coll     : CollectionDescriptor 
+    map      : MapDescriptor
+    list     : ListDescriptor
+    set      : SetDescriptor
+    object   : ObjectDescriptor
+    ref      : ReferenceDescriptor
+    null     : NullDescriptor
+    true     : TrueDescriptor
+    false    : FalseDescriptor
+    provided : ProvidedObjectDescriptor
+    -->
+    <id name="dbid" column="DBID_">
+      <generator class="native" />
+    </id>
+    <discriminator column="CLASS_" />
+    <version name="dbversion" column="DBVERSION_" />
+
+    <property name="name" column="NAME_" />
+    <property name="init" column="INIT_" />
+
+    <subclass name="org.jbpm.pvm.internal.wire.descriptor.NullDescriptor" discriminator-value="null_" />
+    <subclass name="org.jbpm.pvm.internal.wire.descriptor.TrueDescriptor" discriminator-value="true" />
+    <subclass name="org.jbpm.pvm.internal.wire.descriptor.FalseDescriptor" discriminator-value="false" />
+
+    <subclass name="org.jbpm.pvm.internal.wire.descriptor.StringDescriptor" discriminator-value="string">
+      <property name="text" column="TEXT_" />
+    </subclass>
+
+    <subclass name="org.jbpm.pvm.internal.wire.descriptor.CharacterDescriptor" discriminator-value="char">
+      <property name="text" column="TEXT_" />
+    </subclass>
+    <subclass name="org.jbpm.pvm.internal.wire.descriptor.ClassDescriptor" discriminator-value="class">
+      <property name="text" column="TEXT_" />
+    </subclass>
+    <subclass name="org.jbpm.pvm.internal.wire.descriptor.ReferenceDescriptor" discriminator-value="ref">
+      <property name="text" column="TEXT_" />
+    </subclass>
+
+    <subclass name="org.jbpm.pvm.internal.wire.descriptor.DoubleDescriptor" discriminator-value="double">
+      <property name="doubleVal" column="DOUBLEVAL_" />
+    </subclass>
+    <subclass name="org.jbpm.pvm.internal.wire.descriptor.FloatDescriptor" discriminator-value="float">
+      <property name="doubleVal" column="DOUBLEVAL_" />
+    </subclass>
+
+    <subclass name="org.jbpm.pvm.internal.wire.descriptor.LongDescriptor" discriminator-value="long">
+      <property name="longVal" column="LONGVAL_" />
+    </subclass>
+    <subclass name="org.jbpm.pvm.internal.wire.descriptor.IntegerDescriptor" discriminator-value="int">
+      <property name="longVal" column="LONGVAL_" />
+    </subclass>
+    <subclass name="org.jbpm.pvm.internal.wire.descriptor.ShortDescriptor" discriminator-value="short">
+      <property name="longVal" column="LONGVAL_" />
+    </subclass>
+    <subclass name="org.jbpm.pvm.internal.wire.descriptor.ByteDescriptor" discriminator-value="byte">
+      <property name="longVal" column="LONGVAL_" />
+    </subclass>
+
+    <subclass name="org.jbpm.pvm.internal.wire.descriptor.CollectionDescriptor" discriminator-value="coll">
+      <property name="className" column="CLASSNAME_" />
+      <list name="valueDescriptors" cascade="all-delete-orphan">
+        <key foreign-key="FK_DESCR_VALDESCR">
+          <column name="VALUEDESCR_" index="IDX_DESCR_VALDESCR" />
+        </key>
+        <list-index column="VALUEDESCR_IDX_" />
+        <one-to-many class="org.jbpm.pvm.internal.wire.descriptor.AbstractDescriptor" />
+      </list>
+
+      <subclass name="org.jbpm.pvm.internal.wire.descriptor.MapDescriptor" discriminator-value="map">
+        <list name="keyDescriptors" cascade="all-delete-orphan">
+          <key column="KEYDESCR_" foreign-key="FK_DESCR_KEYDESCR" />
+          <list-index column="KEYDESCR_IDX_" />
+          <one-to-many class="org.jbpm.pvm.internal.wire.descriptor.AbstractDescriptor" />
+        </list>
+      </subclass>
+
+      <subclass name="org.jbpm.pvm.internal.wire.descriptor.ListDescriptor" discriminator-value="list" />
+      <subclass name="org.jbpm.pvm.internal.wire.descriptor.SetDescriptor" discriminator-value="set" />
+    </subclass>
+
+
+    <subclass name="org.jbpm.pvm.internal.wire.descriptor.ObjectDescriptor" discriminator-value="object">
+      <property name="className" column="TEXT_" />
+      <property name="methodName" column="METHOD_" />
+      <property name="isAutoWireEnabled" column="BOOLVAL_" />
+      <property name="factoryObjectName" column="FACTORYNAME_" />
+
+      <many-to-one name="factoryDescriptor" class="org.jbpm.pvm.internal.wire.descriptor.AbstractDescriptor" column="FACTORYDESCR_"
+        foreign-key="FK_DESCR_ARG_REF" index="IDX_DESCR_ARG_REF" cascade="all" />
+
+      <list name="argDescriptors" cascade="all-delete-orphan">
+        <key foreign-key="FK_OBJARG_DESCR">
+          <column name="OBJARG_DESCR_" index="IDX_OBJARG_DESCR" />
+        </key>
+        <list-index column="OBJARG_DESCR_IDX_" />
+        <one-to-many class="org.jbpm.pvm.internal.wire.descriptor.ArgDescriptor" />
+      </list>
+
+      <list name="operations" cascade="all-delete-orphan">
+        <key foreign-key="FK_OBJOPER_DESCR">
+          <column name="OBJOPER_DESCR_" index="IDX_OBJOPER_DESCR" />
+        </key>
+        <list-index column="OBJOPER_DESCR_IDX_" />
+        <one-to-many class="org.jbpm.pvm.internal.wire.operation.AbstractOperation" />
+      </list>
+    </subclass>
+
+    <subclass name="org.jbpm.pvm.internal.wire.descriptor.ExpressionDescriptor" discriminator-value="expr">
+      <property name="expr" column="TEXT_" />
+      <property name="lang" column="METHOD_" />
+    </subclass>
+
+    <subclass name="org.jbpm.pvm.internal.wire.descriptor.ProvidedObjectDescriptor" discriminator-value="provided">
+      <any name="providedObject" id-type="long" cascade="all">
+        <column name="TEXT_" />
+        <column name="LONGVAL_" />
+      </any>
+      <property name="exposeType" column="BOOLVAL_" />
+    </subclass>
+
+    <subclass name="org.jbpm.pvm.internal.wire.descriptor.EnvDescriptor" discriminator-value="env">
+      <property name="objectName" column="TEXT_" />
+      <property name="typeName" column="CLASSNAME_" />
+    </subclass>
+
+  </class>
+
+  <!-- ### OPERATIONS ##################################################### -->
+  <class name="org.jbpm.pvm.internal.wire.operation.AbstractOperation" abstract="true"
+    table="JBPM_OPERATION" discriminator-value="oper">
+    <id name="dbid" column="DBID_">
+      <generator class="native" />
+    </id>
+    <discriminator column="CLASS_" />
+    <version name="dbversion" column="DBVERSION_" />
+
+    <subclass name="org.jbpm.pvm.internal.wire.operation.FieldOperation"
+      discriminator-value="field">
+      <property name="fieldName" column="TEXT_" />
+      <many-to-one name="descriptor" column="DESCR_" cascade="all" 
+                   class="org.jbpm.pvm.internal.wire.descriptor.AbstractDescriptor"
+        foreign-key="FK_OPER_DESC" index="IDX_OPER_DESC" />
+    </subclass>
+
+    <subclass name="org.jbpm.pvm.internal.wire.operation.PropertyOperation"
+      discriminator-value="prop">
+      <property name="setterName" column="TEXT_" />
+      <many-to-one name="descriptor" column="DESCR_" cascade="all" 
+                   class="org.jbpm.pvm.internal.wire.descriptor.AbstractDescriptor" />
+    </subclass>
+
+    <subclass name="org.jbpm.pvm.internal.wire.operation.InvokeOperation"
+      discriminator-value="invoke">
+      <property name="methodName" column="TEXT_" />
+      <list name="argDescriptors" cascade="all-delete-orphan">
+        <key foreign-key="FK_ARGDSCR_OPER">
+          <column name="OPER_" index="IDX_ARGDSCR_OPER" />
+        </key>
+        <list-index column="OPER_IDX_" />
+        <one-to-many class="org.jbpm.pvm.internal.wire.descriptor.ArgDescriptor" />
+      </list>
+    </subclass>
+  </class>
+
+  <!-- ### ARG DESCRIPTOR ################################################# -->
+  <class name="org.jbpm.pvm.internal.wire.descriptor.ArgDescriptor" table="JBPM_ARGDESCRIPTOR">
+    <id name="dbid" column="DBID_">
+      <generator class="native" />
+    </id>
+    <version name="dbversion" column="DBVERSION_" />
+    <property name="typeName" column="TYPENAME_" />
+    <many-to-one name="descriptor" column="DESCRIPTOR_" 
+                 class="org.jbpm.pvm.internal.wire.descriptor.AbstractDescriptor"
+      foreign-key="FK_ARGDESCR_DESCR" index="IDX_ARGDESCR_DESCR" cascade="all" />
+  </class>
+
+  <!-- ### PROPERTIES ##################################################### -->
+  <class name="org.jbpm.pvm.internal.model.WireProperties" table="JBPM_WIREPROPS">
+    <id name="dbid" column="DBID_">
+      <generator class="native" />
+    </id>
+    <version name="dbversion" column="DBVERSION_" />
+    <component name="wireContext" class="org.jbpm.pvm.internal.wire.WireContext">
+      <component name="wireDefinition" class="org.jbpm.pvm.internal.wire.WireDefinition">
+        <map name="descriptors" cascade="all-delete-orphan" lazy="false">
+          <key foreign-key="FK_DESCR_PROPS">
+            <column name="PROPS_" index="IDX_DESCR_PROPS" />
+          </key>
+          <map-key type="string" column="NAME_" />
+          <one-to-many class="org.jbpm.pvm.internal.wire.descriptor.AbstractDescriptor" />
+        </map>
+      </component>
+    </component>
+  </class>
+  
+  
+  <!-- ### QUERIES ######################################################## -->
+  
+  <query name="findProcessDefinitionKeys">
+    <![CDATA[
+     select distinct process.key
+     from org.jbpm.pvm.internal.model.ProcessDefinitionImpl as process
+     order by process.key asc
+    ]]>
+  </query>
+
+  <query name="findProcessDefinitionsByKey">
+    <![CDATA[
+     select process
+     from org.jbpm.pvm.internal.model.ProcessDefinitionImpl as process
+     where process.key = :key
+     order by process.version desc    
+    ]]>
+  </query>
+
+  <query name="findProcessDefinitionById">
+    <![CDATA[
+     select process
+     from org.jbpm.pvm.internal.model.ProcessDefinitionImpl as process
+     where process.id = :id
+    ]]>
+  </query>
+  
+  <query name="findProcessDefinitionKeysByName">
+    <![CDATA[
+     select process.key
+     from org.jbpm.pvm.internal.model.ProcessDefinitionImpl as process
+     where process.name = :name
+    ]]>
+  </query>
+  
+  <query name="findProcessDefinitionNamesByKey">
+    <![CDATA[
+     select process.name
+     from org.jbpm.pvm.internal.model.ProcessDefinitionImpl as process
+     where process.key = :key
+    ]]>
+  </query>
+
+</hibernate-mapping>
\ No newline at end of file

Modified: jbpm4/trunk/modules/pvm/src/test/resources/jbpm.jpdl.activities.xml
===================================================================
--- jbpm4/trunk/modules/pvm/src/test/resources/jbpm.jpdl.activities.xml	2009-04-09 14:25:18 UTC (rev 4514)
+++ jbpm4/trunk/modules/pvm/src/test/resources/jbpm.jpdl.activities.xml	2009-04-09 14:28:55 UTC (rev 4515)
@@ -1,5 +1,4 @@
 <activities>
-  <schema resource="jpdl.xsd" />
   <activity binding="org.jbpm.jpdl.internal.activity.StartBinding" />
   <activity binding="org.jbpm.jpdl.internal.activity.StateBinding" />
   <activity binding="org.jbpm.jpdl.internal.activity.ExclusiveBinding" />

Copied: jbpm4/trunk/modules/pvm/src/test/resources/jbpm.jpdl.eventlisteners.xml (from rev 4513, jbpm4/branches/tbaeyens/modules/pvm/src/test/resources/jbpm.jpdl.eventlisteners.xml)
===================================================================
--- jbpm4/trunk/modules/pvm/src/test/resources/jbpm.jpdl.eventlisteners.xml	                        (rev 0)
+++ jbpm4/trunk/modules/pvm/src/test/resources/jbpm.jpdl.eventlisteners.xml	2009-04-09 14:28:55 UTC (rev 4515)
@@ -0,0 +1,4 @@
+<eventlisteners>
+  <eventlistener binding="org.jbpm.jpdl.internal.activity.JavaBinding" />
+  <eventlistener binding="org.jbpm.jpdl.internal.activity.EventListenerBinding" />
+</eventlisteners>

Copied: jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/eventlistener (from rev 4513, jbpm4/branches/tbaeyens/modules/test-db/src/test/java/org/jbpm/test/eventlistener)

Deleted: jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/eventlistener/EventListenerTest.java
===================================================================
--- jbpm4/branches/tbaeyens/modules/test-db/src/test/java/org/jbpm/test/eventlistener/EventListenerTest.java	2009-04-09 10:11:42 UTC (rev 4513)
+++ jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/eventlistener/EventListenerTest.java	2009-04-09 14:28:55 UTC (rev 4515)
@@ -1,236 +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.eventlistener;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.jbpm.Execution;
-import org.jbpm.listener.EventListener;
-import org.jbpm.listener.EventListenerExecution;
-import org.jbpm.test.JbpmTestCase;
-
-
-/**
- * @author Tom Baeyens
- */
-public class EventListenerTest extends JbpmTestCase {
-  
-  static boolean isInvoked = false;
-  static List<Integer> order;
-  
-  protected void setUp() throws Exception {
-    super.setUp();
-    isInvoked = false;
-  }
-
-  public static class ProcessStartListener implements EventListener {
-    private static final long serialVersionUID = 1L;
-    public void notify(EventListenerExecution execution) {
-      assertNotNull(execution.getActivity());
-      assertSame(execution.getActivity(), execution.getProcessDefinition().getInitial());
-      isInvoked = true;
-    }
-  }
-
-  public void testProcessStartListener() {
-    deployJpdlXmlString(
-      "<process name='Insurance claim' key='ICL'>" +
-      "  <on event='start'>" +
-      "    <event-listener class='"+ProcessStartListener.class.getName()+"' />" +
-      "  </on>" +
-      "  <start>" +
-      "    <transition to='a' />" +
-      "  </start>" +
-      "  <state name='a' />" +
-      "</process>"
-    );
-    
-    executionService.startProcessInstanceByKey("ICL");
-
-    assertTrue("process start listener not invoked", isInvoked);
-  }
-
-  public static class ProcessEndListener implements EventListener {
-    private static final long serialVersionUID = 1L;
-    public void notify(EventListenerExecution execution) {
-      assertNotNull(execution.getActivity());
-      assertSame(execution.getActivity(), execution.getProcessDefinition().getActivity("end"));
-      isInvoked = true;
-    }
-  }
-
-  public void testProcessEndListener() {
-    deployJpdlXmlString(
-      "<process name='Insurance claim' key='ICL'>" +
-      "  <on event='end'>" +
-      "    <event-listener class='"+ProcessEndListener.class.getName()+"' />" +
-      "  </on>" +
-      "  <start>" +
-      "    <transition to='end' />" +
-      "  </start>" +
-      "  <end name='end' />" +
-      "</process>"
-    );
-    
-    executionService.startProcessInstanceByKey("ICL");
-    
-    assertTrue("process end listener not invoked", isInvoked);
-  }
-
-  public static class ActivityStartListener implements EventListener {
-    private static final long serialVersionUID = 1L;
-    public void notify(EventListenerExecution execution) {
-      assertNotNull(execution.getActivity());
-      assertSame(execution.getActivity(), execution.getProcessDefinition().getActivity("s"));
-      isInvoked = true;
-    }
-  }
-
-  public void testActivityStartListener() {
-    deployJpdlXmlString(
-      "<process name='Insurance claim' key='ICL'>" +
-      "  <start>" +
-      "    <transition to='s' />" +
-      "  </start>" +
-      "  <state name='s'>" +
-      "    <on event='start'>" +
-      "      <event-listener class='"+ActivityStartListener.class.getName()+"' />" +
-      "    </on>" +
-      "    <transition to='end' />" +
-      "  </state>" +
-      "  <end name='end' />" +
-      "</process>"
-    );
-    
-    executionService.startProcessInstanceByKey("ICL");
-    
-    assertTrue("activity start listener not invoked", isInvoked);
-  }
-
-  public static class ActivityEndListener implements EventListener {
-    private static final long serialVersionUID = 1L;
-    public void notify(EventListenerExecution execution) {
-      assertNotNull(execution.getActivity());
-      assertSame(execution.getActivity(), execution.getProcessDefinition().getActivity("s"));
-      isInvoked = true;
-    }
-  }
-
-  public void testActivityEndListener() {
-    deployJpdlXmlString(
-      "<process name='Insurance claim' key='ICL'>" +
-      "  <start>" +
-      "    <transition to='s' />" +
-      "  </start>" +
-      "  <state name='s'>" +
-      "    <on event='end'>" +
-      "      <event-listener class='"+ActivityStartListener.class.getName()+"' />" +
-      "    </on>" +
-      "    <transition to='end' />" +
-      "  </state>" +
-      "  <end name='end' />" +
-      "</process>"
-    );
-    
-    Execution execution = executionService.startProcessInstanceByKey("ICL");
-
-    assertFalse("activity end listener invoked too early", isInvoked);
-    
-    executionService.signalExecutionById(execution.getId());
-
-    assertTrue("activity end listener not invoked", isInvoked);
-  }
-
-  public static class TransitionListener implements EventListener {
-    private static final long serialVersionUID = 1L;
-    public void notify(EventListenerExecution execution) {
-      assertNotNull(execution.getTransition());
-      isInvoked = true;
-    }
-  }
-
-  public void testTransitionListener() {
-    order = new ArrayList<Integer>();
-    deployJpdlXmlString(
-      "<process name='Insurance claim' key='ICL'>" +
-      "  <start>" +
-      "    <transition to='end'>" +
-      "      <event-listener class='"+TransitionListener.class.getName()+"' />" +
-      "    </transition>" +
-      "  </start>" +
-      "  <end name='end' />" +
-      "</process>"
-    );
-    
-    executionService.startProcessInstanceByKey("ICL");
-    
-    assertTrue("transition listener not invoked", isInvoked);
-  }
-
-  public static class OrderListener implements EventListener {
-    private static final long serialVersionUID = 1L;
-    int i;
-    public void notify(EventListenerExecution execution) {
-      order.add(i);
-    }
-  }
-
-  public void testEventOrdering() {
-    order = new ArrayList<Integer>();
-    deployJpdlXmlString(
-      "<process name='Insurance claim' key='ICL'>" +
-      "  <start>" +
-      "    <transition to='end'>" +
-      "      <event-listener class='"+OrderListener.class.getName()+"'>" +
-      "        <field name='i'><int value='1' /></field> " +
-      "      </event-listener>" +
-      "      <event-listener class='"+OrderListener.class.getName()+"'>" +
-      "        <field name='i'><int value='2' /></field> " +
-      "      </event-listener>" +
-      "      <event-listener class='"+OrderListener.class.getName()+"'>" +
-      "        <field name='i'><int value='3' /></field> " +
-      "      </event-listener>" +
-      "      <event-listener class='"+OrderListener.class.getName()+"'>" +
-      "        <field name='i'><int value='4' /></field> " +
-      "      </event-listener>" +
-      "      <event-listener class='"+OrderListener.class.getName()+"'>" +
-      "        <field name='i'><int value='5' /></field> " +
-      "      </event-listener>" +
-      "    </transition>" +
-      "  </start>" +
-      "  <end name='end' />" +
-      "</process>"
-    );
-    
-    executionService.startProcessInstanceByKey("ICL");
-    
-    List<Integer> expectedOrder = new ArrayList<Integer>();
-    expectedOrder.add(1);
-    expectedOrder.add(2);
-    expectedOrder.add(3);
-    expectedOrder.add(4);
-    expectedOrder.add(5);
-    
-    assertEquals(expectedOrder, order);
-  }
-}

Copied: jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/eventlistener/EventListenerTest.java (from rev 4513, jbpm4/branches/tbaeyens/modules/test-db/src/test/java/org/jbpm/test/eventlistener/EventListenerTest.java)
===================================================================
--- jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/eventlistener/EventListenerTest.java	                        (rev 0)
+++ jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/eventlistener/EventListenerTest.java	2009-04-09 14:28:55 UTC (rev 4515)
@@ -0,0 +1,236 @@
+/*
+ * 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.eventlistener;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.jbpm.Execution;
+import org.jbpm.listener.EventListener;
+import org.jbpm.listener.EventListenerExecution;
+import org.jbpm.test.JbpmTestCase;
+
+
+/**
+ * @author Tom Baeyens
+ */
+public class EventListenerTest extends JbpmTestCase {
+  
+  static boolean isInvoked = false;
+  static List<Integer> order;
+  
+  protected void setUp() throws Exception {
+    super.setUp();
+    isInvoked = false;
+  }
+
+  public static class ProcessStartListener implements EventListener {
+    private static final long serialVersionUID = 1L;
+    public void notify(EventListenerExecution execution) {
+      assertNotNull(execution.getActivity());
+      assertSame(execution.getActivity(), execution.getProcessDefinition().getInitial());
+      isInvoked = true;
+    }
+  }
+
+  public void testProcessStartListener() {
+    deployJpdlXmlString(
+      "<process name='Insurance claim' key='ICL'>" +
+      "  <on event='start'>" +
+      "    <event-listener class='"+ProcessStartListener.class.getName()+"' />" +
+      "  </on>" +
+      "  <start>" +
+      "    <transition to='a' />" +
+      "  </start>" +
+      "  <state name='a' />" +
+      "</process>"
+    );
+    
+    executionService.startProcessInstanceByKey("ICL");
+
+    assertTrue("process start listener not invoked", isInvoked);
+  }
+
+  public static class ProcessEndListener implements EventListener {
+    private static final long serialVersionUID = 1L;
+    public void notify(EventListenerExecution execution) {
+      assertNotNull(execution.getActivity());
+      assertSame(execution.getActivity(), execution.getProcessDefinition().getActivity("end"));
+      isInvoked = true;
+    }
+  }
+
+  public void testProcessEndListener() {
+    deployJpdlXmlString(
+      "<process name='Insurance claim' key='ICL'>" +
+      "  <on event='end'>" +
+      "    <event-listener class='"+ProcessEndListener.class.getName()+"' />" +
+      "  </on>" +
+      "  <start>" +
+      "    <transition to='end' />" +
+      "  </start>" +
+      "  <end name='end' />" +
+      "</process>"
+    );
+    
+    executionService.startProcessInstanceByKey("ICL");
+    
+    assertTrue("process end listener not invoked", isInvoked);
+  }
+
+  public static class ActivityStartListener implements EventListener {
+    private static final long serialVersionUID = 1L;
+    public void notify(EventListenerExecution execution) {
+      assertNotNull(execution.getActivity());
+      assertSame(execution.getActivity(), execution.getProcessDefinition().getActivity("s"));
+      isInvoked = true;
+    }
+  }
+
+  public void testActivityStartListener() {
+    deployJpdlXmlString(
+      "<process name='Insurance claim' key='ICL'>" +
+      "  <start>" +
+      "    <transition to='s' />" +
+      "  </start>" +
+      "  <state name='s'>" +
+      "    <on event='start'>" +
+      "      <event-listener class='"+ActivityStartListener.class.getName()+"' />" +
+      "    </on>" +
+      "    <transition to='end' />" +
+      "  </state>" +
+      "  <end name='end' />" +
+      "</process>"
+    );
+    
+    executionService.startProcessInstanceByKey("ICL");
+    
+    assertTrue("activity start listener not invoked", isInvoked);
+  }
+
+  public static class ActivityEndListener implements EventListener {
+    private static final long serialVersionUID = 1L;
+    public void notify(EventListenerExecution execution) {
+      assertNotNull(execution.getActivity());
+      assertSame(execution.getActivity(), execution.getProcessDefinition().getActivity("s"));
+      isInvoked = true;
+    }
+  }
+
+  public void testActivityEndListener() {
+    deployJpdlXmlString(
+      "<process name='Insurance claim' key='ICL'>" +
+      "  <start>" +
+      "    <transition to='s' />" +
+      "  </start>" +
+      "  <state name='s'>" +
+      "    <on event='end'>" +
+      "      <event-listener class='"+ActivityStartListener.class.getName()+"' />" +
+      "    </on>" +
+      "    <transition to='end' />" +
+      "  </state>" +
+      "  <end name='end' />" +
+      "</process>"
+    );
+    
+    Execution execution = executionService.startProcessInstanceByKey("ICL");
+
+    assertFalse("activity end listener invoked too early", isInvoked);
+    
+    executionService.signalExecutionById(execution.getId());
+
+    assertTrue("activity end listener not invoked", isInvoked);
+  }
+
+  public static class TransitionListener implements EventListener {
+    private static final long serialVersionUID = 1L;
+    public void notify(EventListenerExecution execution) {
+      assertNotNull(execution.getTransition());
+      isInvoked = true;
+    }
+  }
+
+  public void testTransitionListener() {
+    order = new ArrayList<Integer>();
+    deployJpdlXmlString(
+      "<process name='Insurance claim' key='ICL'>" +
+      "  <start>" +
+      "    <transition to='end'>" +
+      "      <event-listener class='"+TransitionListener.class.getName()+"' />" +
+      "    </transition>" +
+      "  </start>" +
+      "  <end name='end' />" +
+      "</process>"
+    );
+    
+    executionService.startProcessInstanceByKey("ICL");
+    
+    assertTrue("transition listener not invoked", isInvoked);
+  }
+
+  public static class OrderListener implements EventListener {
+    private static final long serialVersionUID = 1L;
+    int i;
+    public void notify(EventListenerExecution execution) {
+      order.add(i);
+    }
+  }
+
+  public void testEventOrdering() {
+    order = new ArrayList<Integer>();
+    deployJpdlXmlString(
+      "<process name='Insurance claim' key='ICL'>" +
+      "  <start>" +
+      "    <transition to='end'>" +
+      "      <event-listener class='"+OrderListener.class.getName()+"'>" +
+      "        <field name='i'><int value='1' /></field> " +
+      "      </event-listener>" +
+      "      <event-listener class='"+OrderListener.class.getName()+"'>" +
+      "        <field name='i'><int value='2' /></field> " +
+      "      </event-listener>" +
+      "      <event-listener class='"+OrderListener.class.getName()+"'>" +
+      "        <field name='i'><int value='3' /></field> " +
+      "      </event-listener>" +
+      "      <event-listener class='"+OrderListener.class.getName()+"'>" +
+      "        <field name='i'><int value='4' /></field> " +
+      "      </event-listener>" +
+      "      <event-listener class='"+OrderListener.class.getName()+"'>" +
+      "        <field name='i'><int value='5' /></field> " +
+      "      </event-listener>" +
+      "    </transition>" +
+      "  </start>" +
+      "  <end name='end' />" +
+      "</process>"
+    );
+    
+    executionService.startProcessInstanceByKey("ICL");
+    
+    List<Integer> expectedOrder = new ArrayList<Integer>();
+    expectedOrder.add(1);
+    expectedOrder.add(2);
+    expectedOrder.add(3);
+    expectedOrder.add(4);
+    expectedOrder.add(5);
+    
+    assertEquals(expectedOrder, order);
+  }
+}

Copied: jbpm4/trunk/modules/test-db/src/test/resources/jbpm.cache.xml (from rev 4513, jbpm4/branches/tbaeyens/modules/test-db/src/test/resources/jbpm.cache.xml)
===================================================================
--- jbpm4/trunk/modules/test-db/src/test/resources/jbpm.cache.xml	                        (rev 0)
+++ jbpm4/trunk/modules/test-db/src/test/resources/jbpm.cache.xml	2009-04-09 14:28:55 UTC (rev 4515)
@@ -0,0 +1,39 @@
+<hibernate-cache>
+
+  <class-cache class="org.jbpm.pvm.internal.model.ProcessDefinitionImpl" />
+	<class-cache class="org.jbpm.pvm.internal.model.ActivityImpl" />
+	<class-cache class="org.jbpm.pvm.internal.model.TransitionImpl" />
+	<class-cache class="org.jbpm.pvm.internal.model.EventImpl" />
+	<class-cache class="org.jbpm.pvm.internal.model.ExceptionHandlerImpl" />
+	<class-cache class="org.jbpm.pvm.internal.model.ObjectReference" />
+  <class-cache class="org.jbpm.pvm.internal.model.VariableDefinitionImpl" />
+  <class-cache class="org.jbpm.pvm.internal.model.TimerDefinitionImpl" />
+  <class-cache class="org.jbpm.pvm.internal.wire.descriptor.AbstractDescriptor" />
+
+	<collection-cache collection="org.jbpm.pvm.internal.model.ProcessDefinitionImpl.exceptionHandlers" />
+	<collection-cache collection="org.jbpm.pvm.internal.model.ProcessDefinitionImpl.events" />
+	<collection-cache collection="org.jbpm.pvm.internal.model.ProcessDefinitionImpl.activities" />
+	<collection-cache collection="org.jbpm.pvm.internal.model.ProcessDefinitionImpl.variableDefinitions" />
+	<collection-cache collection="org.jbpm.pvm.internal.model.ProcessDefinitionImpl.timerDefinitions" />
+  <collection-cache collection="org.jbpm.pvm.internal.model.ProcessDefinitionImpl.attachments" />
+
+	<collection-cache collection="org.jbpm.pvm.internal.model.ActivityImpl.exceptionHandlers" />
+	<collection-cache collection="org.jbpm.pvm.internal.model.ActivityImpl.events" />
+	<collection-cache collection="org.jbpm.pvm.internal.model.ActivityImpl.activities" />
+	<collection-cache collection="org.jbpm.pvm.internal.model.ActivityImpl.variableDefinitions" />
+	<collection-cache collection="org.jbpm.pvm.internal.model.ActivityImpl.timerDefinitions" />
+	<collection-cache collection="org.jbpm.pvm.internal.model.ActivityImpl.incomingTransitions" />
+	<collection-cache collection="org.jbpm.pvm.internal.model.ActivityImpl.outgoingTransitions" />
+
+	<collection-cache collection="org.jbpm.pvm.internal.model.TransitionImpl.exceptionHandlers" />
+	<collection-cache collection="org.jbpm.pvm.internal.model.TransitionImpl.events" />
+
+	<collection-cache collection="org.jbpm.pvm.internal.model.EventImpl.exceptionHandlers" />
+	<collection-cache collection="org.jbpm.pvm.internal.model.EventImpl.listenerReferences" />
+	  
+	<collection-cache collection="org.jbpm.pvm.internal.model.ExceptionHandlerImpl.eventListenerReferences" />
+
+  <collection-cache collection="org.jbpm.pvm.internal.wire.descriptor.ObjectDescriptor.argDescriptors" />
+  <collection-cache collection="org.jbpm.pvm.internal.wire.descriptor.ObjectDescriptor.operations" />
+	
+</hibernate-cache>

Copied: jbpm4/trunk/modules/test-db/src/test/resources/jbpm.definition.hbm.xml (from rev 4513, jbpm4/branches/tbaeyens/modules/test-db/src/test/resources/jbpm.definition.hbm.xml)
===================================================================
--- jbpm4/trunk/modules/test-db/src/test/resources/jbpm.definition.hbm.xml	                        (rev 0)
+++ jbpm4/trunk/modules/test-db/src/test/resources/jbpm.definition.hbm.xml	2009-04-09 14:28:55 UTC (rev 4515)
@@ -0,0 +1,646 @@
+<?xml version="1.0"?>
+<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+
+<hibernate-mapping package="org.jbpm.pvm.internal.model" default-access="field">
+
+  <!-- ### PROCESS DEFINITION ############################################# -->
+  <class name="ProcessDefinitionImpl" 
+         table="JBPM_PROCESS"
+         discriminator-value="pvm">
+    <!-- ProcessElementImpl part ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
+    <id name="dbid" column="DBID_">
+      <generator class="native" />
+    </id>
+    <discriminator><column name="CLASS_" /></discriminator>
+
+    <version name="dbversion" column="DBVERSION_" />
+    <many-to-one name="properties"
+                 class="WireProperties" 
+                 column="PROPS_" 
+                 foreign-key="FK_PROCDEF_PROPS"
+                 index="IDX_PROCDEF_PROPS"
+                 cascade="all" />
+    <list name="exceptionHandlers" cascade="all">
+      <key foreign-key="FK_EXHDLR_PROCESS">
+        <column name="PROCESS_" index="IDX_EXHDLR_PROCESS"/>
+      </key>
+      <index column="PROCESS_IDX_" />
+      <one-to-many class="ExceptionHandlerImpl"/>
+    </list>
+
+    <!-- ObservableElementImpl part ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
+    <property name="name" column="NAME_" />
+    <property name="description" column="DESCR_" />
+    <map name="events" cascade="all-delete-orphan">
+      <key foreign-key="FK_EVENT_PROCESS">
+        <column name="PROCESS_" index="IDX_EVENT_PROCESS" />
+      </key>
+      <map-key type="string" column="NAME_" />
+      <one-to-many class="org.jbpm.pvm.internal.model.EventImpl"/>
+    </map>
+
+    <!-- CompositeElementImpl part ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
+    <list name="activities" cascade="all" inverse="false">
+      <key foreign-key="FK_ACTS_PROCESS">
+        <column name="ACTSPROCESS_" index="IDX_ACTS_PROCESS"/>
+      </key>
+      <list-index column="ACTSPROCESS_IDX_" />
+      <one-to-many class="ActivityImpl" />
+    </list>
+    <property name="hasVariableDefinitions" column="HAS_VAR_DEF_" />
+    <list name="variableDefinitions" cascade="all">
+      <key foreign-key="FK_VARDEF_PROCESS">
+        <column name="PROCESS_" index="IDX_VARDEF_PROCESS"/>
+      </key>
+      <index column="PROCESS_IDX_" />
+      <one-to-many class="VariableDefinitionImpl" />
+    </list>
+    <property name="hasTimerDefinitions" column="HAS_TIMER_DEF_" />
+    <set name="timerDefinitions" cascade="all">
+      <key foreign-key="FK_TMRDEF_PROCESS">
+        <column name="PROCESS_" index="IDX_TMRDEF_PROCESS"/>
+      </key>
+      <one-to-many class="TimerDefinitionImpl" />
+    </set>
+
+    <!-- ProcessDefinitionImpl part ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
+    <property name="key" column="KEY_" />
+    <property name="id" column="ID_" unique="true" />
+
+    <property name="packageName" column="PACKAGE_" />
+    <property name="version" column="VERSION_" />
+    <property name="deploymentTime" column="DEPLOYED_" />
+    <many-to-one name="initial" 
+                 column="INITIAL_"
+                 class="ActivityImpl"
+                 cascade="all" 
+                 foreign-key="FK_PROCDEF_INITIAL"
+                 index="IDX_PROCDEF_INIT"
+                 fetch="select" />
+
+    <map name="attachments" cascade="all-delete-orphan">
+      <key foreign-key="FK_LOB_PROCESS">
+        <column name="PROCESS_" index="IDX_LOB_PROCESS" />
+      </key>
+      <map-key type="string" column="NAME_" />
+      <one-to-many class="org.jbpm.pvm.internal.lob.Lob"/>
+    </map>
+  </class>
+
+  <!-- ### Activity ############################################################## -->
+  <class name="ActivityImpl" table="JBPM_ACTIVITY">
+    <!-- ProcessElementImpl part ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
+    <id name="dbid" column="DBID_">
+      <generator class="native" />
+    </id>
+    <version name="dbversion" column="DBVERSION_" />
+    <many-to-one name="processDefinition"
+                 class="ProcessDefinitionImpl" 
+                 column="PROCESS_" 
+                 foreign-key="FK_ACT_PROCESS"
+                 index="IDX_ACT_PROCESS" />
+    <many-to-one name="properties"
+                 class="WireProperties" 
+                 column="PROPS_" 
+                 foreign-key="FK_ACT_PROPS"
+                 index="IDX_ACT_PROPS"
+                 cascade="all" />
+    <list name="exceptionHandlers" cascade="all">
+      <key foreign-key="FK_EXHDLR_ACT">
+        <column name="ACT_" index="IDX_EXHDLR_ACT"/>
+      </key>
+      <index column="ACT_IDX_" />
+      <one-to-many class="ExceptionHandlerImpl" />
+    </list>
+
+    <!-- ObservableElementImpl part ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
+    <property name="name" column="NAME_"/>
+    <property name="description" column="DESCR_"/>
+    <map name="events" cascade="all-delete-orphan">
+      <key foreign-key="FK_EVENT_ACT">
+        <column name="ACT_" index="IDX_EVENT_ACT" />
+      </key>
+      <map-key type="string" column="NAME_" />
+      <one-to-many class="org.jbpm.pvm.internal.model.EventImpl" />
+    </map>
+
+    <!-- CompositeElementImpl part ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
+    <list name="activities" cascade="all" inverse="false">
+      <key column="PARENT_" foreign-key="none" />
+      <list-index column="PARENT_IDX_" />
+      <one-to-many class="ActivityImpl" />
+    </list>
+    <property name="hasVariableDefinitions" column="HAS_VAR_DEF_" />
+    <list name="variableDefinitions" cascade="all">
+      <key foreign-key="FK_VARDEF_ACT">
+        <column name="ACT_" index="IDX_VARDEF_ACT"/>
+      </key>
+      <index column="ACT_IDX_" />
+      <one-to-many class="VariableDefinitionImpl" />
+    </list>
+    <property name="hasTimerDefinitions" column="HAS_TIMER_DEF_" />
+    <set name="timerDefinitions" cascade="all">
+      <key foreign-key="FK_TMRDEF_ACT">
+        <column name="ACT_" index="IDX_TMRDEF_ACT"/>
+      </key>
+      <one-to-many class="TimerDefinitionImpl" />
+    </set>
+
+    <!-- ActivityImpl part ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
+    <property name="type" column="TYPE_" />
+    <property name="isLocalScope" column="LOCAL_SCOPE_" />
+    <property name="isExecutionAsync" column="EXEC_ASYNC_" />
+    <property name="isSignalAsync" column="SIGNAL_ASYNC_" />
+    <property name="isPreviousNeeded" column="PREV_NEEDED_" />
+
+    <many-to-one name="parentActivity" 
+                 column="PARENT_"
+                 class="ActivityImpl"
+                 cascade="all"
+                 foreign-key="FK_ACT_PARENT" 
+                 index="IDX_ACT_PARENT" />
+
+    <many-to-one name="defaultTransition"
+                 column="DEFTRANS_" 
+                 class="TransitionImpl"
+                 fetch="select"
+                 foreign-key="FK_ACT_DEFTRANS" 
+                 index="IDX_ACT_DEFTRANS" />
+
+    <list name="incomingTransitions" inverse="false">
+      <key column="DESTINATION_" />
+      <index column="IN_IDX_" />
+      <one-to-many class="TransitionImpl" />
+    </list>
+
+    <list name="outgoingTransitions" inverse="false" cascade="all">
+      <key column="SOURCE_" />
+      <index column="OUT_IDX_" />
+      <one-to-many class="TransitionImpl" />
+    </list>
+
+    <component name="behaviourReference" class="ObjectReference">
+      <many-to-one name="descriptor"
+                   column="BEHAV_DESCR_" 
+                   cascade="all"
+                   class="org.jbpm.pvm.internal.wire.descriptor.AbstractDescriptor"
+                   foreign-key="FK_NODE_BEHAV_DESCR"
+                   index="IDX_NODE_BEHAV_DESCR" />
+      <any name="object" id-type="long" cascade="all">
+        <!--  TODO: Specify names for classes -->
+        <!--        <meta-value value="bpel::activity" class="org.jbpm.pvm.bpel.BpelActivity"/> -->
+        <column name="BEHAV_CLASS_" />
+        <column name="BEHAV_ID_" />
+      </any>
+    </component>
+  </class>
+
+  <!-- ### TRANSITION ##################################################### -->
+  <class name="TransitionImpl" table="JBPM_TRANSITION">
+    <!-- ProcessElementImpl part ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
+    <id name="dbid" column="DBID_">
+      <generator class="native" />
+    </id>
+    <version name="dbversion" column="DBVERSION_" />
+    <many-to-one name="processDefinition"
+                 class="ProcessDefinitionImpl" 
+                 column="PROCESS_" 
+                 foreign-key="FK_TRANS_PROCDEF"
+                 index="IDX_TRANS_PROCDEF" />
+    <many-to-one name="properties"
+                 class="WireProperties" 
+                 column="PROPS_" 
+                 foreign-key="FK_TRANS_PROPS"
+                 index="IDX_TRANS_PROPS"
+                 cascade="all" />
+    <list name="exceptionHandlers" cascade="all">
+      <key foreign-key="FK_EXHDLR_TRANS">
+        <column name="TRANSITION_" index="IDX_EXHDLR_TRANS" />
+      </key>
+      <index column="TRANSITION_IDX_" />
+      <one-to-many class="ExceptionHandlerImpl" />
+    </list>
+
+    <!-- ObservableElementImpl part ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
+    <property name="name" column="NAME_" />
+    <property name="description" column="DESCR_" />
+    <map name="events" cascade="all-delete-orphan">
+      <key foreign-key="FK_EVENT_TRANS">
+        <column name="TRANSITION_" index="IDX_EVENT_TRANS" />
+      </key>
+      <map-key type="string" column="NAME_" />
+      <one-to-many class="org.jbpm.pvm.internal.model.EventImpl" />
+    </map>
+    
+    <!-- TransitionImpl part ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
+    <many-to-one name="source"
+                 column="SRC_" 
+                 class="ActivityImpl" 
+                 fetch="select" 
+                 foreign-key="FK_TRANS_SRC" 
+                 index="IDX_TRANS_SRC" />
+
+    <many-to-one name="destination"
+                 column="DEST_" 
+                 class="ActivityImpl" 
+                 fetch="select"
+                 cascade="all"
+                 foreign-key="FK_TRANS_DST" 
+                 index="IDX_TRANS_DST" />
+
+    <many-to-one name="conditionDescriptor" 
+                 column="COND_DESCR_"
+                 class="org.jbpm.pvm.internal.wire.descriptor.AbstractDescriptor"
+                 cascade="all"
+                 foreign-key="FK_TRANS_COND"
+                 index="IDX_TRANS_COND" />
+                 
+    <!-- 
+    <many-to-one name="waitConditionDescriptor" 
+                 column="WAIT_DESCR_"
+                 class="org.jbpm.pvm.internal.wire.descriptor.AbstractDescriptor"
+                 cascade="all"
+                 foreign-key="FK_TRANS_WAIT_DESCR" 
+                 index="IDX_TRANS_WAIT_DESCR" />
+    -->
+    
+    <property name="isTakeAsync" column="TAKEASYNC_" />
+  </class>
+
+  <!-- ### EVENT ########################################################## -->
+  <class name="EventImpl" table="JBPM_EVENT">
+    <!-- ProcessElementImpl part ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
+    <id name="dbid" column="DBID_">
+      <generator class="native" />
+    </id>
+    <version name="dbversion" column="DBVERSION_" />
+    <many-to-one name="processDefinition"
+                 class="ProcessDefinitionImpl" 
+                 column="PROCESSDEF_" 
+                 foreign-key="FK_EVENT_PROCDEF" 
+                 index="IDX_EVENT_PROCDEF" />
+    <many-to-one name="properties"
+                 class="WireProperties" 
+                 column="PROPS_" 
+                 foreign-key="FK_EVENT_PROPS"
+                 index="IDX_EVENT_PROPS"
+                 cascade="all" />
+    <list name="exceptionHandlers" cascade="all">
+      <key foreign-key="FK_EXHDLR_EVENT">
+        <column name="EVENT_" index="IDX_EXHDLR_EVENT"/>
+      </key>
+      <index column="EVENT_IDX_" />
+      <one-to-many class="ExceptionHandlerImpl" />
+    </list>
+
+    <!-- EventImpl part ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
+    <property name="name" column="NAME_" />
+    <list name="listenerReferences" table="JBPM_OBJECTREFERENCES" cascade="all-delete-orphan">
+      <key foreign-key="FK_OBJECTREF_EVENT">
+        <column name="EVENT_" index="IDX_OBJREF_EVENT"/>
+      </key>
+      <list-index column="EVENT_IDX_" />
+      <one-to-many class="EventListenerReference" />
+    </list>
+  </class>
+  
+  <!-- ### EXCEPTION HANDLER ############################################## -->
+  <class name="ExceptionHandlerImpl" table="JBPM_EXCEPTHNDLR">
+    <id name="dbid" column="DBID_">
+      <generator class="native" />
+    </id>
+    <version name="dbversion" column="DBVERSION_" />
+    <property name="exceptionClassName" column="EXCEPT_CLASS_" />
+    <property name="isTransactional" column="TRANSACT_" />
+    <property name="isRethrowMasked" column="RETHROW_MASKED_"/>
+    <property name="transitionName" column="TRANSITIONNAME_" />
+    <property name="activityName" column="NODENAME_" />
+    <list name="eventListenerReferences" 
+          inverse="false"
+          cascade="all-delete-orphan"
+          table="JBPM_OBJECTREFERENCES">
+      <key foreign-key="FK_OBJREF_EXHNDLR" not-null="false">
+        <column name="EXHNDLR_" index="IDX_OBJREF_EXHNDLR" />
+      </key>
+      <list-index column="EXHNDLR_IDX_" />
+      <one-to-many class="ObjectReference" />
+    </list>
+  </class>
+  
+  <!-- ### OBJECT REFERENCE ############################################### -->
+  <class name="ObjectReference" discriminator-value="objref" table="JBPM_OBJECTREF">
+    <id name="dbid" column="DBID_">
+      <generator class="native" />
+    </id>
+    <discriminator column="CLASS_" />
+    <version name="dbversion" column="DBVERSION_" />
+    <many-to-one name="descriptor"
+                 column="OBJ_DESCR_"
+                 class="org.jbpm.pvm.internal.wire.descriptor.AbstractDescriptor"
+                 cascade="all"
+                 foreign-key="FK_OBJREF_EVENT" 
+                 index="IDX_OBJREF_EVENT"/>
+    <any name="object" id-type="long" cascade="all">
+      <!--  TODO: Specify names for classes -->
+      <column name="OBJ_CLASS_" />
+      <column name="OBJ_ID_" />
+    </any>
+    <property name="expression" column="OBJ_EXPRESSION_"/>
+    <property name="expressionLanguage" column="OBJ_EXPRLANG_"/>
+    
+    <subclass name="EventListenerReference" discriminator-value="evtlis">
+      <property name="isPropagationEnabled" column="PROPAGATE_" />
+    </subclass>
+        
+  </class>
+
+  <!-- ### VARIABLE DEFINITION ############################################ -->
+  <class name="VariableDefinitionImpl" table="JBPM_VARIABLEDEF">
+    <id name="dbid" column="DBID_">
+      <generator class="native" />
+    </id>
+    <version name="dbversion" column="DBVERSION_" />
+    <property name="name" column="NAME_"/>
+    <property name="typeName" column="TYPE_"/>
+    
+    <property name="inVariableName" column="INVAR_" />
+    <property name="inExpression" column="INEXPR_" />
+    <many-to-one name="inDescriptor" 
+                 column="INDESCR_"
+                 class="org.jbpm.pvm.internal.wire.descriptor.AbstractDescriptor"
+                 cascade="all"
+                 foreign-key="FK_VARDEF_INDES" 
+                 index="IDX_VARDEF_INDES"/>
+    <property name="outVariableName" column="OUTVAR_" />
+    <property name="outExpression" column="OUTEXPR_" />
+  </class>
+
+  <!-- ### TIMER DEFINITION ############################################### -->
+  <class name="TimerDefinitionImpl" table="JBPM_TIMERDEF">
+    <id name="dbid" column="DBID_">
+      <generator class="native" />
+    </id>
+    <version name="dbversion" column="DBVERSION_" />
+    <property name="dueDateDescription" column="DUEDATEDESCR_"/>
+    <property name="repeat" column="REPEAT_"/>
+    <property name="isExclusive" column="ISEXCL_"/>
+    <property name="retries" column="RETRIES_"/>
+    <property name="eventName" column="EVENT_"/>
+    <property name="signalName" column="SIGNAL_"/>
+    <property name="dueDate" column="DUEDATE_" type="timestamp"/>
+  </class>
+  
+  <!-- ### DESCRIPTORS #################################################### -->
+  <class name="org.jbpm.pvm.internal.wire.descriptor.AbstractDescriptor" table="JBPM_DESCRIPTOR" abstract="true"
+    discriminator-value="abstract">
+    <!--
+    byte     : ByteDescriptor 
+    string   : StringDescriptor
+    char     : CharacterDescriptor
+    class    : ClassDescriptor
+    double   : DoubleDescriptor
+    expr     : ExpressionDescriptor
+    float    : FloatDescriptor 
+    long     : LongDescriptor
+    int      : IntegerDescriptor
+    short    : ShortDescriptor
+    coll     : CollectionDescriptor 
+    map      : MapDescriptor
+    list     : ListDescriptor
+    set      : SetDescriptor
+    object   : ObjectDescriptor
+    ref      : ReferenceDescriptor
+    null     : NullDescriptor
+    true     : TrueDescriptor
+    false    : FalseDescriptor
+    provided : ProvidedObjectDescriptor
+    -->
+    <id name="dbid" column="DBID_">
+      <generator class="native" />
+    </id>
+    <discriminator column="CLASS_" />
+    <version name="dbversion" column="DBVERSION_" />
+
+    <property name="name" column="NAME_" />
+    <property name="init" column="INIT_" />
+
+    <subclass name="org.jbpm.pvm.internal.wire.descriptor.NullDescriptor" discriminator-value="null_" />
+    <subclass name="org.jbpm.pvm.internal.wire.descriptor.TrueDescriptor" discriminator-value="true" />
+    <subclass name="org.jbpm.pvm.internal.wire.descriptor.FalseDescriptor" discriminator-value="false" />
+
+    <subclass name="org.jbpm.pvm.internal.wire.descriptor.StringDescriptor" discriminator-value="string">
+      <property name="text" column="TEXT_" />
+    </subclass>
+
+    <subclass name="org.jbpm.pvm.internal.wire.descriptor.CharacterDescriptor" discriminator-value="char">
+      <property name="text" column="TEXT_" />
+    </subclass>
+    <subclass name="org.jbpm.pvm.internal.wire.descriptor.ClassDescriptor" discriminator-value="class">
+      <property name="text" column="TEXT_" />
+    </subclass>
+    <subclass name="org.jbpm.pvm.internal.wire.descriptor.ReferenceDescriptor" discriminator-value="ref">
+      <property name="text" column="TEXT_" />
+    </subclass>
+
+    <subclass name="org.jbpm.pvm.internal.wire.descriptor.DoubleDescriptor" discriminator-value="double">
+      <property name="doubleVal" column="DOUBLEVAL_" />
+    </subclass>
+    <subclass name="org.jbpm.pvm.internal.wire.descriptor.FloatDescriptor" discriminator-value="float">
+      <property name="doubleVal" column="DOUBLEVAL_" />
+    </subclass>
+
+    <subclass name="org.jbpm.pvm.internal.wire.descriptor.LongDescriptor" discriminator-value="long">
+      <property name="longVal" column="LONGVAL_" />
+    </subclass>
+    <subclass name="org.jbpm.pvm.internal.wire.descriptor.IntegerDescriptor" discriminator-value="int">
+      <property name="longVal" column="LONGVAL_" />
+    </subclass>
+    <subclass name="org.jbpm.pvm.internal.wire.descriptor.ShortDescriptor" discriminator-value="short">
+      <property name="longVal" column="LONGVAL_" />
+    </subclass>
+    <subclass name="org.jbpm.pvm.internal.wire.descriptor.ByteDescriptor" discriminator-value="byte">
+      <property name="longVal" column="LONGVAL_" />
+    </subclass>
+
+    <subclass name="org.jbpm.pvm.internal.wire.descriptor.CollectionDescriptor" discriminator-value="coll">
+      <property name="className" column="CLASSNAME_" />
+      <list name="valueDescriptors" cascade="all-delete-orphan">
+        <key foreign-key="FK_DESCR_VALDESCR">
+          <column name="VALUEDESCR_" index="IDX_DESCR_VALDESCR" />
+        </key>
+        <list-index column="VALUEDESCR_IDX_" />
+        <one-to-many class="org.jbpm.pvm.internal.wire.descriptor.AbstractDescriptor" />
+      </list>
+
+      <subclass name="org.jbpm.pvm.internal.wire.descriptor.MapDescriptor" discriminator-value="map">
+        <list name="keyDescriptors" cascade="all-delete-orphan">
+          <key column="KEYDESCR_" foreign-key="FK_DESCR_KEYDESCR" />
+          <list-index column="KEYDESCR_IDX_" />
+          <one-to-many class="org.jbpm.pvm.internal.wire.descriptor.AbstractDescriptor" />
+        </list>
+      </subclass>
+
+      <subclass name="org.jbpm.pvm.internal.wire.descriptor.ListDescriptor" discriminator-value="list" />
+      <subclass name="org.jbpm.pvm.internal.wire.descriptor.SetDescriptor" discriminator-value="set" />
+    </subclass>
+
+
+    <subclass name="org.jbpm.pvm.internal.wire.descriptor.ObjectDescriptor" discriminator-value="object">
+      <property name="className" column="TEXT_" />
+      <property name="methodName" column="METHOD_" />
+      <property name="isAutoWireEnabled" column="BOOLVAL_" />
+      <property name="factoryObjectName" column="FACTORYNAME_" />
+
+      <many-to-one name="factoryDescriptor" class="org.jbpm.pvm.internal.wire.descriptor.AbstractDescriptor" column="FACTORYDESCR_"
+        foreign-key="FK_DESCR_ARG_REF" index="IDX_DESCR_ARG_REF" cascade="all" />
+
+      <list name="argDescriptors" cascade="all-delete-orphan">
+        <key foreign-key="FK_OBJARG_DESCR">
+          <column name="OBJARG_DESCR_" index="IDX_OBJARG_DESCR" />
+        </key>
+        <list-index column="OBJARG_DESCR_IDX_" />
+        <one-to-many class="org.jbpm.pvm.internal.wire.descriptor.ArgDescriptor" />
+      </list>
+
+      <list name="operations" cascade="all-delete-orphan">
+        <key foreign-key="FK_OBJOPER_DESCR">
+          <column name="OBJOPER_DESCR_" index="IDX_OBJOPER_DESCR" />
+        </key>
+        <list-index column="OBJOPER_DESCR_IDX_" />
+        <one-to-many class="org.jbpm.pvm.internal.wire.operation.AbstractOperation" />
+      </list>
+    </subclass>
+
+    <subclass name="org.jbpm.pvm.internal.wire.descriptor.ExpressionDescriptor" discriminator-value="expr">
+      <property name="expr" column="TEXT_" />
+      <property name="lang" column="METHOD_" />
+    </subclass>
+
+    <subclass name="org.jbpm.pvm.internal.wire.descriptor.ProvidedObjectDescriptor" discriminator-value="provided">
+      <any name="providedObject" id-type="long" cascade="all">
+        <column name="TEXT_" />
+        <column name="LONGVAL_" />
+      </any>
+      <property name="exposeType" column="BOOLVAL_" />
+    </subclass>
+
+    <subclass name="org.jbpm.pvm.internal.wire.descriptor.EnvDescriptor" discriminator-value="env">
+      <property name="objectName" column="TEXT_" />
+      <property name="typeName" column="CLASSNAME_" />
+    </subclass>
+
+  </class>
+
+  <!-- ### OPERATIONS ##################################################### -->
+  <class name="org.jbpm.pvm.internal.wire.operation.AbstractOperation" abstract="true"
+    table="JBPM_OPERATION" discriminator-value="oper">
+    <id name="dbid" column="DBID_">
+      <generator class="native" />
+    </id>
+    <discriminator column="CLASS_" />
+    <version name="dbversion" column="DBVERSION_" />
+
+    <subclass name="org.jbpm.pvm.internal.wire.operation.FieldOperation"
+      discriminator-value="field">
+      <property name="fieldName" column="TEXT_" />
+      <many-to-one name="descriptor" column="DESCR_" cascade="all" 
+                   class="org.jbpm.pvm.internal.wire.descriptor.AbstractDescriptor"
+        foreign-key="FK_OPER_DESC" index="IDX_OPER_DESC" />
+    </subclass>
+
+    <subclass name="org.jbpm.pvm.internal.wire.operation.PropertyOperation"
+      discriminator-value="prop">
+      <property name="setterName" column="TEXT_" />
+      <many-to-one name="descriptor" column="DESCR_" cascade="all" 
+                   class="org.jbpm.pvm.internal.wire.descriptor.AbstractDescriptor" />
+    </subclass>
+
+    <subclass name="org.jbpm.pvm.internal.wire.operation.InvokeOperation"
+      discriminator-value="invoke">
+      <property name="methodName" column="TEXT_" />
+      <list name="argDescriptors" cascade="all-delete-orphan">
+        <key foreign-key="FK_ARGDSCR_OPER">
+          <column name="OPER_" index="IDX_ARGDSCR_OPER" />
+        </key>
+        <list-index column="OPER_IDX_" />
+        <one-to-many class="org.jbpm.pvm.internal.wire.descriptor.ArgDescriptor" />
+      </list>
+    </subclass>
+  </class>
+
+  <!-- ### ARG DESCRIPTOR ################################################# -->
+  <class name="org.jbpm.pvm.internal.wire.descriptor.ArgDescriptor" table="JBPM_ARGDESCRIPTOR">
+    <id name="dbid" column="DBID_">
+      <generator class="native" />
+    </id>
+    <version name="dbversion" column="DBVERSION_" />
+    <property name="typeName" column="TYPENAME_" />
+    <many-to-one name="descriptor" column="DESCRIPTOR_" 
+                 class="org.jbpm.pvm.internal.wire.descriptor.AbstractDescriptor"
+      foreign-key="FK_ARGDESCR_DESCR" index="IDX_ARGDESCR_DESCR" cascade="all" />
+  </class>
+
+  <!-- ### PROPERTIES ##################################################### -->
+  <class name="org.jbpm.pvm.internal.model.WireProperties" table="JBPM_WIREPROPS">
+    <id name="dbid" column="DBID_">
+      <generator class="native" />
+    </id>
+    <version name="dbversion" column="DBVERSION_" />
+    <component name="wireContext" class="org.jbpm.pvm.internal.wire.WireContext">
+      <component name="wireDefinition" class="org.jbpm.pvm.internal.wire.WireDefinition">
+        <map name="descriptors" cascade="all-delete-orphan" lazy="false">
+          <key foreign-key="FK_DESCR_PROPS">
+            <column name="PROPS_" index="IDX_DESCR_PROPS" />
+          </key>
+          <map-key type="string" column="NAME_" />
+          <one-to-many class="org.jbpm.pvm.internal.wire.descriptor.AbstractDescriptor" />
+        </map>
+      </component>
+    </component>
+  </class>
+  
+  
+  <!-- ### QUERIES ######################################################## -->
+  
+  <query name="findProcessDefinitionKeys">
+    <![CDATA[
+     select distinct process.key
+     from org.jbpm.pvm.internal.model.ProcessDefinitionImpl as process
+     order by process.key asc
+    ]]>
+  </query>
+
+  <query name="findProcessDefinitionsByKey">
+    <![CDATA[
+     select process
+     from org.jbpm.pvm.internal.model.ProcessDefinitionImpl as process
+     where process.key = :key
+     order by process.version desc    
+    ]]>
+  </query>
+
+  <query name="findProcessDefinitionById">
+    <![CDATA[
+     select process
+     from org.jbpm.pvm.internal.model.ProcessDefinitionImpl as process
+     where process.id = :id
+    ]]>
+  </query>
+  
+  <query name="findProcessDefinitionKeysByName">
+    <![CDATA[
+     select process.key
+     from org.jbpm.pvm.internal.model.ProcessDefinitionImpl as process
+     where process.name = :name
+    ]]>
+  </query>
+  
+  <query name="findProcessDefinitionNamesByKey">
+    <![CDATA[
+     select process.name
+     from org.jbpm.pvm.internal.model.ProcessDefinitionImpl as process
+     where process.key = :key
+    ]]>
+  </query>
+
+</hibernate-mapping>
\ No newline at end of file

Modified: jbpm4/trunk/modules/test-db/src/test/resources/jbpm.jpdl.activities.xml
===================================================================
--- jbpm4/trunk/modules/test-db/src/test/resources/jbpm.jpdl.activities.xml	2009-04-09 14:25:18 UTC (rev 4514)
+++ jbpm4/trunk/modules/test-db/src/test/resources/jbpm.jpdl.activities.xml	2009-04-09 14:28:55 UTC (rev 4515)
@@ -1,5 +1,4 @@
 <activities>
-  <schema resource="jpdl.xsd" />
   <activity binding="org.jbpm.jpdl.internal.activity.StartBinding" />
   <activity binding="org.jbpm.jpdl.internal.activity.StateBinding" />
   <activity binding="org.jbpm.jpdl.internal.activity.ExclusiveBinding" />

Copied: jbpm4/trunk/modules/test-db/src/test/resources/jbpm.jpdl.eventlisteners.xml (from rev 4513, jbpm4/branches/tbaeyens/modules/test-db/src/test/resources/jbpm.jpdl.eventlisteners.xml)
===================================================================
--- jbpm4/trunk/modules/test-db/src/test/resources/jbpm.jpdl.eventlisteners.xml	                        (rev 0)
+++ jbpm4/trunk/modules/test-db/src/test/resources/jbpm.jpdl.eventlisteners.xml	2009-04-09 14:28:55 UTC (rev 4515)
@@ -0,0 +1,4 @@
+<eventlisteners>
+  <eventlistener binding="org.jbpm.jpdl.internal.activity.JavaBinding" />
+  <eventlistener binding="org.jbpm.jpdl.internal.activity.EventListenerBinding" />
+</eventlisteners>




More information about the jbpm-commits mailing list