This example demonstrates the Tracer. Tracer is a tracing feature build in camel core to log snapshots of Exchanges while they are routed. This allows you to see:
When used Camel will by default log the snapshot at
INFO level. This example demonstrates how to persist trace snapshots using JPA into a database. This allows you to store this information and query them from a SQL prompt, giving you full power to analyze the data.
This requires Camel 2.0, the
camel-jpa component and configuration of the target database.
Camel uses the
org.apache.camel.processor.interceptor.JpaTraceEventMessage JPA @Entity as data model. This class has been enhanced with JPA annotations.
The class has the following properties in the JPA model:
The Exchange exception (if any) dumped as a String including stacktrace.
Unique id of the Exchange.
The Exchange Pattern such as
the URI of the starting consumer the Exchange was created (usually a from in the route).
Primary key that is generated by the database.
The Exchange properties dumped as a
Timestamp when the snapshot was generated. Is the system time of the JMV in which Camel is running.
The table name for persisting trace events is:
The Tracer uses standard JPA configuration for setting the database. In the
META-INF/persistence.xml file we setup the service unit and the database configuration as:
JpaTraceEventMessage as a class in the
persistence.xml file to register our data model:
In this example we use Hibernate JPA and a HSQLDB as database.
README.txt states how to run the example from either ANT or Maven.
Here we show running with Maven:
When the application starts it start:
Select the console where the application should prompt you to enter some words. Try entering:
Camel. The application should respond with a text quote.
You can also enter multiple quotes separate with space, and the response should be the best quote based on the list of words given. See the file
src/main/resources/META-INF/spring/camel-context.xml to give you an idea how it works.
You can enter:
Camel Beer and it should be smart enough to find a quote for the beer
When the program was started a GUI application was started as well. Its a SQL prompt for the database. So try entering:
And it should return the list of trace events in the SQL.
We enter this SQL:
and get the output as the picture below:
The diagram below illustrates the route diagram generated using Visualisation.
We receive an Exchange from the in stream, then its split using the
splitWords method. Then the quote method is invoked before it's aggregated and finally sent to the stream out to be printed in the console.
If we look at the 6 rows from the traced SQL (the first picture) and with the route diagram in mind we can get a better understand how the Exchange was routed.
0-2"was the winner" and is being routed as the aggregated result to the stream out.
In Camel you need to configure it to use JPA for tracing. We do this as by adding a tracer in the
destinationUrito a JPA producer endpoint.
In this example we set the destintation to refer to an endpoint defined in the camel context:
org.apache.camel.processor.interceptor.JpaTraceEventMessage as entity name and the
persistenceUnit as an option. In out example we use tracer.
Then the following is standard Spring JPA configuration:
persistenceUnitName to the same unit name we defined in
persistence.xml, such as
tracer as we are using in this example.
And if you are wondering how the Camel route is defined then its here: