You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2009/01/14 15:07:55 UTC

svn commit: r734401 - in /activemq/camel/trunk: camel-core/src/main/java/org/apache/camel/processor/interceptor/ camel-core/src/main/java/org/apache/camel/util/ camel-core/src/test/java/org/apache/camel/processor/interceptor/ components/camel-bam/src/m...

Author: davsclaus
Date: Wed Jan 14 06:06:19 2009
New Revision: 734401

URL: http://svn.apache.org/viewvc?rev=734401&view=rev
Log:
CAMEL-1255: Jpa based trace event message for storing trace events in a database. All jpa entity have CAMEL_ as prefix in table names.

Added:
    activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/interceptor/DefaultTraceEventMessage.java
      - copied, changed from r734343, activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/interceptor/TraceEventMessage.java
    activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/interceptor/TraceEventMessage.java   (with props)
    activemq/camel/trunk/components/camel-jpa/src/main/java/org/apache/camel/processor/interceptor/
    activemq/camel/trunk/components/camel-jpa/src/main/java/org/apache/camel/processor/interceptor/JpaTraceEventMessage.java   (with props)
    activemq/camel/trunk/components/camel-jpa/src/test/java/org/apache/camel/processor/interceptor/
    activemq/camel/trunk/components/camel-jpa/src/test/java/org/apache/camel/processor/interceptor/JpaTraceEventMessageTest.java   (contents, props changed)
      - copied, changed from r734343, activemq/camel/trunk/components/camel-jpa/src/test/java/org/apache/camel/processor/jpa/JpaIdempotentConsumerTest.java
    activemq/camel/trunk/components/camel-jpa/src/test/resources/org/apache/camel/processor/interceptor/
    activemq/camel/trunk/components/camel-jpa/src/test/resources/org/apache/camel/processor/interceptor/springJpaTraveEvent.xml   (with props)
Modified:
    activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/interceptor/TraceEventExchange.java
    activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/interceptor/TraceInterceptor.java
    activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/interceptor/Tracer.java
    activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/IntrospectionSupport.java
    activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/interceptor/TraceFormatterTest.java
    activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/interceptor/TraceInterceptorDestinationTest.java
    activemq/camel/trunk/components/camel-bam/src/main/java/org/apache/camel/bam/model/ActivityDefinition.java
    activemq/camel/trunk/components/camel-bam/src/main/java/org/apache/camel/bam/model/ActivityState.java
    activemq/camel/trunk/components/camel-bam/src/main/java/org/apache/camel/bam/model/ProcessDefinition.java
    activemq/camel/trunk/components/camel-bam/src/main/java/org/apache/camel/bam/model/ProcessInstance.java
    activemq/camel/trunk/components/camel-jpa/pom.xml
    activemq/camel/trunk/components/camel-jpa/src/main/java/org/apache/camel/processor/idempotent/jpa/MessageProcessed.java
    activemq/camel/trunk/components/camel-jpa/src/main/resources/META-INF/persistence.xml
    activemq/camel/trunk/components/camel-jpa/src/test/resources/META-INF/persistence.xml

Copied: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/interceptor/DefaultTraceEventMessage.java (from r734343, activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/interceptor/TraceEventMessage.java)
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/interceptor/DefaultTraceEventMessage.java?p2=activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/interceptor/DefaultTraceEventMessage.java&p1=activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/interceptor/TraceEventMessage.java&r1=734343&r2=734401&rev=734401&view=diff
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/interceptor/TraceEventMessage.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/interceptor/DefaultTraceEventMessage.java Wed Jan 14 06:06:19 2009
@@ -17,6 +17,7 @@
 package org.apache.camel.processor.interceptor;
 
 import java.io.Serializable;
+import java.util.Date;
 
 import org.apache.camel.Exchange;
 import org.apache.camel.Message;
@@ -25,14 +26,13 @@
 import org.apache.camel.util.MessageHelper;
 
 /**
- * A trace event message that contains decomposited information about the traced
- * {@link Exchange} at the point of interception. The information is stored as snapshot copies
- * using String types.
+ * Default JPA based {@link TraceEventMessage}.
  */
