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