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 >