queueQuickFixInEndpoint is a JMS queue. I will add the ref to the transacted and retest
Question : I suppose that rollback will not occur if by example JMS and DB (=Hibernate) does not use the same TransactionManager and don't use this spring class together : org.springframework.transaction.PlatformTransactionManager Regards, Charles Moulliard Senior Enterprise Architect Apache Camel Committer ***************************** blog : http://cmoulliard.blogspot.com On Thu, Jul 2, 2009 at 4:46 PM, Claus Ibsen <claus.ib...@gmail.com> wrote: > Transacted also have a ref attribute > > <transacted ref="required"/> > > Is queueQuickFixInEndpoint a JMS queue? > You need to use a TX manager that can do both JMS and DB. > > > > On Thu, Jul 2, 2009 at 4:31 PM, Charles Moulliard<cmoulli...@gmail.com> > wrote: > > I have been able to solve my problem by adding the following bean > definition > > : > > > > <bean id="required" > > class="org.apache.camel.spring.spi.SpringTransactionPolicy"> > > <property name="transactionManager"> > > <osgi:reference > > interface="org.springframework.transaction.PlatformTransactionManager"/> > > </property> > > </bean> > > > > and in the route > > > > <camel:route> > > <camel:from ref="queueQuickFixInEndpoint" /> > > <camel:convertBodyTo type="quickfix.Message" /> > > <camel:transacted/> > > <camel:policy ref="required" /> > > <camel:bean ref="serviceHelper" method="createNotification" /> > > <camel:bean ref="serviceHelper" method="generateError" /> > > <camel:to ref="directNotificationEndpoint" /> > > </camel:route> > > > > Unfortunately, the rollback does not occur in the DB and 6 records have > been > > created by the method createNotification when error has been raised by > the > > method generateError. > > > > What is missing ? > > > > Charles Moulliard > > Senior Enterprise Architect > > Apache Camel Committer > > > > ***************************** > > blog : http://cmoulliard.blogspot.com > > > > > > On Thu, Jul 2, 2009 at 4:19 PM, Charles Moulliard <cmoulli...@gmail.com > >wrote: > > > >> When I compare the example : JMSTransactionalClientRollbackTest.xml > >> > >> <!-- START SNIPPET: e1 --> > >> <!-- setup JMS connection factory --> > >> <bean id="jmsConnectionFactory" > >> class="org.apache.activemq.ActiveMQConnectionFactory"> > >> <property name="brokerURL" > >> value="vm://localhost?broker.persistent=false&broker.useJmx=false"/> > >> </bean> > >> > >> <!-- setup spring jms TX manager --> > >> <bean id="jmsTransactionManager" > >> class="org.springframework.jms.connection.JmsTransactionManager"> > >> <property name="connectionFactory" ref="jmsConnectionFactory"/> > >> </bean> > >> > >> <!-- define our activemq component --> > >> <bean id="activemq" > >> class="org.apache.activemq.camel.component.ActiveMQComponent"> > >> <property name="connectionFactory" ref="jmsConnectionFactory"/> > >> <!-- define the jms consumer/producer as transacted --> > >> <property name="transacted" value="true"/> > >> <!-- setup the transaction manager to use --> > >> <!-- if not provided then Camel will automatic use a > >> JmsTransactionManager, however if you > >> for instance use a JTA transaction manager then you must > >> configure it --> > >> <property name="transactionManager" > ref="jmsTransactionManager"/> > >> </bean> > >> <!-- END SNIPPET: e1 --> > >> > >> <!-- START SNIPPET: e2 --> > >> <camelContext xmlns="http://camel.apache.org/schema/spring"> > >> <route> > >> <!-- 1: from the jms queue --> > >> <from uri="activemq:queue:okay"/> > >> <!-- 2: mark this route as transacted --> > >> <transacted/> > >> <!-- 3: call our business logic that is myProcessor --> > >> <process ref="myProcessor"/> > >> <!-- 4: if success then send it to the mock --> > >> <to uri="mock:result"/> > >> </route> > >> </camelContext> > >> > >> with mine. > >> > >> What is different concerns the TransactionManager used. > >> > >> In the example, this is the Spring one: > >> > >> <!-- setup spring jms TX manager --> > >> <bean id="jmsTransactionManager" > >> class="org.springframework.jms.connection.JmsTransactionManager"> > >> <property name="connectionFactory" ref="jmsConnectionFactory"/> > >> </bean> > >> > >> and in my case, ActiveMQ is configured to use Geronimo Transaction > Manager > >> bundle (which in fact uses spring Transaction manager : > >> org.springframework.transaction.jta.JtaTransactionManager;) > >> > >> I suppose that in the example, the policy is defined by default by > spring > >> when instantiating the class : > >> org.springframework.jms.connection.JmsTransactionManager > >> > >> Is it possible to do the same using a JtaTransaction manager ? > >> > >> Regards, > >> > >> Charles Moulliard > >> Senior Enterprise Architect > >> Apache Camel Committer > >> > >> ***************************** > >> blog : http://cmoulliard.blogspot.com > >> > >> > >> On Thu, Jul 2, 2009 at 3:57 PM, Claus Ibsen <claus.ib...@gmail.com> > wrote: > >> > >>> Hi > >>> > >>> Yeah you need to add all the spring transaction stuff. > >>> > >>> > >>> On Thu, Jul 2, 2009 at 3:47 PM, Charles Moulliard<cmoulli...@gmail.com > > > >>> wrote: > >>> > Camel generates the following error with my route : > >>> > > >>> > Route > >>> > > >>> > <camel:route> > >>> > <camel:from ref="queueQuickFixInEndpoint" /> > >>> > <camel:convertBodyTo type="quickfix.Message" /> > >>> > <camel:transacted/> > >>> > <camel:bean ref="serviceHelper" > method="createNotification" > >>> /> > >>> > <camel:bean ref="serviceHelper" method="generateError" /> > >>> > <camel:to ref="directNotificationEndpoint" /> > >>> > </camel:route> > >>> > > >>> > It seems that policy must be defined but in the example here it is > not > >>> > mentioned : http://camel.apache.org/transactional-client.html > >>> > > >>> > Error : > >>> > > >>> > 15:43:07,838 | ERROR | xtenderThread-30 | ContextLoaderListener > >>> | > >>> > BundleApplicationContextListener 50 | Application context refresh > >>> failed > >>> > (OsgiBundleXmlApplicationContext(bundle=com.xpectis.x3s.x3s-core, > >>> > config=osgibundle:/META-INF/spring/*.xml)) > >>> > org.apache.camel.RuntimeCamelException: > >>> java.lang.IllegalArgumentException: > >>> > policy must be specified on: Transacted[ref: null] > >>> > at > >>> > > >>> > org.apache.camel.util.ObjectHelper.wrapRuntimeCamelException(ObjectHelper.java:986) > >>> > at > >>> > > >>> > org.apache.camel.spring.SpringCamelContext.onApplicationEvent(SpringCamelContext.java:121) > >>> > at > >>> > > >>> > org.apache.camel.spring.CamelContextFactoryBean.onApplicationEvent(CamelContextFactoryBean.java:465) > >>> > at > >>> > > >>> > org.springframework.context.event.SimpleApplicationEventMulticaster$1.run(SimpleApplicationEventMulticaster.java:78) > >>> > at > >>> > > >>> > org.springframework.core.task.SyncTaskExecutor.execute(SyncTaskExecutor.java:49) > >>> > at > >>> > > >>> > org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:76) > >>> > at > >>> > > >>> > org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:274) > >>> > at > >>> > > >>> > org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:736) > >>> > at > >>> > > >>> > org.springframework.osgi.context.support.AbstractOsgiBundleApplicationContext.finishRefresh(AbstractOsgiBundleApplicationContext.java:235) > >>> > at > >>> > > >>> > org.springframework.osgi.context.support.AbstractDelegatedExecutionApplicationContext$4.run(AbstractDelegatedExecutionApplicationContext.java:358) > >>> > at > >>> > > >>> > org.springframework.osgi.util.internal.PrivilegedUtils.executeWithCustomTCCL(PrivilegedUtils.java:85) > >>> > at > >>> > > >>> > org.springframework.osgi.context.support.AbstractDelegatedExecutionApplicationContext.completeRefresh(AbstractDelegatedExecutionApplicationContext.java:320) > >>> > at > >>> > > >>> > org.springframework.osgi.extender.internal.dependencies.startup.DependencyWaiterApplicationContextExecutor$CompleteRefreshTask.run(DependencyWaiterApplicationContextExecutor.java:136) > >>> > at java.lang.Thread.run(Thread.java:619) > >>> > Caused by: java.lang.IllegalArgumentException: policy must be > specified > >>> on: > >>> > Transacted[ref: null] > >>> > at > org.apache.camel.util.ObjectHelper.notNull(ObjectHelper.java:258) > >>> > at > >>> > > >>> > org.apache.camel.model.TransactedDefinition.createProcessor(TransactedDefinition.java:129) > >>> > at > >>> > > >>> > org.apache.camel.model.ProcessorDefinition.makeProcessor(ProcessorDefinition.java:226) > >>> > at > >>> > > >>> > org.apache.camel.model.ProcessorDefinition.addRoutes(ProcessorDefinition.java:111) > >>> > at > >>> > > >>> > org.apache.camel.model.RouteDefinition.addRoutes(RouteDefinition.java:294) > >>> > at > >>> > > >>> > org.apache.camel.model.RouteDefinition.addRoutes(RouteDefinition.java:120) > >>> > at > >>> > > >>> > org.apache.camel.impl.DefaultCamelContext.startRoute(DefaultCamelContext.java:552) > >>> > at > >>> > > >>> > org.apache.camel.impl.DefaultCamelContext.startRouteDefinitions(DefaultCamelContext.java:969) > >>> > at > >>> > > >>> > org.apache.camel.impl.DefaultCamelContext.doStart(DefaultCamelContext.java:946) > >>> > at > >>> > > >>> > org.apache.camel.spring.SpringCamelContext.maybeDoStart(SpringCamelContext.java:165) > >>> > at > >>> > > >>> > org.apache.camel.spring.SpringCamelContext.doStart(SpringCamelContext.java:160) > >>> > at > org.apache.camel.impl.ServiceSupport.start(ServiceSupport.java:52) > >>> > at > >>> > > >>> > org.apache.camel.impl.DefaultCamelContext.start(DefaultCamelContext.java:863) > >>> > at > >>> > > >>> > org.apache.camel.spring.SpringCamelContext.maybeStart(SpringCamelContext.java:99) > >>> > at > >>> > > >>> > org.apache.camel.spring.SpringCamelContext.onApplicationEvent(SpringCamelContext.java:119) > >>> > Charles Moulliard > >>> > Senior Enterprise Architect > >>> > Apache Camel Committer > >>> > > >>> > ***************************** > >>> > blog : http://cmoulliard.blogspot.com > >>> > > >>> > >>> > >>> > >>> -- > >>> Claus Ibsen > >>> Apache Camel Committer > >>> > >>> Open Source Integration: http://fusesource.com > >>> Blog: http://davsclaus.blogspot.com/ > >>> Twitter: http://twitter.com/davsclaus > >>> > >> > >> > > > > > > -- > Claus Ibsen > Apache Camel Committer > > Open Source Integration: http://fusesource.com > Blog: http://davsclaus.blogspot.com/ > Twitter: http://twitter.com/davsclaus >