Hi

Spring Transaction with JMS is bound to the thread and it doesnt
support a batch like commit.

So what you can do is to use a persistent store with the aggregator,
and have a TX from JMS -> AGG
Then you can have a TX from AGG -> Route (* this is not "simulated" TX).

See about HawtDB or the JDBC repo we have. Links in bottom at
http://camel.apache.org/aggregator2

And chapter 8 + 9 of the Camel in Action books cover TX with the aggregator.



On Wed, Feb 23, 2011 at 12:42 PM, xdevroey
<[email protected]> wrote:
>
> Hello,
>
> I am trying to design a Camel route to take messages from an ActiveMQ Topic
> and register them into an Oracle database. The requirements for this route
> are: all messages will be saved in the database as soon as possible (we
> speak about ‘near real time’).
>
> My first idea was to have:
> -       A durable subscriber consuming messages from the ActiveMQ topic (with 
> a
> connection pool).
> -       A processor which format the data to have an Object[] ready for the 
> INSERT
> statement.
> -       An aggregator to group the Object [] into an Object[][].
> -       Send the all thing to a bean which will get a connection to the 
> database
> from a pool (using commond-dbcp), creates a PreparedStatement, fill it using
> the addBatch() method and send the batch to the database (the INSERTS are
> immediately committed). This last point is used to avoid connections
> overloads.
> Which will give in DSL something like:
>
> from("activemq:topic:MY.TOPIC")
>   .processRef("normalizerProc")
>   .aggregate(constant(true),new ObjectArrayAggregationStrategy())
>   .to("bean:sqlBatchSender")
>   .end();
>
> To avoid message losses, I wanted to make the route transactional (JMS), so
> the messages are removed from the ActiveMQ topic only if the route is
> committed.
> I read somewhere in the doc that a JMS transaction is attached to a thread
> (using the Spring JMS transaction manager), my question is then: how will it
> react with the aggregator?
>
> When the activemq endpoint uses a connection pool, will the aggregator
> aggregate messages from all those threads (with one Object[][] resulting
> from the aggregation) or will each thread have its own aggregation (with as
> many Object[][] resulting from the aggregation as there are threads in the
> connection pool) ?
>
> Will each thread of the connection pool be blocked at the aggregator until
> the aggregation completes (and thus the batch is sent to the DB) or not?
>
> Does someone have any idea and/or advices? I am actually working with Camel
> 2.2.0-fuse-02-00 and and ActiveMQ 5.3.1-fuse-02-00 in FUSE/Servicemix.
>
> Many thanks in advance for your help.
>
> Xavier
>
>
> -----
> --
> Xavier DEVROEY
>
> Application Developer
> Atos Worldline SA/NV
> Haachtsesteenweg 1442 Chaussée de Haecht
> B-1130 Brussels, Belgium
> www.atosworldline.be
> --
> View this message in context: 
> http://camel.465427.n5.nabble.com/Transactional-Camel-route-with-ActiveMQ-Topic-and-aggregator-tp3396892p3396892.html
> Sent from the Camel - Users mailing list archive at Nabble.com.
>



-- 
Claus Ibsen
-----------------
FuseSource
Email: [email protected]
Web: http://fusesource.com
Twitter: davsclaus
Blog: http://davsclaus.blogspot.com/
Author of Camel in Action: http://www.manning.com/ibsen/

Reply via email to