You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by js...@apache.org on 2007/05/15 12:40:29 UTC

svn commit: r538126 - in /activemq/camel/trunk: ./ camel-bam/ camel-bam/src/main/java/org/apache/camel/bam/ camel-bam/src/main/java/org/apache/camel/bam/model/ camel-bam/src/test/java/org/apache/camel/bam/ camel-bam/src/test/resources/ camel-bam/src/te...

Author: jstrachan
Date: Tue May 15 03:40:26 2007
New Revision: 538126

URL: http://svn.apache.org/viewvc?view=rev&rev=538126
Log:
got the basic BAM persistence working

Added:
    activemq/camel/trunk/camel-bam/src/main/java/org/apache/camel/bam/Activity.java
      - copied, changed from r538075, activemq/camel/trunk/camel-bam/src/main/java/org/apache/camel/bam/model/Activity.java
    activemq/camel/trunk/camel-bam/src/main/java/org/apache/camel/bam/TimerEventHandler.java
      - copied, changed from r538075, activemq/camel/trunk/camel-bam/src/main/java/org/apache/camel/bam/model/TimerEventHandler.java
    activemq/camel/trunk/camel-bam/src/test/resources/org/
    activemq/camel/trunk/camel-bam/src/test/resources/org/apache/
    activemq/camel/trunk/camel-bam/src/test/resources/org/apache/camel/
    activemq/camel/trunk/camel-bam/src/test/resources/org/apache/camel/bam/
    activemq/camel/trunk/camel-bam/src/test/resources/org/apache/camel/bam/spring.xml   (with props)
Removed:
    activemq/camel/trunk/camel-bam/src/main/java/org/apache/camel/bam/model/Activity.java
    activemq/camel/trunk/camel-bam/src/main/java/org/apache/camel/bam/model/TimerEventHandler.java
Modified:
    activemq/camel/trunk/camel-bam/pom.xml
    activemq/camel/trunk/camel-bam/src/main/java/org/apache/camel/bam/ActivityBuilder.java
    activemq/camel/trunk/camel-bam/src/main/java/org/apache/camel/bam/ActivityExpressionSupport.java
    activemq/camel/trunk/camel-bam/src/main/java/org/apache/camel/bam/BamProcessorSupport.java
    activemq/camel/trunk/camel-bam/src/main/java/org/apache/camel/bam/JpaBamProcessor.java
    activemq/camel/trunk/camel-bam/src/main/java/org/apache/camel/bam/JpaBamProcessorSupport.java
    activemq/camel/trunk/camel-bam/src/main/java/org/apache/camel/bam/ProcessBuilder.java
    activemq/camel/trunk/camel-bam/src/main/java/org/apache/camel/bam/ProcessDefinition.java
    activemq/camel/trunk/camel-bam/src/main/java/org/apache/camel/bam/TimeExpression.java
    activemq/camel/trunk/camel-bam/src/main/java/org/apache/camel/bam/model/ActivityState.java
    activemq/camel/trunk/camel-bam/src/main/java/org/apache/camel/bam/model/EntitySupport.java
    activemq/camel/trunk/camel-bam/src/main/java/org/apache/camel/bam/model/ProcessInstance.java
    activemq/camel/trunk/camel-bam/src/main/java/org/apache/camel/bam/model/TimerEvent.java
    activemq/camel/trunk/camel-bam/src/test/java/org/apache/camel/bam/BamRouteTest.java
    activemq/camel/trunk/camel-bam/src/test/resources/log4j.properties
    activemq/camel/trunk/camel-spring/pom.xml
    activemq/camel/trunk/camel-spring/src/test/java/org/apache/camel/spring/SpringTestSupport.java
    activemq/camel/trunk/pom.xml

Modified: activemq/camel/trunk/camel-bam/pom.xml
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-bam/pom.xml?view=diff&rev=538126&r1=538125&r2=538126
==============================================================================
--- activemq/camel/trunk/camel-bam/pom.xml (original)
+++ activemq/camel/trunk/camel-bam/pom.xml Tue May 15 03:40:26 2007
@@ -42,13 +42,6 @@
       <groupId>org.apache.camel</groupId>
       <artifactId>camel-spring</artifactId>
     </dependency>
-    <dependency>
-      <groupId>org.apache.camel</groupId>
-      <artifactId>camel-core</artifactId>
-      <type>test-jar</type>
-      <optional>true</optional>
-      <scope>test</scope>
-    </dependency>
 
     <dependency>
       <groupId>org.springframework</groupId>
@@ -69,12 +62,25 @@
     <dependency>
       <groupId>org.apache.openjpa</groupId>
       <artifactId>openjpa-persistence-jdbc</artifactId>
-      <!--<version>0.9.7-incubating-SNAPSHOT</version>-->
       <!-- mandatory dependency for the enhancer! -->
       <!--<scope>test</scope>-->
     </dependency>
 
     <dependency>
+      <groupId>org.apache.camel</groupId>
+      <artifactId>camel-core</artifactId>
+      <type>test-jar</type>
+      <optional>true</optional>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.camel</groupId>
+      <artifactId>camel-spring</artifactId>
+      <type>test-jar</type>
+      <optional>true</optional>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
       <groupId>org.apache.derby</groupId>
       <artifactId>derby</artifactId>
       <scope>test</scope>
@@ -123,27 +129,28 @@
                 </taskdef>
 
                 <mkdir dir="${basedir}/target/jpa-classes"/>
-                <mkdir dir="${basedir}/target/jpa-test-classes"/>
-
                 <openjpac directory="${basedir}/target/jpa-classes">
                   <classpath refid="cp"/>
                   <fileset dir="${basedir}/target/classes">
-                    <include name="org/apache/camel/**/M*.class"/>
+                    <include name="org/apache/camel/bam/model/*.class"/>
                   </fileset>
                 </openjpac>
+                <copy overwrite="true" todir="${basedir}/target/classes">
+                  <fileset dir="${basedir}/target/jpa-classes"/>
+                </copy>
+
+<!--
+                <mkdir dir="${basedir}/target/jpa-test-classes"/>
                 <openjpac directory="${basedir}/target/jpa-test-classes">
                   <classpath refid="cp"/>
                   <fileset dir="${basedir}/target/test-classes">
                     <include name="org/apache/camel/examples/*.class"/>
                   </fileset>
                 </openjpac>
-
-                <copy overwrite="true" todir="${basedir}/target/classes">
-                  <fileset dir="${basedir}/target/jpa-classes"/>
-                </copy>
                 <copy overwrite="true" todir="${basedir}/target/test-classes">
                   <fileset dir="${basedir}/target/jpa-test-classes"/>
                 </copy>
+-->
               </tasks>
             </configuration>
             <goals>

Copied: activemq/camel/trunk/camel-bam/src/main/java/org/apache/camel/bam/Activity.java (from r538075, activemq/camel/trunk/camel-bam/src/main/java/org/apache/camel/bam/model/Activity.java)
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-bam/src/main/java/org/apache/camel/bam/Activity.java?view=diff&rev=538126&p1=activemq/camel/trunk/camel-bam/src/main/java/org/apache/camel/bam/model/Activity.java&r1=538075&p2=activemq/camel/trunk/camel-bam/src/main/java/org/apache/camel/bam/Activity.java&r2=538126
==============================================================================
--- activemq/camel/trunk/camel-bam/src/main/java/org/apache/camel/bam/model/Activity.java (original)
+++ activemq/camel/trunk/camel-bam/src/main/java/org/apache/camel/bam/Activity.java Tue May 15 03:40:26 2007
@@ -14,23 +14,21 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.bam.model;
+package org.apache.camel.bam;
 
 import org.apache.camel.Exchange;
-import org.apache.camel.bam.ProcessDefinition;
-
-import javax.persistence.Entity;
-import javax.persistence.NamedQuery;
+import org.apache.camel.bam.model.ActivityState;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
 
 /**
  * Represents a activity which is typically a system or could be an endpoint
  *
  * @version $Revision: $
  */
-@Entity
-@NamedQuery(name = "findByName",
-        query = "select x from org.apache.camel.bam.model.Activity where x.name = ?1")
 public class Activity {
+    private static final transient Log log = LogFactory.getLog(Activity.class);
+
     private int expectedMessages = 1;
     private String name;
     private ProcessDefinition process;
@@ -59,6 +57,10 @@
      * Perform any assertions after the state has been updated
      */
     public void process(ActivityState activityState, Exchange exchange) {
-        // TODO
+
+        log.info("Received state: " + activityState
+                + " message count " + activityState.getReceivedMessageCount()
+                + " started: " + activityState.getTimeStarted()
+                + " completed: " + activityState.getTimeCompleted());
     }
 }

Modified: activemq/camel/trunk/camel-bam/src/main/java/org/apache/camel/bam/ActivityBuilder.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-bam/src/main/java/org/apache/camel/bam/ActivityBuilder.java?view=diff&rev=538126&r1=538125&r2=538126
==============================================================================
--- activemq/camel/trunk/camel-bam/src/main/java/org/apache/camel/bam/ActivityBuilder.java (original)
+++ activemq/camel/trunk/camel-bam/src/main/java/org/apache/camel/bam/ActivityBuilder.java Tue May 15 03:40:26 2007
@@ -20,7 +20,7 @@
 import org.apache.camel.Exchange;
 import org.apache.camel.Expression;
 import org.apache.camel.Processor;
-import org.apache.camel.bam.model.Activity;
+import org.apache.camel.bam.Activity;
 import org.apache.camel.bam.model.ActivityState;
 import org.apache.camel.builder.ProcessorFactory;
 
@@ -36,7 +36,7 @@
     public ActivityBuilder(ProcessBuilder processBuilder, Endpoint endpoint) {
         this.processBuilder = processBuilder;
         this.endpoint = endpoint;
-        this.activity = new Activity(processBuilder.getProcess());
+        this.activity = new org.apache.camel.bam.Activity(processBuilder.getProcess());
         this.activity.setName(endpoint.getEndpointUri());
     }
 
