[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
Re: Camel CDI with non JTA transaction manager?
> On 19 Oct 2018, at 12:33, Gary Hodgson <gary.s.hodgson@xxxxxxxxx> wrote:
>
> Hi Antonin,
>
> Thanks for the response. I'll revisit my previous attempts at integrating standalone JTA - I believe I got a working example going, but had to put it on hold during the testing. If I get a sufficiently good example going then I'll post a link here in case it's useful for others.
That’d be awesome. I think having an example for Camel CDI / JMS (using Spring PlatformTransactionManager) / JTA / Java SE would be very valuable.
> Cheers,
> Gary
>
> From: Antonin Stefanutti <>
> To: "users@xxxxxxxxxxxxxxxx" <users@xxxxxxxxxxxxxxxx>
> Cc:
> Bcc:
> Date: Thu, 18 Oct 2018 09:45:42 +0000
> Subject: Re: Camel CDI with non JTA transaction manager?
> Hi Gary,
>
> Your understanding is correct. Transaction support in Camel CDI depends on JTA.
>
> That being said, it is possible to use it in a Java SE environment by adding JTA API
> and a transaction manager, as Narayana or Atomikos, in the classpath.
>
> Then, you can produce Spring PlatformTransactionManager like:
>
> @Produces
> @Singleton
> @Named("jtaTransactionManager")
> PlatformTransactionManager createTransactionManager(TransactionManager transactionManager, UserTransaction userTransaction) {
> JtaTransactionManager jtaTransactionManager = new JtaTransactionManager();
> jtaTransactionManager.setUserTransaction(userTransaction);
> jtaTransactionManager.setTransactionManager(transactionManager);
> jtaTransactionManager.afterPropertiesSet();
> return jtaTransactionManager;
> }
>
> And the JMS component:
>
> @Produces
> @Named("jms-input")
> @ApplicationScoped
> Component produceInputJmsComponent(@ConfigProperty(name = "jms.input.consumers") String inputQueueConcurrentConsumers) {
> CachingConnectionFactory cachingConnectionFactory = new CachingConnectionFactory(connectionFactory);
> cachingConnectionFactory.setSessionCacheSize(Integer.parseInt(consumers));
> return JmsComponent.jmsComponent(cachingConnectionFactory);
>
> }
>
> void disposeInputJmsComponent(@Disposes @Named("jms-input") Component component) {
> ((SingleConnectionFactory) component.getConfiguration().getConnectionFactory()).destroy();
> }
>
> So that, you can write in your Camel routes:
>
> from("jms-input:queue:{{jms.input.destination}}?transacted=true&concurrentConsumers={{jms.input.consumers}}&transactionManager=#jtaTransactionManager&cacheLevelName={{jms.input.consumers.cacheLevel}}")
>
> I’ve already seen it implemented successfully.
>
> Antonin
>
> > On 18 Oct 2018, at 10:43, Gary Hodgson <> wrote:
> >
> > Hi,
> >
> > Is there a way to use JMSTransactionManager with cdi camel routes, i.e. not
> > JTA? It seems from the documentation and from googling that only JTA is
> > supported, and if this is the case then that entails camel-cdi is only
> > usable in JavaEE environments (when transactions are to be used at least).
> >
> > We're using camel routes with CDI in a JavaSE environment but would like to
> > utilise the Transactional Client EIP rather than relying on exception
> > handlers.
> >
> > Any hints would be appreciated,
> > Gary