-public final class TraceEventMessage implements Serializable {
+public final class DefaultTraceEventMessage implements Serializable, TraceEventMessage {
 
-    private String fromEndpointUri;
+    private Date timestamp;
     private String previousNode;
+    private String fromEndpointUri;
     private String toNode;
     private String exchangeId;
     private String shortExchangeId;
@@ -43,22 +43,23 @@
     private String bodyType;
     private String outBody;
     private String outBodyType;
-    private String exception;
+    private String causedByException;
 
     /**
-     * Creates a {@link TraceEventMessage} based on the given node it was traced while processing
+     * Creates a {@link DefaultTraceEventMessage} based on the given node it was traced while processing
      * the current {@link Exchange}
      *
      * @param toNode the node where this trace is intercepted
      * @param exchange the current {@link Exchange}
      */
-    public TraceEventMessage(final ProcessorType toNode, final Exchange exchange) {
+    public DefaultTraceEventMessage(final Date timestamp, final ProcessorType toNode, final Exchange exchange) {
         Message in = exchange.getIn();
 
         // false because we don't want to introduce side effects
         Message out = exchange.getOut(false);
 
         // need to use defensive copies to avoid Exchange altering after the point of interception
+        this.timestamp = timestamp;
         this.fromEndpointUri = exchange.getFromEndpoint() != null ? exchange.getFromEndpoint().getEndpointUri() : null;
         this.previousNode = extractPreviousNode(exchange);
         this.toNode = extractNode(toNode);
@@ -71,7 +72,7 @@
         this.bodyType = MessageHelper.getBodyTypeName(in);
         this.outBody = MessageHelper.extractBodyAsString(out);
         this.outBodyType = MessageHelper.getBodyTypeName(out);
-        this.exception = exchange.getException() != null ? exchange.getException().toString() : null;
+        this.causedByException = exchange.getException() != null ? exchange.getException().toString() : null;
     }
 
     // Implementation
@@ -96,28 +97,18 @@
     // Properties
     //---------------------------------------------------------------
 
-    /**
-     * Uri of the endpoint that started the {@link Exchange} currently being traced.
-     */
+    public Date getTimestamp() {
+        return timestamp;
+    }
+
     public String getFromEndpointUri() {
         return fromEndpointUri;
     }
 
-    /**
-     * Gets the previous node.
-     * <p/>
-     * Will return <tt>null</tt> if this is the first node, then you can use the from endpoint uri
-     * instread to indicate the start
-     */
     public String getPreviousNode() {
         return previousNode;
     }
 
-    /**
-     * Gets the current node that just have been intercepted and processed
-     * <p/>
-     * Is never null.
-     */
     public String getToNode() {
         return toNode;
     }
@@ -126,9 +117,6 @@
         return exchangeId;
     }
 
-    /**
-     * Gets the exchange id without the leading hostname
-     */
     public String getShortExchangeId() {
         return shortExchangeId;
     }
@@ -161,12 +149,68 @@
         return outBodyType;
     }
 
-    public String getException() {
-        return exception;
+    public String getCausedByException() {
+        return causedByException;
+    }
+
+    public void setTimestamp(Date timestamp) {
+        this.timestamp = timestamp;
+    }
+
+    public void setFromEndpointUri(String fromEndpointUri) {
+        this.fromEndpointUri = fromEndpointUri;
+    }
+
+    public void setPreviousNode(String previousNode) {
+        this.previousNode = previousNode;
+    }
+
+    public void setToNode(String toNode) {
+        this.toNode = toNode;
+    }
+
+    public void setExchangeId(String exchangeId) {
+        this.exchangeId = exchangeId;
+    }
+
+    public void setShortExchangeId(String shortExchangeId) {
+        this.shortExchangeId = shortExchangeId;
+    }
+
+    public void setExchangePattern(String exchangePattern) {
+        this.exchangePattern = exchangePattern;
+    }
+
+    public void setProperties(String properties) {
+        this.properties = properties;
+    }
+
+    public void setHeaders(String headers) {
+        this.headers = headers;
+    }
+
+    public void setBody(String body) {
+        this.body = body;
+    }
+
+    public void setBodyType(String bodyType) {
+        this.bodyType = bodyType;
+    }
+
+    public void setOutBody(String outBody) {
+        this.outBody = outBody;
+    }
+
+    public void setOutBodyType(String outBodyType) {
+        this.outBodyType = outBodyType;
+    }
+
+    public void setCausedByException(String causedByException) {
+        this.causedByException = causedByException;
     }
 
     @Override
     public String toString() {
-        return "TraceEventMessage[" + exchangeId + "] to node: " + toNode;
+        return "TraceEventMessage[" + exchangeId + "] on node: " + toNode;
     }
 }

Modified: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/interceptor/TraceEventExchange.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/interceptor/TraceEventExchange.java?rev=734401&r1=734400&r2=734401&view=diff
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/interceptor/TraceEventExchange.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/interceptor/TraceEventExchange.java Wed Jan 14 06:06:19 2009
@@ -26,7 +26,7 @@
  * Represents a trace of an {@link org.apache.camel.Exchange}, intercepted at the given node
  * that occured during routing.
  * <p/>
- * The IN body contains {@link TraceEventMessage} with trace details of the original IN message.
+ * The IN body contains {@link DefaultTraceEventMessage} with trace details of the original IN message.
  */
 public class TraceEventExchange extends DefaultExchange {
     private String nodeId;
@@ -83,6 +83,6 @@
 
     @Override
     public String toString() {
-        return "TraceEventExchange[" + tracedExchange.getExchangeId() + "] on node: " + nodeId;
+        return "TraceEventExchange[" + tracedExchange.getExchangeId() + "] on node id: " + nodeId;
     }
 }

Added: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/interceptor/TraceEventMessage.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/interceptor/TraceEventMessage.java?rev=734401&view=auto
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/interceptor/TraceEventMessage.java (added)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/interceptor/TraceEventMessage.java Wed Jan 14 06:06:19 2009
@@ -0,0 +1,78 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.processor.interceptor;
+
+import java.util.Date;
+
+/**
+ * A trace event message that contains decomposited information about the traced
+ * {@link org.apache.camel.Exchange} at the point of interception. The information is stored as snapshot copies
+ * using String types.
+ */
+public interface TraceEventMessage {
+
+    /**
+     * Gets the timestamp when the interception occured
+     */
+    Date getTimestamp();
+
+    /**
+     * Uri of the endpoint that started the {@link org.apache.camel.Exchange} currently being traced.
+     */
+    String getFromEndpointUri();
+
+    /**
+     * Gets the previous node.
+     * <p/>
+     * Will return <tt>null</tt> if this is the first node, then you can use the from endpoint uri
+     * instread to indicate the start
+     */
+    String getPreviousNode();
+
+    /**
+     * Gets the current node that just have been intercepted and processed
+     * <p/>
+     * Is never null.
+     */
+    String getToNode();
+
+    String getExchangeId();
+
+    /**
+     * Gets the exchange id without the leading hostname
+     */
+    String getShortExchangeId();
+
+    String getExchangePattern();
+
+    String getProperties();
+
+    String getHeaders();
+
+    String getBody();
+
+    String getBodyType();
+
+    String getOutBody();
+
+    String getOutBodyType();
+
+    /**
+     * Gets the caused by exception (ie {@link org.apache.camel.Exchange#getException() Exchange#getException()}.
+     */
+    String getCausedByException();
+}

Propchange: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/interceptor/TraceEventMessage.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/interceptor/TraceEventMessage.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/interceptor/TraceInterceptor.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/interceptor/TraceInterceptor.java?rev=734401&r1=734400&r2=734401&view=diff
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/interceptor/TraceInterceptor.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/interceptor/TraceInterceptor.java Wed Jan 14 06:06:19 2009
@@ -17,6 +17,8 @@
 package org.apache.camel.processor.interceptor;
 
 import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
 
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
@@ -27,6 +29,8 @@
 import org.apache.camel.processor.Logger;
 import org.apache.camel.spi.InterceptStrategy;
 import org.apache.camel.spi.TraceableUnitOfWork;
+import org.apache.camel.util.IntrospectionSupport;
+import org.apache.camel.util.ObjectHelper;
 import org.apache.camel.util.ServiceHelper;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
@@ -38,12 +42,14 @@
  */
 public class TraceInterceptor extends DelegateProcessor implements ExchangeFormatter {
     private static final transient Log LOG = LogFactory.getLog(TraceInterceptor.class);
+    private static final String JPA_TRACE_EVENT_MESSAGE = "org.apache.camel.processor.interceptor.JpaTraceEventMessage";
     private static final String TRACE_EVENT = "CamelTraceEvent";
     private Logger logger;
     private Producer traceEventProducer;
     private final ProcessorType node;
     private final Tracer tracer;
     private TraceFormatter formatter;
+    private Class jpaTraceEventMessageClass;
 
     public TraceInterceptor(ProcessorType node, Processor target, TraceFormatter formatter, Tracer tracer) {
         super(target);
@@ -91,7 +97,6 @@
 
         // okay this is a regular exchange being routed we might need to log and trace
         try {
-
             // before
             if (shouldLog) {
                 logExchange(exchange);
@@ -150,13 +155,43 @@
         if (tracer.getDestinationUri() != null) {
             // create event and add it as a property on the original exchange
             TraceEventExchange event = new TraceEventExchange(exchange);
+            Date timestamp = new Date();
             event.setNodeId(node.getId());
-            event.setTimestamp(new Date());
+            event.setTimestamp(timestamp);
             event.setTracedExchange(exchange);
 
             // create event message to send in body
-            TraceEventMessage msg = new TraceEventMessage(node, exchange);
-            event.getIn().setBody(msg);
+            TraceEventMessage msg = new DefaultTraceEventMessage(timestamp, node, exchange);
+
+            // should we use ordinay or jpa objects
+            if (tracer.isUseJpa()) {
+                LOG.trace("Using class: " + JPA_TRACE_EVENT_MESSAGE + " for tracing event messages");
+
+                // load the jpa event class
+                synchronized (this) {
+                    if (jpaTraceEventMessageClass == null) {
+                        jpaTraceEventMessageClass = ObjectHelper.loadClass(JPA_TRACE_EVENT_MESSAGE);
+                        if (jpaTraceEventMessageClass == null) {
+                            throw new IllegalArgumentException("Cannot find class: " + JPA_TRACE_EVENT_MESSAGE
+                                    + ". Make sure camel-jpa.jar is on the classpath.");
+                        }
+                    }
+                }
+
+                Object jpa = ObjectHelper.newInstance(jpaTraceEventMessageClass);
+
+                // copy options from event to jpa
+                Map options = new HashMap();
+                IntrospectionSupport.getProperties(msg, options, null);
+                IntrospectionSupport.setProperties(jpa, options);
+                // and set the timestamp as its not a String type
+                IntrospectionSupport.setProperty(jpa, "timestamp", msg.getTimestamp());
+
+                event.getIn().setBody(jpa);
+            } else {
+                event.getIn().setBody(msg);
+            }
+
             // marker property to indicate its a tracing event being routed in case
             // new Exchange instances is created during trace routing so we can check
             // for this marker when interceptor also kickins in during routing of trace events

Modified: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/interceptor/Tracer.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/interceptor/Tracer.java?rev=734401&r1=734400&r2=734401&view=diff
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/interceptor/Tracer.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/interceptor/Tracer.java Wed Jan 14 06:06:19 2009
@@ -42,6 +42,7 @@
     private boolean traceExceptions = true;
     private boolean traceOutExchanges;
     private String destinationUri;
+    private boolean useJpa;
 
     /**
      * A helper method to return the Tracer instance for a given {@link CamelContext} if one is enabled
@@ -174,4 +175,18 @@
         this.destinationUri = destinationUri;
     }
 
+    public boolean isUseJpa() {
+        return useJpa;
+    }
+
+    /**
+     * Sets whether we should use a JpaTraceEventMessage instead of
+     * an ordinary {@link org.apache.camel.processor.interceptor.DefaultTraceEventMessage}
+     * <p/>
+     * Use this to allow persistence of trace events into a database using JPA.
+     * This requires camel-jpa in the classpath.
+     */
+    public void setUseJpa(boolean useJpa) {
+        this.useJpa = useJpa;
+    }
 }
\ No newline at end of file

Modified: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/IntrospectionSupport.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/IntrospectionSupport.java?rev=734401&r1=734400&r2=734401&view=diff
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/IntrospectionSupport.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/IntrospectionSupport.java Wed Jan 14 06:06:19 2009
@@ -126,7 +126,7 @@
     public static Map extractProperties(Map properties, String optionPrefix) {
         ObjectHelper.notNull(properties, "properties");
 
-        HashMap rc = new HashMap(properties.size());
+        HashMap rc = new LinkedHashMap(properties.size());
 
         for (Iterator iter = properties.keySet().iterator(); iter.hasNext();) {
             String name = (String)iter.next();
@@ -189,8 +189,10 @@
                     } catch (IllegalArgumentException e) {
                         typeConvertionFailed = e;
                     }
-                    LOG.trace("Setter \"" + setter + "\" with parameter type \""
-                              + setter.getParameterTypes()[0] + "\" could not be used for type conversions of " + value);
+                    if (LOG.isTraceEnabled()) {
+                        LOG.trace("Setter \"" + setter + "\" with parameter type \""
+                                  + setter.getParameterTypes()[0] + "\" could not be used for type conversions of " + value);
+                    }
                 }
             }
             // we did not find a setter method to use, and if we did try to use a type converter then throw

Modified: activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/interceptor/TraceFormatterTest.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/interceptor/TraceFormatterTest.java?rev=734401&r1=734400&r2=734401&view=diff
==============================================================================
--- activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/interceptor/TraceFormatterTest.java (original)
+++ activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/interceptor/TraceFormatterTest.java Wed Jan 14 06:06:19 2009
@@ -102,7 +102,7 @@
         public void process(Exchange exchange) throws Exception {
             // take a snapshot at current time for assertion later
             // after mock assertions in unit test method
-            TraceEventMessage event = exchange.getIn().getBody(TraceEventMessage.class);
+            TraceEventMessage event = exchange.getIn().getBody(DefaultTraceEventMessage.class);
             tracedBodies.add(new String(event.getBody()));
         }
     }

Modified: activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/interceptor/TraceInterceptorDestinationTest.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/interceptor/TraceInterceptorDestinationTest.java?rev=734401&r1=734400&r2=734401&view=diff
==============================================================================
--- activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/interceptor/TraceInterceptorDestinationTest.java (original)
+++ activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/interceptor/TraceInterceptorDestinationTest.java Wed Jan 14 06:06:19 2009
@@ -137,7 +137,7 @@
 
             // take a snapshot at current time for assertion later
             // after mock assertions in unit test method
-            TraceEventMessage msg = exchange.getIn().getBody(TraceEventMessage.class);
+            TraceEventMessage msg = exchange.getIn().getBody(DefaultTraceEventMessage.class);
             tracedBodies.add(msg.getBody());
             if (msg.getHeaders() != null) {
                 tracedHeaders.add(msg.getHeaders());
@@ -150,7 +150,7 @@
 
         public void process(Exchange exchange) throws Exception {
             // here we can transform the message how we like want it
-            TraceEventMessage msg = exchange.getIn().getBody(TraceEventMessage.class);
+            TraceEventMessage msg = exchange.getIn().getBody(DefaultTraceEventMessage.class);
 
             // we want to store it as a CSV with from;to;exchangeId;body
             String s = msg.getFromEndpointUri() + ";" + msg.getToNode() + ";" + msg.getExchangeId() + ";" + msg.getBody();

Modified: activemq/camel/trunk/components/camel-bam/src/main/java/org/apache/camel/bam/model/ActivityDefinition.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-bam/src/main/java/org/apache/camel/bam/model/ActivityDefinition.java?rev=734401&r1=734400&r2=734401&view=diff
==============================================================================
--- activemq/camel/trunk/components/camel-bam/src/main/java/org/apache/camel/bam/model/ActivityDefinition.java (original)
+++ activemq/camel/trunk/components/camel-bam/src/main/java/org/apache/camel/bam/model/ActivityDefinition.java Wed Jan 14 06:06:19 2009
@@ -30,7 +30,7 @@
  */
 @Entity
 @Table(
-    name = "ACTIVITYDEFINITION",
+    name = "CAMEL_ACTIVITYDEFINITION",
     uniqueConstraints = @UniqueConstraint(columnNames = {"name"})
 )
 public class ActivityDefinition extends EntitySupport {

Modified: activemq/camel/trunk/components/camel-bam/src/main/java/org/apache/camel/bam/model/ActivityState.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-bam/src/main/java/org/apache/camel/bam/model/ActivityState.java?rev=734401&r1=734400&r2=734401&view=diff
==============================================================================
--- activemq/camel/trunk/components/camel-bam/src/main/java/org/apache/camel/bam/model/ActivityState.java (original)
+++ activemq/camel/trunk/components/camel-bam/src/main/java/org/apache/camel/bam/model/ActivityState.java Wed Jan 14 06:06:19 2009
@@ -27,6 +27,8 @@
 import javax.persistence.Temporal;
 import javax.persistence.TemporalType;
 import javax.persistence.Transient;
+import javax.persistence.Table;
+import javax.persistence.UniqueConstraint;
 
 import org.apache.camel.bam.processor.ProcessContext;
 import org.apache.camel.bam.rules.ActivityRules;
@@ -40,6 +42,9 @@
  * @version $Revision$
  */
 @Entity
+@Table(
+    name = "CAMEL_ACTIVITYSTATE"
+)
 public class ActivityState extends TemporalEntity {
     private static final transient Log LOG = LogFactory.getLog(ActivityState.class);
     private ProcessInstance processInstance;

Modified: activemq/camel/trunk/components/camel-bam/src/main/java/org/apache/camel/bam/model/ProcessDefinition.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-bam/src/main/java/org/apache/camel/bam/model/ProcessDefinition.java?rev=734401&r1=734400&r2=734401&view=diff
==============================================================================
--- activemq/camel/trunk/components/camel-bam/src/main/java/org/apache/camel/bam/model/ProcessDefinition.java (original)
+++ activemq/camel/trunk/components/camel-bam/src/main/java/org/apache/camel/bam/model/ProcessDefinition.java Wed Jan 14 06:06:19 2009
@@ -35,7 +35,7 @@
  */
 @Entity
 @Table(
-    name = "PROCESSDEFINITION",
+    name = "CAMEL_PROCESSDEFINITION",
     uniqueConstraints = @UniqueConstraint(columnNames = {"name"})
 )
 public class ProcessDefinition extends EntitySupport {

Modified: activemq/camel/trunk/components/camel-bam/src/main/java/org/apache/camel/bam/model/ProcessInstance.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-bam/src/main/java/org/apache/camel/bam/model/ProcessInstance.java?rev=734401&r1=734400&r2=734401&view=diff
==============================================================================
--- activemq/camel/trunk/components/camel-bam/src/main/java/org/apache/camel/bam/model/ProcessInstance.java (original)
+++ activemq/camel/trunk/components/camel-bam/src/main/java/org/apache/camel/bam/model/ProcessInstance.java Wed Jan 14 06:06:19 2009
@@ -29,6 +29,7 @@
 import javax.persistence.Temporal;
 import javax.persistence.TemporalType;
 import javax.persistence.Transient;
+import javax.persistence.Table;
 
 import org.apache.camel.bam.rules.ActivityRules;
 import org.apache.commons.logging.Log;
@@ -40,6 +41,9 @@
  * @version $Revision$
  */
 @Entity
+@Table(
+    name = "CAMEL_PROCESSINSTANCE"
+)
 public class ProcessInstance  {
     private static final transient Log LOG = LogFactory.getLog(ProcessInstance.class);
     private ProcessDefinition processDefinition;

Modified: activemq/camel/trunk/components/camel-jpa/pom.xml
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-jpa/pom.xml?rev=734401&r1=734400&r2=734401&view=diff
==============================================================================
--- activemq/camel/trunk/components/camel-jpa/pom.xml (original)
+++ activemq/camel/trunk/components/camel-jpa/pom.xml Wed Jan 14 06:06:19 2009
@@ -35,7 +35,8 @@
 
   <properties>
     <camel.osgi.export.pkg>org.apache.camel.component.jpa.*,
-      org.apache.camel.processor.idempotent.jpa.*</camel.osgi.export.pkg>
+      org.apache.camel.processor.idempotent.jpa.*
+      org.apache.camel.processor.interceptor.*</camel.osgi.export.pkg>
   </properties>
 
   <dependencies>
@@ -135,7 +136,8 @@
                 <openjpac directory="${basedir}/target/jpa-classes">
                   <classpath refid="cp"/>
                   <fileset dir="${basedir}/target/classes">
-                    <include name="org/apache/camel/processor/**/M*.class"/>
+                    <include name="org/apache/camel/processor/**/MessageProcessed.class"/>
+                    <include name="org/apache/camel/processor/**/JpaTraceEventMessage.class"/>
                   </fileset>
                   <config propertiesFile="${basedir}/src/main/resources/META-INF/persistence.xml"/>
                 </openjpac>

Modified: activemq/camel/trunk/components/camel-jpa/src/main/java/org/apache/camel/processor/idempotent/jpa/MessageProcessed.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-jpa/src/main/java/org/apache/camel/processor/idempotent/jpa/MessageProcessed.java?rev=734401&r1=734400&r2=734401&view=diff
==============================================================================
--- activemq/camel/trunk/components/camel-jpa/src/main/java/org/apache/camel/processor/idempotent/jpa/MessageProcessed.java (original)
+++ activemq/camel/trunk/components/camel-jpa/src/main/java/org/apache/camel/processor/idempotent/jpa/MessageProcessed.java Wed Jan 14 06:06:19 2009
@@ -27,7 +27,7 @@
  */
 @Entity
 @Table(
-    name = "MESSAGEPROCESSED",
+    name = "CAMEL_MESSAGEPROCESSED",
     uniqueConstraints = @UniqueConstraint(columnNames = {"processorName", "messageId"})
 )
 public class MessageProcessed {

Added: activemq/camel/trunk/components/camel-jpa/src/main/java/org/apache/camel/processor/interceptor/JpaTraceEventMessage.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-jpa/src/main/java/org/apache/camel/processor/interceptor/JpaTraceEventMessage.java?rev=734401&view=auto
==============================================================================
--- activemq/camel/trunk/components/camel-jpa/src/main/java/org/apache/camel/processor/interceptor/JpaTraceEventMessage.java (added)
+++ activemq/camel/trunk/components/camel-jpa/src/main/java/org/apache/camel/processor/interceptor/JpaTraceEventMessage.java Wed Jan 14 06:06:19 2009
@@ -0,0 +1,181 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.processor.interceptor;
+
+import java.util.Date;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+/**
+ * A JPA based {@link org.apache.camel.processor.interceptor.TraceEventMessage} that is capable of persisting
+ * trace event into a database.
+ */
+@Entity
+@Table(
+    name = "CAMEL_MESSAGETRACED"
+)
+public class JpaTraceEventMessage implements TraceEventMessage {
+
+    protected Long id;
+    protected Date timestamp;
+    protected String previousNode;
+    protected String fromEndpointUri;
+    protected String toNode;
+    protected String exchangeId;
+    protected String shortExchangeId;
+    protected String exchangePattern;
+    protected String properties;
+    protected String headers;
+    protected String body;
+    protected String bodyType;
+    protected String outBody;
+    protected String outBodyType;
+    protected String causedByException;
+
+    public JpaTraceEventMessage() {
+    }
+
+    @Id
+    @GeneratedValue
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public Date getTimestamp() {
+        return timestamp;
+    }
+
+    public void setTimestamp(Date timestamp) {
+        this.timestamp = timestamp;
+    }
+
+    public String getPreviousNode() {
+        return previousNode;
+    }
+
+    public void setPreviousNode(String previousNode) {
+        this.previousNode = previousNode;
+    }
+
+    public String getFromEndpointUri() {
+        return fromEndpointUri;
+    }
+
+    public void setFromEndpointUri(String fromEndpointUri) {
+        this.fromEndpointUri = fromEndpointUri;
+    }
+
+    public String getToNode() {
+        return toNode;
+    }
+
+    public void setToNode(String toNode) {
+        this.toNode = toNode;
+    }
+
+    public String getExchangeId() {
+        return exchangeId;
+    }
+
+    public void setExchangeId(String exchangeId) {
+        this.exchangeId = exchangeId;
+    }
+
+    public String getShortExchangeId() {
+        return shortExchangeId;
+    }
+
+    public void setShortExchangeId(String shortExchangeId) {
+        this.shortExchangeId = shortExchangeId;
+    }
+
+    public String getExchangePattern() {
+        return exchangePattern;
+    }
+
+    public void setExchangePattern(String exchangePattern) {
+        this.exchangePattern = exchangePattern;
+    }
+
+    public String getProperties() {
+        return properties;
+    }
+
+    public void setProperties(String properties) {
+        this.properties = properties;
+    }
+
+    public String getHeaders() {
+        return headers;
+    }
+
+    public void setHeaders(String headers) {
+        this.headers = headers;
+    }
+
+    public String getBody() {
+        return body;
+    }
+
+    public void setBody(String body) {
+        this.body = body;
+    }
+
+    public String getBodyType() {
+        return bodyType;
+    }
+
+    public void setBodyType(String bodyType) {
+        this.bodyType = bodyType;
+    }
+
+    public String getOutBody() {
+        return outBody;
+    }
+
+    public void setOutBody(String outBody) {
+        this.outBody = outBody;
+    }
+
+    public String getOutBodyType() {
+        return outBodyType;
+    }
+
+    public void setOutBodyType(String outBodyType) {
+        this.outBodyType = outBodyType;
+    }
+
+    public String getCausedByException() {
+        return causedByException;
+    }
+
+    public void setCausedByException(String causedByException) {
+        this.causedByException = causedByException;
+    }
+
+    @Override
+    public String toString() {
+        return "TraceEventMessage[" + exchangeId + "] on node: " + toNode;
+    }
+
+}

Propchange: activemq/camel/trunk/components/camel-jpa/src/main/java/org/apache/camel/processor/interceptor/JpaTraceEventMessage.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: activemq/camel/trunk/components/camel-jpa/src/main/java/org/apache/camel/processor/interceptor/JpaTraceEventMessage.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: activemq/camel/trunk/components/camel-jpa/src/main/resources/META-INF/persistence.xml
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-jpa/src/main/resources/META-INF/persistence.xml?rev=734401&r1=734400&r2=734401&view=diff
==============================================================================
--- activemq/camel/trunk/components/camel-jpa/src/main/resources/META-INF/persistence.xml (original)
+++ activemq/camel/trunk/components/camel-jpa/src/main/resources/META-INF/persistence.xml Wed Jan 14 06:06:19 2009
@@ -20,6 +20,7 @@
 
   <persistence-unit name="camel-jpa" transaction-type="RESOURCE_LOCAL">
       <class>org.apache.camel.processor.idempotent.jpa.MessageProcessed</class>
+      <class>org.apache.camel.processor.interceptor.JpaTraceEventMessage</class>
   </persistence-unit>
   
 </persistence>

Copied: activemq/camel/trunk/components/camel-jpa/src/test/java/org/apache/camel/processor/interceptor/JpaTraceEventMessageTest.java (from r734343, activemq/camel/trunk/components/camel-jpa/src/test/java/org/apache/camel/processor/jpa/JpaIdempotentConsumerTest.java)
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-jpa/src/test/java/org/apache/camel/processor/interceptor/JpaTraceEventMessageTest.java?p2=activemq/camel/trunk/components/camel-jpa/src/test/java/org/apache/camel/processor/interceptor/JpaTraceEventMessageTest.java&p1=activemq/camel/trunk/components/camel-jpa/src/test/java/org/apache/camel/processor/jpa/JpaIdempotentConsumerTest.java&r1=734343&r2=734401&rev=734401&view=diff
==============================================================================
--- activemq/camel/trunk/components/camel-jpa/src/test/java/org/apache/camel/processor/jpa/JpaIdempotentConsumerTest.java (original)
+++ activemq/camel/trunk/components/camel-jpa/src/test/java/org/apache/camel/processor/interceptor/JpaTraceEventMessageTest.java Wed Jan 14 06:06:19 2009
@@ -14,17 +14,16 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.processor.jpa;
+package org.apache.camel.processor.interceptor;
 
 import java.util.List;
 
 import org.apache.camel.CamelContext;
+import org.apache.camel.ContextTestSupport;
 import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.processor.IdempotentConsumerTest;
-import org.apache.camel.processor.idempotent.jpa.MessageProcessed;
+import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.spring.SpringCamelContext;
 import org.apache.camel.spring.SpringRouteBuilder;
-
 import org.springframework.context.ApplicationContext;
 import org.springframework.context.support.ClassPathXmlApplicationContext;
 import org.springframework.orm.jpa.JpaTemplate;
@@ -34,37 +33,56 @@
 import org.springframework.transaction.support.TransactionCallback;
 import org.springframework.transaction.support.TransactionTemplate;
 
-import static org.apache.camel.processor.idempotent.jpa.JpaMessageIdRepository.jpaMessageIdRepository;
-
 /**
  * @version $Revision$
  */
-public class JpaIdempotentConsumerTest extends IdempotentConsumerTest {
-    protected static final String SELECT_ALL_STRING = "select x from " + MessageProcessed.class.getName() + " x where x.processorName = ?1";
-    protected static final String PROCESSOR_NAME = "myProcessorName";
+public class JpaTraceEventMessageTest extends ContextTestSupport {
+    protected static final String SELECT_ALL_STRING = "select x from " + JpaTraceEventMessage.class.getName() + " x";
 
     protected ApplicationContext applicationContext;
     protected JpaTemplate jpaTemplate;
 
+    public void testSendTraceMessage() throws Exception {
+        MockEndpoint mock = getMockEndpoint("mock:result");
+        mock.expectedMessageCount(1);
+
+        template.sendBody("direct:start", "Hello World");
+
+        assertMockEndpointsSatisfied();
+        assertEntityInDB();
+    }
+
     @Override
     protected CamelContext createCamelContext() throws Exception {
-        applicationContext = new ClassPathXmlApplicationContext("org/apache/camel/processor/jpa/spring.xml");
+        applicationContext = new ClassPathXmlApplicationContext("org/apache/camel/processor/interceptor/springJpaTraveEvent.xml");
         cleanupRepository();
         return SpringCamelContext.springCamelContext(applicationContext);
     }
 
     @Override
     protected RouteBuilder createRouteBuilder() {
-        // START SNIPPET: idempotent
         return new SpringRouteBuilder() {
             public void configure() {
-                from("direct:start").idempotentConsumer(
-                        header("messageId"),
-                        jpaMessageIdRepository(bean(JpaTemplate.class), PROCESSOR_NAME)
-                ).to("mock:result");
+                Tracer tracer = new Tracer();
+                tracer.setDestinationUri("jpa://" + JpaTraceEventMessage.class.getName() + "?persistenceUnit=trace");
+                tracer.setUseJpa(true);
+                getContext().addInterceptStrategy(tracer);
+
+                from("direct:start").to("mock:result");
             }
         };
-        // END SNIPPET: idempotent
+    }
+
+    private void assertEntityInDB() throws Exception {
+        jpaTemplate = (JpaTemplate)applicationContext.getBean("jpaTemplate", JpaTemplate.class);
+
+        List list = jpaTemplate.find(SELECT_ALL_STRING);
+        assertEquals(1, list.size());
+        
+        JpaTraceEventMessage db = (JpaTraceEventMessage) list.get(0);
+        assertNotNull(db.getId());
+        assertEquals("direct:start", db.getFromEndpointUri());
+        assertEquals("to(mock:result)", db.getToNode());
     }
 
     protected void cleanupRepository() {
@@ -76,7 +94,7 @@
 
         transactionTemplate.execute(new TransactionCallback() {
             public Object doInTransaction(TransactionStatus arg0) {
-                List list = jpaTemplate.find(SELECT_ALL_STRING, PROCESSOR_NAME);
+                List list = jpaTemplate.find(SELECT_ALL_STRING);
                 for (Object item : list) {
                     jpaTemplate.remove(item);
                 }
@@ -85,4 +103,4 @@
             }
         });
     }
-}
+}
\ No newline at end of file

Propchange: activemq/camel/trunk/components/camel-jpa/src/test/java/org/apache/camel/processor/interceptor/JpaTraceEventMessageTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: activemq/camel/trunk/components/camel-jpa/src/test/java/org/apache/camel/processor/interceptor/JpaTraceEventMessageTest.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Propchange: activemq/camel/trunk/components/camel-jpa/src/test/java/org/apache/camel/processor/interceptor/JpaTraceEventMessageTest.java
------------------------------------------------------------------------------
    svn:mergeinfo = 

Modified: activemq/camel/trunk/components/camel-jpa/src/test/resources/META-INF/persistence.xml
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-jpa/src/test/resources/META-INF/persistence.xml?rev=734401&r1=734400&r2=734401&view=diff
==============================================================================
--- activemq/camel/trunk/components/camel-jpa/src/test/resources/META-INF/persistence.xml (original)
+++ activemq/camel/trunk/components/camel-jpa/src/test/resources/META-INF/persistence.xml Wed Jan 14 06:06:19 2009
@@ -69,4 +69,18 @@
     </properties>
   </persistence-unit>
     <!-- END SNIPPET: e1 -->
+
+    <!-- START SNIPPET: e2 -->
+  <persistence-unit name="trace" transaction-type="RESOURCE_LOCAL">
+    <class>org.apache.camel.processor.interceptor.JpaTraceEventMessage</class>
+
+    <properties>
+      <property name="openjpa.ConnectionURL" value="jdbc:derby:target/trace;create=true"/>
+      <property name="openjpa.ConnectionDriverName" value="org.apache.derby.jdbc.EmbeddedDriver"/>
+      <property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema"/>
+      <property name="openjpa.Log" value="DefaultLevel=WARN, Tool=INFO"/>
+    </properties>
+  </persistence-unit>
+    <!-- END SNIPPET: e2 -->
+
 </persistence>

Added: activemq/camel/trunk/components/camel-jpa/src/test/resources/org/apache/camel/processor/interceptor/springJpaTraveEvent.xml
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-jpa/src/test/resources/org/apache/camel/processor/interceptor/springJpaTraveEvent.xml?rev=734401&view=auto
==============================================================================
--- activemq/camel/trunk/components/camel-jpa/src/test/resources/org/apache/camel/processor/interceptor/springJpaTraveEvent.xml (added)
+++ activemq/camel/trunk/components/camel-jpa/src/test/resources/org/apache/camel/processor/interceptor/springJpaTraveEvent.xml Wed Jan 14 06:06:19 2009
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+  
+  http://www.apache.org/licenses/LICENSE-2.0
+  
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+<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.5.xsd">
+
+    <bean id="transactionTemplate" class="org.springframework.transaction.support.TransactionTemplate">
+        <property name="transactionManager">
+            <bean class="org.springframework.orm.jpa.JpaTransactionManager">
+                <property name="entityManagerFactory" ref="entityManagerFactory"/>
+            </bean>
+        </property>
+    </bean>
+
+    <!-- START SNIPPET: e1 -->
+    <!-- this is standard spring JPA configuration -->
+    <bean id="jpaTemplate" class="org.springframework.orm.jpa.JpaTemplate">
+        <property name="entityManagerFactory" ref="entityManagerFactory"/>
+    </bean>
+
+    <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean">
+        <!-- we use trace as the persitence unit name defined in the persistence.xml file -->
+        <property name="persistenceUnitName" value="trace"/>
+    </bean>
+    <!-- END SNIPPET: e1 -->
+
+</beans>

Propchange: activemq/camel/trunk/components/camel-jpa/src/test/resources/org/apache/camel/processor/interceptor/springJpaTraveEvent.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: activemq/camel/trunk/components/camel-jpa/src/test/resources/org/apache/camel/processor/interceptor/springJpaTraveEvent.xml
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Propchange: activemq/camel/trunk/components/camel-jpa/src/test/resources/org/apache/camel/processor/interceptor/springJpaTraveEvent.xml
------------------------------------------------------------------------------
    svn:mime-type = text/xml