@@ -89,7 +89,7 @@
         return correlationExpression;
     }
 
-    public Activity getActivity() {
+    public org.apache.camel.bam.Activity getActivity() {
         return activity;
     }
 

Modified: activemq/camel/trunk/camel-bam/src/main/java/org/apache/camel/bam/ActivityExpressionSupport.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-bam/src/main/java/org/apache/camel/bam/ActivityExpressionSupport.java?view=diff&rev=538126&r1=538125&r2=538126
==============================================================================
--- activemq/camel/trunk/camel-bam/src/main/java/org/apache/camel/bam/ActivityExpressionSupport.java (original)
+++ activemq/camel/trunk/camel-bam/src/main/java/org/apache/camel/bam/ActivityExpressionSupport.java Tue May 15 03:40:26 2007
@@ -17,7 +17,7 @@
 package org.apache.camel.bam;
 
 import org.apache.camel.Exchange;
-import org.apache.camel.bam.model.Activity;
+import org.apache.camel.bam.Activity;
 import org.apache.camel.bam.model.ActivityState;
 import org.apache.camel.bam.model.ProcessInstance;
 

Modified: activemq/camel/trunk/camel-bam/src/main/java/org/apache/camel/bam/BamProcessorSupport.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-bam/src/main/java/org/apache/camel/bam/BamProcessorSupport.java?view=diff&rev=538126&r1=538125&r2=538126
==============================================================================
--- activemq/camel/trunk/camel-bam/src/main/java/org/apache/camel/bam/BamProcessorSupport.java (original)
+++ activemq/camel/trunk/camel-bam/src/main/java/org/apache/camel/bam/BamProcessorSupport.java Tue May 15 03:40:26 2007
@@ -19,6 +19,8 @@
 import org.apache.camel.Exchange;
 import org.apache.camel.Expression;
 import org.apache.camel.Processor;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
 
 import java.lang.reflect.Type;
 import java.lang.reflect.ParameterizedType;
@@ -30,6 +32,8 @@
  * @version $Revision: $
  */
 public abstract class BamProcessorSupport<T> implements Processor {
+    private static final transient Log log = LogFactory.getLog(BamProcessorSupport.class);
+
     private Class<T> entityType;
     private Expression<Exchange> correlationKeyExpression;
 
@@ -63,6 +67,9 @@
 
 
         T entity = loadEntity(exchange, key);
+
+        log.info("Correlation key: " + key + " with entity: " + entity);
+        
         //storeProcessInExchange(exchange, entity);
         processEntity(exchange, entity);
     }

Modified: activemq/camel/trunk/camel-bam/src/main/java/org/apache/camel/bam/JpaBamProcessor.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-bam/src/main/java/org/apache/camel/bam/JpaBamProcessor.java?view=diff&rev=538126&r1=538125&r2=538126
==============================================================================
--- activemq/camel/trunk/camel-bam/src/main/java/org/apache/camel/bam/JpaBamProcessor.java (original)
+++ activemq/camel/trunk/camel-bam/src/main/java/org/apache/camel/bam/JpaBamProcessor.java Tue May 15 03:40:26 2007
@@ -20,12 +20,15 @@
 import org.apache.camel.bam.model.ProcessInstance;
 import org.apache.camel.Exchange;
 import org.apache.camel.Expression;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
 import org.springframework.orm.jpa.JpaTemplate;
 
 /**
  * @version $Revision: $
  */
 public class JpaBamProcessor extends JpaBamProcessorSupport<ProcessInstance> {
+    private static final transient Log log = LogFactory.getLog(JpaBamProcessor.class);
 
     public JpaBamProcessor(Class<ProcessInstance> entitytype, Expression<Exchange> correlationKeyExpression, Activity activity, JpaTemplate template) {
         super(entitytype, correlationKeyExpression, activity, template);
@@ -36,6 +39,8 @@
     }
 
     protected void processEntity(Exchange exchange, ProcessInstance process) throws Exception {
+        log.info("Processing entity! - attempting to get the current state for process: " + process);
+
         ActivityState state = process.getActivityState(getActivity());
         if (state == null) {
             state = createActivityState(exchange, process);

Modified: activemq/camel/trunk/camel-bam/src/main/java/org/apache/camel/bam/JpaBamProcessorSupport.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-bam/src/main/java/org/apache/camel/bam/JpaBamProcessorSupport.java?view=diff&rev=538126&r1=538125&r2=538126
==============================================================================
--- activemq/camel/trunk/camel-bam/src/main/java/org/apache/camel/bam/JpaBamProcessorSupport.java (original)
+++ activemq/camel/trunk/camel-bam/src/main/java/org/apache/camel/bam/JpaBamProcessorSupport.java Tue May 15 03:40:26 2007
@@ -19,10 +19,12 @@
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
 import org.apache.camel.Expression;
-import org.apache.camel.bam.model.Activity;
+import org.apache.camel.bam.Activity;
 import org.apache.camel.util.IntrospectionSupport;
 import org.springframework.orm.jpa.JpaTemplate;
 
+import java.util.List;
+
 /**
  * @version $Revision: $
  */
@@ -30,7 +32,7 @@
     private Activity activity;
     private JpaTemplate template;
     private String findByKeyQuery;
-    private String keyPropertyName = "key";
+    private String keyPropertyName = "correlationKey";
 
     public JpaBamProcessorSupport(Class<T> entitytype, Expression<Exchange> correlationKeyExpression, Activity activity, JpaTemplate template) {
         super(entitytype, correlationKeyExpression);
@@ -83,10 +85,15 @@
     // Implementatiom methods
     //-----------------------------------------------------------------------
     protected T loadEntity(Exchange exchange, Object key) {
-        T entity = (T) template.find(getFindByKeyQuery(), key);
+        List<T> list = template.find(getFindByKeyQuery(), key);
+        T entity = null;
+        if (!list.isEmpty()) {
+            entity = list.get(0);
+        }
         if (entity == null) {
             entity = createEntity(exchange, key);
             setKeyProperty(entity, key);
+            template.persist(entity);
         }
         return entity;
     }
@@ -117,6 +124,6 @@
     }
 
     protected String createFindByKeyQuery() {
-        return "select x from " + getEntityType().getName() + " where x." + getKeyPropertyName() + " = ?1";
+        return "select x from " + getEntityType().getName() + " x where x." + getKeyPropertyName() + " = ?1";
     }
 }

Modified: activemq/camel/trunk/camel-bam/src/main/java/org/apache/camel/bam/ProcessBuilder.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-bam/src/main/java/org/apache/camel/bam/ProcessBuilder.java?view=diff&rev=538126&r1=538125&r2=538126
==============================================================================
--- activemq/camel/trunk/camel-bam/src/main/java/org/apache/camel/bam/ProcessBuilder.java (original)
+++ activemq/camel/trunk/camel-bam/src/main/java/org/apache/camel/bam/ProcessBuilder.java Tue May 15 03:40:26 2007
@@ -16,9 +16,14 @@
  */
 package org.apache.camel.bam;
 
+import static org.apache.camel.util.ObjectHelper.notNull;
 import org.apache.camel.Endpoint;
 import org.apache.camel.Processor;
+import org.apache.camel.Route;
+import org.apache.camel.bam.model.ProcessInstance;
+import org.apache.camel.util.ObjectHelper;
 import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.builder.FromBuilder;
 import org.springframework.orm.jpa.JpaTemplate;
 
 import java.util.ArrayList;
@@ -30,11 +35,15 @@
  * @version $Revision: $
  */
 public abstract class ProcessBuilder extends RouteBuilder {
-    private List<ActivityBuilder> activityBuilders = new ArrayList<ActivityBuilder>();
-    private Class entityType = Process.class;
     private JpaTemplate jpaTemplate;
+    private List<ActivityBuilder> activityBuilders = new ArrayList<ActivityBuilder>();
+    private Class entityType = ProcessInstance.class;
     private ProcessDefinition process = new ProcessDefinition();
 
+    protected ProcessBuilder(JpaTemplate jpaTemplate) {
+        this.jpaTemplate = jpaTemplate;
+    }
+
     public ActivityBuilder activity(String endpointUri) {
         return activity(endpoint(endpointUri));
     }
@@ -55,6 +64,7 @@
 
 
     public Processor createActivityProcessor(ActivityBuilder activityBuilder) {
+        notNull(jpaTemplate, "jpaTemplate");
         return new JpaBamProcessor(getEntityType(), activityBuilder.getCorrelationExpression(), activityBuilder.getActivity(), getJpaTemplate());
     }
 
@@ -81,4 +91,16 @@
     public ProcessDefinition getProcess() {
         return process;
     }
-}
+
+    // Implementation methods
+    //-------------------------------------------------------------------------
+    protected void populateRoutes(List<Route> routes) throws Exception {
+        for (ActivityBuilder builder : activityBuilders) {
+            Endpoint from = builder.getEndpoint();
+            Processor processor = builder.createProcessor();
+            if (processor == null) {
+                throw new IllegalArgumentException("No processor created for ActivityBuilder: " + builder);
+            }
+            routes.add(new Route(from, processor));
+        }
+    }}

Modified: activemq/camel/trunk/camel-bam/src/main/java/org/apache/camel/bam/ProcessDefinition.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-bam/src/main/java/org/apache/camel/bam/ProcessDefinition.java?view=diff&rev=538126&r1=538125&r2=538126
==============================================================================
--- activemq/camel/trunk/camel-bam/src/main/java/org/apache/camel/bam/ProcessDefinition.java (original)
+++ activemq/camel/trunk/camel-bam/src/main/java/org/apache/camel/bam/ProcessDefinition.java Tue May 15 03:40:26 2007
@@ -16,7 +16,7 @@
  */
 package org.apache.camel.bam;
 
-import org.apache.camel.bam.model.Activity;
+import org.apache.camel.bam.Activity;
 
 import java.util.Map;
 import java.util.HashMap;
@@ -25,7 +25,7 @@
  * @version $Revision: $
  */
 public class ProcessDefinition {
-    private Map<String, Activity> activitys = new HashMap<String, Activity>();
+    private Map<String, org.apache.camel.bam.Activity> activitys = new HashMap<String, Activity>();
 
 
     

Modified: activemq/camel/trunk/camel-bam/src/main/java/org/apache/camel/bam/TimeExpression.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-bam/src/main/java/org/apache/camel/bam/TimeExpression.java?view=diff&rev=538126&r1=538125&r2=538126
==============================================================================
--- activemq/camel/trunk/camel-bam/src/main/java/org/apache/camel/bam/TimeExpression.java (original)
+++ activemq/camel/trunk/camel-bam/src/main/java/org/apache/camel/bam/TimeExpression.java Tue May 15 03:40:26 2007
@@ -18,7 +18,6 @@
 
 import org.apache.camel.Exchange;
 import org.apache.camel.Expression;
-import org.apache.camel.bam.model.Activity;
 
 /**
  * 
@@ -26,11 +25,11 @@
  */
 public class TimeExpression implements Expression<Exchange> {
 
-    private Activity activity;
+    private org.apache.camel.bam.Activity activity;
     private Expression expression;
 
 
-    public TimeExpression(Activity activity, Expression expression) {
+    public TimeExpression(org.apache.camel.bam.Activity activity, Expression expression) {
         this.activity = activity;
         this.expression = expression;
     }

Copied: activemq/camel/trunk/camel-bam/src/main/java/org/apache/camel/bam/TimerEventHandler.java (from r538075, activemq/camel/trunk/camel-bam/src/main/java/org/apache/camel/bam/model/TimerEventHandler.java)
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-bam/src/main/java/org/apache/camel/bam/TimerEventHandler.java?view=diff&rev=538126&p1=activemq/camel/trunk/camel-bam/src/main/java/org/apache/camel/bam/model/TimerEventHandler.java&r1=538075&p2=activemq/camel/trunk/camel-bam/src/main/java/org/apache/camel/bam/TimerEventHandler.java&r2=538126
==============================================================================
--- activemq/camel/trunk/camel-bam/src/main/java/org/apache/camel/bam/model/TimerEventHandler.java (original)
+++ activemq/camel/trunk/camel-bam/src/main/java/org/apache/camel/bam/TimerEventHandler.java Tue May 15 03:40:26 2007
@@ -14,7 +14,9 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.bam.model;
+package org.apache.camel.bam;
+
+import org.apache.camel.bam.model.TimerEvent;
 
 /**
  * @version $Revision: $

Modified: activemq/camel/trunk/camel-bam/src/main/java/org/apache/camel/bam/model/ActivityState.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-bam/src/main/java/org/apache/camel/bam/model/ActivityState.java?view=diff&rev=538126&r1=538125&r2=538126
==============================================================================
--- activemq/camel/trunk/camel-bam/src/main/java/org/apache/camel/bam/model/ActivityState.java (original)
+++ activemq/camel/trunk/camel-bam/src/main/java/org/apache/camel/bam/model/ActivityState.java Tue May 15 03:40:26 2007
@@ -17,6 +17,8 @@
 package org.apache.camel.bam.model;
 
 import org.apache.camel.Exchange;
+import org.apache.camel.bam.*;
+import org.apache.camel.bam.Activity;
 import org.apache.camel.util.ObjectHelper;
 
 import javax.persistence.CascadeType;
@@ -31,13 +33,11 @@
  */
 @Entity
 public class ActivityState extends TemporalEntity implements TimerEventHandler {
-
-    @ManyToOne(fetch = FetchType.LAZY, cascade = {CascadeType.PERSIST})
     private ProcessInstance process;
     private int receivedMessageCount;
     private String activityName;
 
-    public synchronized void process(Activity activity, Exchange exchange) throws Exception {
+    public synchronized void process(org.apache.camel.bam.Activity activity, Exchange exchange) throws Exception {
         int messageCount = getReceivedMessageCount() + 1;
         setReceivedMessageCount(messageCount);
 
@@ -72,6 +72,7 @@
 
     // Properties
     //-----------------------------------------------------------------------
+    @ManyToOne(fetch = FetchType.LAZY, cascade = {CascadeType.PERSIST})
     public ProcessInstance getProcess() {
         return process;
     }

Modified: activemq/camel/trunk/camel-bam/src/main/java/org/apache/camel/bam/model/EntitySupport.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-bam/src/main/java/org/apache/camel/bam/model/EntitySupport.java?view=diff&rev=538126&r1=538125&r2=538126
==============================================================================
--- activemq/camel/trunk/camel-bam/src/main/java/org/apache/camel/bam/model/EntitySupport.java (original)
+++ activemq/camel/trunk/camel-bam/src/main/java/org/apache/camel/bam/model/EntitySupport.java Tue May 15 03:40:26 2007
@@ -24,10 +24,10 @@
  * @version $Revision: $
  */
 public class EntitySupport {
-    @Id
-    @GeneratedValue
     private Long id;
 
+    @Id
+    @GeneratedValue
     public Long getId() {
         return id;
     }

Modified: activemq/camel/trunk/camel-bam/src/main/java/org/apache/camel/bam/model/ProcessInstance.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-bam/src/main/java/org/apache/camel/bam/model/ProcessInstance.java?view=diff&rev=538126&r1=538125&r2=538126
==============================================================================
--- activemq/camel/trunk/camel-bam/src/main/java/org/apache/camel/bam/model/ProcessInstance.java (original)
+++ activemq/camel/trunk/camel-bam/src/main/java/org/apache/camel/bam/model/ProcessInstance.java Tue May 15 03:40:26 2007
@@ -16,12 +16,15 @@
  */
 package org.apache.camel.bam.model;
 
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
 import javax.persistence.CascadeType;
 import javax.persistence.Entity;
 import javax.persistence.FetchType;
 import javax.persistence.OneToMany;
 import java.util.HashSet;
-import java.util.Set;
+import java.util.Collection;
 
 /**
  * Represents a single business process
@@ -30,10 +33,15 @@
  */
 @Entity
 public class ProcessInstance extends TemporalEntity {
-    @OneToMany(mappedBy = "process", fetch = FetchType.LAZY, cascade = {CascadeType.ALL})
-    private Set<ActivityState> activityStates = new HashSet<ActivityState>();
-    private String key;
+    private static final transient Log log = LogFactory.getLog(ProcessInstance.class);
+    
+    private Collection<ActivityState> activityStates = new HashSet<ActivityState>();
+    private String correlationKey;
+
 
+    public String toString() {
+        return getClass().getName() + "[id: " + getId() + ", key: " + getCorrelationKey() + "]";
+    }
 
     /**
      * Returns the activity state for the given activity
@@ -42,8 +50,10 @@
      * @return the activity state or null if no state could be found for the
      *         given activity
      */
-    public ActivityState getActivityState(Activity activity) {
-        for (ActivityState activityState : activityStates) {
+    public ActivityState getActivityState(org.apache.camel.bam.Activity activity) {
+        log.info("About to iterate through the states: " + getActivityStates());
+
+        for (ActivityState activityState : getActivityStates()) {
             if (activityState.isActivity(activity)) {
                 return activityState;
             }
@@ -51,19 +61,20 @@
         return null;
     }
 
-    public Set<ActivityState> getActivityStates() {
+    @OneToMany(mappedBy = "process", fetch = FetchType.LAZY, cascade = {CascadeType.ALL})
+    public Collection<ActivityState> getActivityStates() {
         return activityStates;
     }
 
-    public void setActivityStates(Set<ActivityState> activityStates) {
+    public void setActivityStates(Collection<ActivityState> activityStates) {
         this.activityStates = activityStates;
     }
 
-    public String getKey() {
-        return key;
+    public String getCorrelationKey() {
+        return correlationKey;
     }
 
-    public void setKey(String key) {
-        this.key = key;
+    public void setCorrelationKey(String correlationKey) {
+        this.correlationKey = correlationKey;
     }
 }

Modified: activemq/camel/trunk/camel-bam/src/main/java/org/apache/camel/bam/model/TimerEvent.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-bam/src/main/java/org/apache/camel/bam/model/TimerEvent.java?view=diff&rev=538126&r1=538125&r2=538126
==============================================================================
--- activemq/camel/trunk/camel-bam/src/main/java/org/apache/camel/bam/model/TimerEvent.java (original)
+++ activemq/camel/trunk/camel-bam/src/main/java/org/apache/camel/bam/model/TimerEvent.java Tue May 15 03:40:26 2007
@@ -16,6 +16,8 @@
  */
 package org.apache.camel.bam.model;
 
+import org.apache.camel.bam.TimerEventHandler;
+
 import javax.persistence.Entity;
 import javax.persistence.ManyToOne;
 import javax.persistence.FetchType;

Modified: activemq/camel/trunk/camel-bam/src/test/java/org/apache/camel/bam/BamRouteTest.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-bam/src/test/java/org/apache/camel/bam/BamRouteTest.java?view=diff&rev=538126&r1=538125&r2=538126
==============================================================================
--- activemq/camel/trunk/camel-bam/src/test/java/org/apache/camel/bam/BamRouteTest.java (original)
+++ activemq/camel/trunk/camel-bam/src/test/java/org/apache/camel/bam/BamRouteTest.java Tue May 15 03:40:26 2007
@@ -17,22 +17,44 @@
 package org.apache.camel.bam;
 
 import org.apache.camel.ContextTestSupport;
+import org.apache.camel.CamelContext;
+import org.apache.camel.spring.SpringCamelContext;
+import org.apache.camel.spring.SpringTestSupport;
 import org.apache.camel.builder.RouteBuilder;
 import static org.apache.camel.builder.xml.XPathBuilder.xpath;
-import static org.apache.camel.util.Time.*;
+import static org.apache.camel.util.Time.seconds;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.support.ClassPathXmlApplicationContext;
+import org.springframework.orm.jpa.JpaTemplate;
 
 /**
  * @version $Revision: $
  */
-public class BamRouteTest extends ContextTestSupport {
+public class BamRouteTest extends SpringTestSupport {
     protected Object body = "<hello>world!</hello>";
+    protected JpaTemplate jpaTemplate;
 
     public void testRoute() throws Exception {
-        template.sendBody("direct:start", body);
+        template.sendBody("direct:a", body, "foo", "a");
+
+        //Thread.sleep(30000);
+    }
+
+    protected ClassPathXmlApplicationContext createApplicationContext() {
+        return new ClassPathXmlApplicationContext("org/apache/camel/bam/spring.xml");
+    }
+
+    @Override
+    protected void setUp() throws Exception {
+        super.setUp();
+
+        camelContext.addRoutes(createRouteBuilder());
     }
 
     protected RouteBuilder createRouteBuilder() throws Exception {
-        return new ProcessBuilder() {
+        jpaTemplate = getMandatoryBean(JpaTemplate.class, "jpaTemplate");
+
+        return new ProcessBuilder(jpaTemplate) {
             public void configure() throws Exception {
 
                 ActivityBuilder a = activity("direct:a").name("a")
@@ -42,46 +64,47 @@
                         .correlate(header("foo"));
 
                 ActivityBuilder c = activity("direct:c").name("c")
-                        .correlate(xpath("/foo/bar"));
-
+                        .correlate(header("foo"));
 
                 b.starts().after(a.completes())
                         .expectWithin(seconds(1))
                         .errorIfOver(seconds(5));
 
-                        // TODO .errorIfBefore(a.starts())
-
-
                 /*
-                expect(b.starts().after(10).minutes().from(a.starts());
+        expect(b.starts().after(10).minutes().from(a.starts());
 
 
-                
 
-                process.activity("direct:a").name("a")
-                        .correlate(header("foo"))
-                        .expect(seconds(10)).afterProcess().starts();
-                        .expectedAfter(10).minutes();
-                        .errorAfter(30).minutes();
 
+        process.activity("direct:a").name("a")
+                .correlate(header("foo"))
+                .expect(seconds(10)).afterProcess().starts();
+                .expectedAfter(10).minutes();
+                .errorAfter(30).minutes();
 
-                process.activity("direct:b").name("b")
-                        .correlate(header("foo"))
-                        .expect(minutes(10)).after("a").completes();
 
+        process.activity("direct:b").name("b")
+                .correlate(header("foo"))
+                .expect(minutes(10)).after("a").completes();
 
-                BamBuilder bam = BamBuilder.monitor(this, "direct:a", "direct:b", "direct:c");
 
-                bam.process("direct:b",).expectedMesageCount(1)
-                        .expectedAfter().minutes(10)
-                        .errorAfter().minutes(30);
+        BamBuilder bam = BamBuilder.monitor(this, "direct:a", "direct:b", "direct:c");
 
-                bam.expects("direct:c").expectedMesageCount(1)
-                        .expectedAfter().minutes(10)
-                        .errorAfter().minutes(30);
+        bam.process("direct:b",).expectedMesageCount(1)
+                .expectedAfter().minutes(10)
+                .errorAfter().minutes(30);
 
-                        */
+        bam.expects("direct:c").expectedMesageCount(1)
+                .expectedAfter().minutes(10)
+                .errorAfter().minutes(30);
+
+                */
             }
         };
+    }
+
+    @Override
+    protected int getExpectedRouteCount() {
+        return 0;
     }
 }

Modified: activemq/camel/trunk/camel-bam/src/test/resources/log4j.properties
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-bam/src/test/resources/log4j.properties?view=diff&rev=538126&r1=538125&r2=538126
==============================================================================
--- activemq/camel/trunk/camel-bam/src/test/resources/log4j.properties (original)
+++ activemq/camel/trunk/camel-bam/src/test/resources/log4j.properties Tue May 15 03:40:26 2007
@@ -21,7 +21,8 @@
 log4j.rootLogger=INFO, out
 
 #log4j.logger.org.apache.activemq=DEBUG
-#log4j.logger.org.apache.camel=DEBUG
+log4j.logger.org.apache.camel=DEBUG
+log4j.logger.org.springframework=WARN
 
 # CONSOLE appender not used by default
 log4j.appender.out=org.apache.log4j.ConsoleAppender

Added: activemq/camel/trunk/camel-bam/src/test/resources/org/apache/camel/bam/spring.xml
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-bam/src/test/resources/org/apache/camel/bam/spring.xml?view=auto&rev=538126
==============================================================================
--- activemq/camel/trunk/camel-bam/src/test/resources/org/apache/camel/bam/spring.xml (added)
+++ activemq/camel/trunk/camel-bam/src/test/resources/org/apache/camel/bam/spring.xml Tue May 15 03:40:26 2007
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
+
+  <bean id="tranactionTemplate" class="org.springframework.transaction.support.TransactionTemplate">
+    <property name="transactionManager">
+      <bean class="org.springframework.orm.jpa.JpaTransactionManager">
+        <property name="entityManagerFactory" ref="entityManagerFactory"/>
+      </bean>
+    </property>
+  </bean>
+
+  <bean id="jpaTemplate" class="org.springframework.orm.jpa.JpaTemplate">
+    <property name="entityManagerFactory" ref="entityManagerFactory"/>
+  </bean>
+
+  <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean">
+    <property name="persistenceUnitName" value="bam"/>
+  </bean>
+
+</beans>
\ No newline at end of file

Propchange: activemq/camel/trunk/camel-bam/src/test/resources/org/apache/camel/bam/spring.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: activemq/camel/trunk/camel-spring/pom.xml
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-spring/pom.xml?view=diff&rev=538126&r1=538125&r2=538126
==============================================================================
--- activemq/camel/trunk/camel-spring/pom.xml (original)
+++ activemq/camel/trunk/camel-spring/pom.xml Tue May 15 03:40:26 2007
@@ -128,6 +128,18 @@
           </execution>
         </executions>
       </plugin>
+
+      <!-- lets distribute the test cases as a jar -->
+      <plugin>
+        <artifactId>maven-jar-plugin</artifactId>
+        <executions>
+          <execution>
+            <goals>
+              <goal>test-jar</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
     </plugins>
   </build>
 </project>

Modified: activemq/camel/trunk/camel-spring/src/test/java/org/apache/camel/spring/SpringTestSupport.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-spring/src/test/java/org/apache/camel/spring/SpringTestSupport.java?view=diff&rev=538126&r1=538125&r2=538126
==============================================================================
--- activemq/camel/trunk/camel-spring/src/test/java/org/apache/camel/spring/SpringTestSupport.java (original)
+++ activemq/camel/trunk/camel-spring/src/test/java/org/apache/camel/spring/SpringTestSupport.java Tue May 15 03:40:26 2007
@@ -17,14 +17,14 @@
  */
 package org.apache.camel.spring;
 
-import org.apache.camel.TestSupport;
-import org.apache.camel.Route;
-import org.apache.camel.Exchange;
 import org.apache.camel.CamelTemplate;
 import org.apache.camel.Endpoint;
+import org.apache.camel.Exchange;
+import org.apache.camel.Route;
+import org.apache.camel.TestSupport;
 import org.apache.camel.util.ObjectHelper;
-import org.springframework.context.support.ClassPathXmlApplicationContext;
 import org.springframework.context.support.AbstractXmlApplicationContext;
+import org.springframework.context.support.ClassPathXmlApplicationContext;
 
 import java.util.List;
 
@@ -47,6 +47,9 @@
 
         camelContext = createCamelContext();
         assertValidContext(camelContext);
+        if (!camelContext.isStarted()) {
+            camelContext.start();
+        }
 
         template = new CamelTemplate<Exchange>(camelContext);
     }
@@ -82,8 +85,11 @@
         assertNotNull("No context found!", context);
 
         List<Route> routes = context.getRoutes();
-        assertNotNull("Should have some routes defined", routes);
-        assertTrue("Should have at least one route", routes.size() >= getExpectedRouteCount());
+        int routeCount = getExpectedRouteCount();
+        if (routeCount > 0) {
+            assertNotNull("Should have some routes defined", routes);
+            assertTrue("Should have at least one route", routes.size() >= routeCount);
+        }
         log.debug("Camel Routes: " + routes);
     }
 
@@ -94,5 +100,4 @@
     protected SpringCamelContext createCamelContext() throws Exception {
         return SpringCamelContext.springCamelContext(applicationContext);
     }
-
 }

Modified: activemq/camel/trunk/pom.xml
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/pom.xml?view=diff&rev=538126&r1=538125&r2=538126
==============================================================================
--- activemq/camel/trunk/pom.xml (original)
+++ activemq/camel/trunk/pom.xml Tue May 15 03:40:26 2007
@@ -229,9 +229,18 @@
         <version>${camel-version}</version>
       </dependency>
 
+      <!-- testing jars -->
       <dependency>
         <groupId>org.apache.camel</groupId>
         <artifactId>camel-core</artifactId>
+        <type>test-jar</type>
+        <version>${camel-version}</version>
+        <optional>true</optional>
+        <scope>test</scope>
+      </dependency>
+      <dependency>
+        <groupId>org.apache.camel</groupId>
+        <artifactId>camel-spring</artifactId>
         <type>test-jar</type>
         <version>${camel-version}</version>
         <optional>true</optional>