In debug we see more info : * 1) Creation has been initiated by TransactionManager* *15:31:52,484 | DEBUG | tenerContainer-2 | JtaTransactionManager | stractPlatformTransactionManager 371 | Creating new transaction with name [null]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT* 15:31:52,531 | DEBUG | 9: FileComponent | OsgiPackageScanClassResolver | .DefaultPackageScanClassResolver 102 | Found: [class org.apache.activemq.camel.converter.ActiveMQConverter, class org.apache.activemq.camel.converter.ActiveMQMessageConverter] 15:31:52,531 | DEBUG | 9: FileComponent | sgiAnnotationTypeConverterLoader | sgiAnnotationTypeConverterLoader 45 | Loading converter class: org.apache.activemq.camel.converter.ActiveMQConverter 15:31:52,531 | DEBUG | 9: FileComponent | sgiAnnotationTypeConverterLoader | sgiAnnotationTypeConverterLoader 45 | Loading converter class: org.apache.activemq.camel.converter.ActiveMQMessageConverter 15:31:52,546 | DEBUG | 9: FileComponent | ServiceHelper | ctis.x3s.core.util.ServiceHelper 80 | >> Header message Type : 'OINP' 15:31:52,546 | DEBUG | 9: FileComponent | ServiceHelper | ctis.x3s.core.util.ServiceHelper 81 | >> Header CamelFileNameOnly : ' OINP-dummy.txt' 15:31:52,546 | DEBUG | 9: FileComponent | ServiceHelper | ctis.x3s.core.util.ServiceHelper 82 | >> Body : PVI_ID, ORG_ID, MSG_SEN_CPY_ID, AGT_ID, DEA_CUR_ID, MSG_TGT_CPY_ID, PVI_PRD_TP, FND_IDF_TP, FND_ID, ORD_DIR_CD, ORG_SEN_TS, ORD_UNT_NB, ORD_CSH_AM 11111,22222,33333,AGENCY23,EUR,44444,PRODUCT2,4,LU1234567890,1,20080107-14:02:09,10,1287.44 99999,88888,77777,AGENCY99,EUR,11111,PRODUCT3,4,LU9874567899,2,20080116-14:02:09,10,1287.44 15:31:52,546 | DEBUG | 9: FileComponent | JtaTransactionManager | stractPlatformTransactionManager 469 | Participating in existing transaction 15:31:52,546 | DEBUG | 9: FileComponent | SessionFactoryUtils | m.hibernate3.SessionFactoryUtils 318 | Opening Hibernate Session 15:31:52,546 | DEBUG | 9: FileComponent | SessionImpl | org.hibernate.impl.SessionImpl 247 | opened session at timestamp: 12466279125 15:31:52,546 | DEBUG | 9: FileComponent | SessionFactoryUtils | m.hibernate3.SessionFactoryUtils 326 | Registering Spring transaction synchronization for new Hibernate Session 15:31:52,546 | DEBUG | 9: FileComponent | AbstractSaveEventListener | nt.def.AbstractSaveEventListener 320 | executing identity-insert immediately 15:31:52,546 | DEBUG | 9: FileComponent | AbstractBatcher | g.hibernate.jdbc.AbstractBatcher 410 | about to open PreparedStatement (open PreparedStatements: 0, globally: 0) 15:31:52,546 | DEBUG | 9: FileComponent | ConnectionManager | hibernate.jdbc.ConnectionManager 444 | opening JDBC connection 15:31:52,546 | DEBUG | 9: FileComponent | SQL | ate.jdbc.util.SQLStatementLogger 111 | insert into x3stst.REQUEST (FIL_NM, REQ_STU, BODY_TX, REQ_TYP, CRT_USR_NM, CRT_TS, LUP_USR_NM, LUP_TS) values (?, ?, ?, ?, ?, ?, ?, ?) 15:31:52,578 | DEBUG | 9: FileComponent | IdentifierGeneratorFactory | te.id.IdentifierGeneratorFactory 95 | Natively generated identity: 717 15:31:52,578 | DEBUG | 9: FileComponent | AbstractBatcher | g.hibernate.jdbc.AbstractBatcher 418 | about to close PreparedStatement (open PreparedStatements: 1, globally: 1) 15:31:52,578 | DEBUG | 9: FileComponent | BeanProcessor | mel.component.bean.BeanProcessor 147 | Setting bean invocation result on the IN message: com.xpectis.x3s.platform.model.requ...@b16f33 15:31:52,578 | INFO | 9: FileComponent | TraceInterceptor | rg.apache.camel.processor.Logger 88 | ID-dell-charles-3882-1246606155984-0-603 >>> ref: PROPAGATION_REQUIRED --> ref: PROPAGATION_REQUIRED, Pattern:InOnly, Headers:{CamelFileNameOnly=OINP-dummy.txt, CamelFileRelativePath=d:\temp\data\oinp\OINP-dummy.txt, CamelFileLastModified=Tue Jun 16 14:50:55 CEST 2009, CamelFileAbsolutePath=d:\temp\data\oinp\OINP-dummy.txt, origin=file, CamelBeanMultiParameterArray=false, CamelBeanMethodName=null, messageType=OINP, CamelFileName=OINP-dummy.txt, CamelFileLength=332, CamelFilePath=d:\temp\data\oinp\OINP-dummy.txt, CamelFileParent=d:\temp\data\oinp, CamelFileAbsolute=true}, BodyType:com.xpectis.x3s.platform.model.Request, Body:com.xpectis.x3s.platform.model.requ...@b16f33 15:31:52,578 | DEBUG | 9: FileComponent | DefaultListableBeanFactory | tory.support.AbstractBeanFactory 214 | Returning cached instance of singleton bean 'serviceHelper' 15:31:52,593 | INFO | 9: FileComponent | TraceInterceptor | rg.apache.camel.processor.Logger 166 | ID-dell-charles-3882-1246606155984-0-603 >>> ref: PROPAGATION_REQUIRED --> ref: PROPAGATION_REQUIRED, Pattern:InOnly, Headers:{CamelFileNameOnly=OINP-dummy.txt, CamelFileRelativePath=d:\temp\data\oinp\OINP-dummy.txt, CamelFileLastModified=Tue Jun 16 14:50:55 CEST 2009, CamelFileAbsolutePath=d:\temp\data\oinp\OINP-dummy.txt, origin=file, CamelBeanMultiParameterArray=false, CamelBeanMethodName=null, messageType=OINP, CamelFileName=OINP-dummy.txt, CamelFileLength=332, CamelFilePath=d:\temp\data\oinp\OINP-dummy.txt, CamelFileParent=d:\temp\data\oinp, CamelFileAbsolute=true}, BodyType:com.xpectis.x3s.platform.model.Request, Body:com.xpectis.x3s.platform.model.requ...@b16f33, Exception: java.lang.IllegalArgumentException: Generate error to test rollback 15:31:52,593 | DEBUG | 9: FileComponent | Pipeline | .apache.camel.processor.Pipeline 95 | Message exchange has failed so breaking out of pipeline: Exchange[GenericFileMessage with body: com.xpectis.x3s.platform.model.requ...@b16f33] exception: java.lang.IllegalArgumentException: Generate error to test rollback 15:31:52,593 | DEBUG | 9: FileComponent | TransactionErrorHandler | rg.apache.camel.processor.Logger 197 | Failed delivery for exchangeId: ID-dell-charles-3882-1246606155984-0-603. On delivery attempt: 0 caught: java.lang.IllegalArgumentException: Generate error to test rollback 15:31:52,593 | DEBUG | 9: FileComponent | TransactionErrorHandler | processor.RedeliveryErrorHandler 357 | This exchange is not handled so its marked as failed: Exchange[GenericFileMessage with body: com.xpectis.x3s.platform.model.requ...@b16f33] * 2) Transaction is setted to rollbackOnly * *15:31:52,593 | DEBUG | 9: FileComponent | TransactionErrorHandler | ng.spi.TransactionErrorHandler$1 127 | Setting transaction to rollbackOnly due to exception being thrown: java.lang.IllegalArgumentException: Generate error to test rollback 15:31:52,593 | DEBUG | 9: FileComponent | TransactionTemplate | tion.support.TransactionTemplate 152 | Initiating transaction rollback on application exception org.apache.camel.spring.spi.TransactedRuntimeCamelException: java.lang.IllegalArgumentException: Generate error to test rollback* at org.apache.camel.spring.spi.TransactionErrorHandler.wrapTransactedRuntimeException(TransactionErrorHandler.java:170) at org.apache.camel.spring.spi.TransactionErrorHandler$1.doInTransactionWithoutResult(TransactionErrorHandler.java:121) at org.springframework.transaction.support.TransactionCallbackWithoutResult.doInTransaction(TransactionCallbackWithoutResult.java:33) at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:128) at org.apache.camel.spring.spi.TransactionErrorHandler.process(TransactionErrorHandler.java:86) at org.apache.camel.processor.interceptor.StreamCachingInterceptor.process(StreamCachingInterceptor.java:52) at org.apache.camel.processor.DelegateProcessor.processNext(DelegateProcessor.java:53) at org.apache.camel.processor.DelegateProcessor.proceed(DelegateProcessor.java:82) at org.apache.camel.processor.interceptor.TraceInterceptor.process(TraceInterceptor.java:148) at org.apache.camel.processor.RedeliveryErrorHandler.processExchange(RedeliveryErrorHandler.java:189) at org.apache.camel.processor.RedeliveryErrorHandler.processErrorHandler(RedeliveryErrorHandler.java:158) at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:91) at org.apache.camel.processor.DefaultErrorHandler.process(DefaultErrorHandler.java:49) at org.apache.camel.processor.DefaultChannel.process(DefaultChannel.java:148) at org.apache.camel.processor.UnitOfWorkProcessor.processNext(UnitOfWorkProcessor.java:70) at org.apache.camel.processor.DelegateProcessor.process(DelegateProcessor.java:48) at org.apache.camel.component.direct.DirectProducer.process(DirectProducer.java:45) at org.apache.camel.processor.SendProcessor$1.doInProducer(SendProcessor.java:65) at org.apache.camel.processor.SendProcessor$1.doInProducer(SendProcessor.java:62) at org.apache.camel.impl.ProducerCache.doInProducer(ProducerCache.java:142) at org.apache.camel.processor.SendProcessor.process(SendProcessor.java:62) at org.apache.camel.processor.interceptor.StreamCachingInterceptor.process(StreamCachingInterceptor.java:52) at org.apache.camel.processor.DelegateProcessor.processNext(DelegateProcessor.java:53) at org.apache.camel.processor.DelegateProcessor.proceed(DelegateProcessor.java:82) at org.apache.camel.processor.interceptor.TraceInterceptor.process(TraceInterceptor.java:148) at org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:61) at org.apache.camel.processor.RedeliveryErrorHandler.processExchange(RedeliveryErrorHandler.java:189) at org.apache.camel.processor.RedeliveryErrorHandler.processErrorHandler(RedeliveryErrorHandler.java:158) at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:91) at org.apache.camel.processor.DefaultErrorHandler.process(DefaultErrorHandler.java:49) at org.apache.camel.processor.DefaultChannel.process(DefaultChannel.java:148) at org.apache.camel.processor.Pipeline.process(Pipeline.java:73) at org.apache.camel.processor.UnitOfWorkProcessor.processNext(UnitOfWorkProcessor.java:54) at org.apache.camel.processor.DelegateProcessor.process(DelegateProcessor.java:48) at org.apache.camel.component.file.GenericFileConsumer.processExchange(GenericFileConsumer.java:198) at org.apache.camel.component.file.GenericFileConsumer.processBatch(GenericFileConsumer.java:122) at org.apache.camel.component.file.GenericFileConsumer.poll(GenericFileConsumer.java:95) at org.apache.camel.impl.ScheduledPollConsumer.run(ScheduledPollConsumer.java:98) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441) at java.util.concurrent.FutureTask$Sync.innerRunAndReset(FutureTask.java:317) at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:150) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$101(ScheduledThreadPoolExecutor.java:98) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.runPeriodic(ScheduledThreadPoolExecutor.java:181) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:205) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) at java.lang.Thread.run(Thread.java:619) Caused by: java.lang.IllegalArgumentException: Generate error to test rollback at com.xpectis.x3s.core.util.ServiceHelper.generateError(ServiceHelper.java:734) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.apache.camel.component.bean.MethodInfo.invoke(MethodInfo.java:193) at org.apache.camel.component.bean.MethodInfo$1.proceed(MethodInfo.java:115) at org.apache.camel.component.bean.BeanProcessor.process(BeanProcessor.java:118) at org.apache.camel.processor.interceptor.StreamCachingInterceptor.process(StreamCachingInterceptor.java:52) at org.apache.camel.processor.DelegateProcessor.processNext(DelegateProcessor.java:53) at org.apache.camel.processor.DelegateProcessor.proceed(DelegateProcessor.java:82) at org.apache.camel.processor.interceptor.TraceInterceptor.process(TraceInterceptor.java:148) at org.apache.camel.processor.RedeliveryErrorHandler.processExchange(RedeliveryErrorHandler.java:189) at org.apache.camel.processor.RedeliveryErrorHandler.processErrorHandler(RedeliveryErrorHandler.java:158) at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:91) at org.apache.camel.processor.DefaultErrorHandler.process(DefaultErrorHandler.java:49) at org.apache.camel.processor.DefaultChannel.process(DefaultChannel.java:148) at org.apache.camel.processor.Pipeline.process(Pipeline.java:73) at org.apache.camel.processor.RedeliveryErrorHandler.processExchange(RedeliveryErrorHandler.java:189) at org.apache.camel.processor.RedeliveryErrorHandler.processErrorHandler(RedeliveryErrorHandler.java:158) at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:91) at org.apache.camel.spring.spi.TransactionErrorHandler.access$101(TransactionErrorHandler.java:41) at org.apache.camel.spring.spi.TransactionErrorHandler$1.doInTransactionWithoutResult(TransactionErrorHandler.java:114) ... 45 more
*3) Transaction is completed* *15:31:52,609 | DEBUG | 9: FileComponent | SessionFactoryUtils | m.hibernate3.SessionFactoryUtils 789 | Closing Hibernate Session 15:31:52,609 | DEBUG | 9: FileComponent | ConnectionManager | hibernate.jdbc.ConnectionManager 464 | releasing JDBC connection [ (open PreparedStatements: 0, globally: 0) (open ResultSets: 0, globally: 0)] 15:31:52,609 | DEBUG | 9: FileComponent | ConnectionManager | hibernate.jdbc.ConnectionManager 325 | transaction completed on session with on_close connection release mode; be sure to close the session to release JDBC resources!* *4) Transaction rollbacke initiated* *15:31:52,609 | DEBUG | 9: FileComponent | JtaTransactionManager | stractPlatformTransactionManager 821 | Initiating transaction rollback* 15:31:52,609 | INFO | 9: FileComponent | TraceInterceptor | rg.apache.camel.processor.Logger 166 | ID-dell-charles-3882-1246606155984-0-603 >>> ref: PROPAGATION_REQUIRED --> ref: PROPAGATION_REQUIRED, Pattern:InOnly, Headers:{CamelFileNameOnly=OINP-dummy.txt, CamelFileLastModified=Tue Jun 16 14:50:55 CEST 2009, CamelFileRelativePath=d:\temp\data\oinp\OINP-dummy.txt, CamelFileAbsolutePath=d:\temp\data\oinp\OINP-dummy.txt, origin=file, CamelBeanMultiParameterArray=false, CamelRedelivered=false, messageType=OINP, CamelBeanMethodName=null, CamelFileLength=332, CamelFileName=OINP-dummy.txt, CamelFilePath=d:\temp\data\oinp\OINP-dummy.txt, CamelFileParent=d:\temp\data\oinp, CamelRedeliveryCounter=0, CamelFileAbsolute=true}, BodyType:com.xpectis.x3s.platform.model.Request, Body:com.xpectis.x3s.platform.model.requ...@b16f33, Exception:java.lang.IllegalArgumentException: Generate error to test rollback, Exception: org.apache.camel.spring.spi.TransactedRuntimeCamelException: java.lang.IllegalArgumentException: Generate error to test rollback 15:31:52,609 | DEBUG | 9: FileComponent | Pipeline | .apache.camel.processor.Pipeline 95 | Message exchange has failed so breaking out of pipeline: Exchange[GenericFileMessage with body: com.xpectis.x3s.platform.model.requ...@b16f33] exception: org.apache.camel.spring.spi.TransactedRuntimeCamelException: java.lang.IllegalArgumentException: Generate error to test rollback 15:31:52,609 | DEBUG | 9: FileComponent | GenericFileOnCompletion | ent.file.GenericFileOnCompletion 75 | Done processing file: GenericFile[d:\temp\data\oinp\OINP-dummy.txt] using exchange: Exchange[GenericFileMessage with body: com.xpectis.x3s.platform.model.requ...@b16f33] 15:31:52,609 | ERROR | 9: FileComponent | GenericFileOnCompletion | rg.apache.camel.processor.Logger 248 | java.lang.IllegalArgumentException: Generate error to test rollback org.apache.camel.spring.spi.TransactedRuntimeCamelException: java.lang.IllegalArgumentException: Generate error to test rollback at org.apache.camel.spring.spi.TransactionErrorHandler.wrapTransactedRuntimeException(TransactionErrorHandler.java:170) at org.apache.camel.spring.spi.TransactionErrorHandler$1.doInTransactionWithoutResult(TransactionErrorHandler.java:121) at org.springframework.transaction.support.TransactionCallbackWithoutResult.doInTransaction(TransactionCallbackWithoutResult.java:33) at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:128) at org.apache.camel.spring.spi.TransactionErrorHandler.process(TransactionErrorHandler.java:86) at org.apache.camel.processor.interceptor.StreamCachingInterceptor.process(StreamCachingInterceptor.java:52) at org.apache.camel.processor.DelegateProcessor.processNext(DelegateProcessor.java:53) at org.apache.camel.processor.DelegateProcessor.proceed(DelegateProcessor.java:82) at org.apache.camel.processor.interceptor.TraceInterceptor.process(TraceInterceptor.java:148) at org.apache.camel.processor.RedeliveryErrorHandler.processExchange(RedeliveryErrorHandler.java:189) at org.apache.camel.processor.RedeliveryErrorHandler.processErrorHandler(RedeliveryErrorHandler.java:158) at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:91) at org.apache.camel.processor.DefaultErrorHandler.process(DefaultErrorHandler.java:49) at org.apache.camel.processor.DefaultChannel.process(DefaultChannel.java:148) at org.apache.camel.processor.UnitOfWorkProcessor.processNext(UnitOfWorkProcessor.java:70) at org.apache.camel.processor.DelegateProcessor.process(DelegateProcessor.java:48) at org.apache.camel.component.direct.DirectProducer.process(DirectProducer.java:45) at org.apache.camel.processor.SendProcessor$1.doInProducer(SendProcessor.java:65) at org.apache.camel.processor.SendProcessor$1.doInProducer(SendProcessor.java:62) at org.apache.camel.impl.ProducerCache.doInProducer(ProducerCache.java:142) at org.apache.camel.processor.SendProcessor.process(SendProcessor.java:62) at org.apache.camel.processor.interceptor.StreamCachingInterceptor.process(StreamCachingInterceptor.java:52) at org.apache.camel.processor.DelegateProcessor.processNext(DelegateProcessor.java:53) at org.apache.camel.processor.DelegateProcessor.proceed(DelegateProcessor.java:82) at org.apache.camel.processor.interceptor.TraceInterceptor.process(TraceInterceptor.java:148) at org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:61) at org.apache.camel.processor.RedeliveryErrorHandler.processExchange(RedeliveryErrorHandler.java:189) at org.apache.camel.processor.RedeliveryErrorHandler.processErrorHandler(RedeliveryErrorHandler.java:158) at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:91) at org.apache.camel.processor.DefaultErrorHandler.process(DefaultErrorHandler.java:49) at org.apache.camel.processor.DefaultChannel.process(DefaultChannel.java:148) at org.apache.camel.processor.Pipeline.process(Pipeline.java:73) at org.apache.camel.processor.UnitOfWorkProcessor.processNext(UnitOfWorkProcessor.java:54) at org.apache.camel.processor.DelegateProcessor.process(DelegateProcessor.java:48) at org.apache.camel.component.file.GenericFileConsumer.processExchange(GenericFileConsumer.java:198) at org.apache.camel.component.file.GenericFileConsumer.processBatch(GenericFileConsumer.java:122) at org.apache.camel.component.file.GenericFileConsumer.poll(GenericFileConsumer.java:95) at org.apache.camel.impl.ScheduledPollConsumer.run(ScheduledPollConsumer.java:98) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441) at java.util.concurrent.FutureTask$Sync.innerRunAndReset(FutureTask.java:317) at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:150) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$101(ScheduledThreadPoolExecutor.java:98) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.runPeriodic(ScheduledThreadPoolExecutor.java:181) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:205) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) at java.lang.Thread.run(Thread.java:619) Caused by: java.lang.IllegalArgumentException: Generate error to test rollback at com.xpectis.x3s.core.util.ServiceHelper.generateError(ServiceHelper.java:734) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.apache.camel.component.bean.MethodInfo.invoke(MethodInfo.java:193) at org.apache.camel.component.bean.MethodInfo$1.proceed(MethodInfo.java:115) at org.apache.camel.component.bean.BeanProcessor.process(BeanProcessor.java:118) at org.apache.camel.processor.interceptor.StreamCachingInterceptor.process(StreamCachingInterceptor.java:52) at org.apache.camel.processor.DelegateProcessor.processNext(DelegateProcessor.java:53) at org.apache.camel.processor.DelegateProcessor.proceed(DelegateProcessor.java:82) at org.apache.camel.processor.interceptor.TraceInterceptor.process(TraceInterceptor.java:148) at org.apache.camel.processor.RedeliveryErrorHandler.processExchange(RedeliveryErrorHandler.java:189) at org.apache.camel.processor.RedeliveryErrorHandler.processErrorHandler(RedeliveryErrorHandler.java:158) at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:91) at org.apache.camel.processor.DefaultErrorHandler.process(DefaultErrorHandler.java:49) at org.apache.camel.processor.DefaultChannel.process(DefaultChannel.java:148) at org.apache.camel.processor.Pipeline.process(Pipeline.java:73) at org.apache.camel.processor.RedeliveryErrorHandler.processExchange(RedeliveryErrorHandler.java:189) at org.apache.camel.processor.RedeliveryErrorHandler.processErrorHandler(RedeliveryErrorHandler.java:158) at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:91) at org.apache.camel.spring.spi.TransactionErrorHandler.access$101(TransactionErrorHandler.java:41) at org.apache.camel.spring.spi.TransactionErrorHandler$1.doInTransactionWithoutResult(TransactionErrorHandler.java:114) ... 45 more *Rollback for the FILE* *15:31:52,609 | WARN | 9: FileComponent | GenericFileOnCompletion | ent.file.GenericFileOnCompletion 137 | Rolling back remote file *strategy: org.apache.camel.component.file.strategy.genericfilerenameprocessstrat...@1b735a1for file: GenericFile[d:\temp\data\oinp\OINP-dummy.txt] Strange what we have here 15:31:53,250 | DEBUG | tenerContainer-3 | JtaTransactionManager | stractPlatformTransactionManager 730 | Initiating transaction commit 15:31:53,265 | DEBUG | tenerContainer-4 | JtaTransactionManager | stractPlatformTransactionManager 371 | Creating new transaction with name [null]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT 15:31:53,359 | DEBUG | tenerContainer-2 | JtaTransactionManager | stractPlatformTransactionManager 730 | Initiating transaction commit 15:31:53,390 | DEBUG | tenerContainer-3 | JtaTransactionManager | stractPlatformTransactionManager 371 | Creating new transaction with name [null]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT 15:31:53,468 | DEBUG | tenerContainer-3 | JtaTransactionManager | stractPlatformTransactionManager 730 | Initiating transaction commit 15:31:53,468 | DEBUG | tenerContainer-4 | JtaTransactionManager | stractPlatformTransactionManager 371 | Creating new transaction with name [null]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT 15:31:53,484 | DEBUG | tenerContainer-2 | JtaTransactionManager | stractPlatformTransactionManager 730 | Initiating transaction commit 15:31:53,484 | DEBUG | tenerContainer-3 | JtaTransactionManager | stractPlatformTransactionManager 371 | Creating new transaction with name [null]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT 15:31:53,500 | DEBUG | nitor W But the transaction with the DB is not rollbacked Charles Moulliard Senior Enterprise Architect Apache Camel Committer ***************************** blog : http://cmoulliard.blogspot.com On Fri, Jul 3, 2009 at 3:26 PM, Charles Moulliard <cmoulli...@gmail.com>wrote: > I have created a small route without JMS stuff. > > Here is the route : > > <camel:route> > <camel:from ref="fileClientEndpoint" /> > > <camel:setHeader headerName="origin"> > <camel:constant>file</camel:constant> > </camel:setHeader> > <camel:setHeader headerName="messageType"> > <camel:constant>OINP</camel:constant> > </camel:setHeader> > <camel:convertBodyTo type="java.lang.String"/> > <camel:to ref="directRequestEndpoint" /> > </camel:route> > > <camel:route> > <camel:from ref="directRequestEndpoint" /> > <camel:transacted ref="PROPAGATION_REQUIRED"/> > <!-- Call the requestService to save the request --> > <camel:bean ref="serviceHelper" method="createRequest"/> > <camel:bean ref="serviceHelper" method="generateError" /> > <camel:to uri="direct:testTx"/> > </camel:route> > > Unfortunately when a throw error is generated in bean called > "generateError" > > public void generateError() { > throw new IllegalArgumentException("Generate error to test > rollback"); > } > > records are committed in the DB and not rollbacked > > > I see that when the error is throw the message is redelivered a second time > as this parameter has been defined in the ActiveMq > > <bean id="x3sPolicy" class="org.apache.activemq.RedeliveryPolicy"> > * <property name="maximumRedeliveries" value="1"/>* > </bean> > > <bean id="activemqConnectionFactory" > class="org.apache.activemq.ActiveMQConnectionFactory"> > <property name="brokerURL" value="tcp://localhost:61616" /> > <property name="redeliveryPolicy" ref="x3sPolicy"/> > </bean> > > Question : Why policy defined in the ActiveMq is taken into account here ? > Why the rollback does not occur ? > > Charles Moulliard > Senior Enterprise Architect > Apache Camel Committer > > ***************************** > blog : http://cmoulliard.blogspot.com > > > On Fri, Jul 3, 2009 at 12:28 PM, Claus Ibsen <claus.ib...@gmail.com>wrote: > >> On Fri, Jul 3, 2009 at 12:16 PM, Guillaume Nodet<gno...@gmail.com> wrote: >> > In this case, you should not use transactions for the DB at all, but >> > if any error occurs while saving the data, an exception should be >> > thrown and should rollback the transaction for the JMS layer. >> Yeah that would be perfect unless he does some work afterwards the DB >> and that throws an Exception. >> Then the DB layer have already committed. >> >> So trying to avoid doing work after the DB layer would help. >> >> >> Is this not possible? >> But he is doing JPA/Hibernte stuff so he could grab the "session" and >> invoke a rollback manually in case errors happen afterwards. >> >> >> >> >> > >> > On Fri, Jul 3, 2009 at 10:48, Charles Moulliard<cmoulli...@gmail.com> >> wrote: >> >> Claus, >> >> >> >> I don't want at all to use XA transaction. Correct me if I'm wrong but >> the >> >> example of the documentation (Camel 2.0 - JMS Sample - part Spring XML) >> does >> >> not use at all a XA driver and the message will not be removed from the >> >> queue if a rollback occurs in the bean MyProcessor ? >> >> >> >> My concern is to avoid to lost messages from a file, queues if >> something >> >> happen in one of the services called where by example we have to save >> data >> >> in a DB or generate a report for a client. If such errors occur, then >> we >> >> have to investigate why can't save data in DB (maybe related to a >> connection >> >> issue, DB shutdown, ...) or generates files (maybe due to disk full, >> access >> >> right, ....). Sometimes, this is related to conditions out of the >> control of >> >> our application but sometimes no, then we have to correct the error and >> >> install a new version of the code. After the restart of the application >> and >> >> recovery of messages (persisted in the case of activemq), messages will >> be >> >> reprocessed. >> >> >> >> Regards, >> >> >> >> Charles Moulliard >> >> Senior Enterprise Architect >> >> Apache Camel Committer >> >> >> >> ***************************** >> >> blog : http://cmoulliard.blogspot.com >> >> >> >> >> >> On Fri, Jul 3, 2009 at 10:26 AM, Claus Ibsen <claus.ib...@gmail.com> >> wrote: >> >> >> >>> And reconsider if you need XA at all. Its slow and hard to get setup. >> >>> >> >>> Try to let the DB be the last stuff you do and afterwards send the >> >>> message to another queue for further processing in a 2nd route. >> >>> If that is possible in your use-case. >> >>> >> >>> >> >>> On Fri, Jul 3, 2009 at 10:25 AM, Claus Ibsen<claus.ib...@gmail.com> >> wrote: >> >>> > Hi >> >>> > >> >>> > Get it working outside OSGi, eg in a small unit test thats easy to >> run >> >>> > and test from within your IDE. >> >>> > Google for JMS + hibernate + TX + XA to find some samples that work. >> >>> > >> >>> > And since you use JMS + DB in the same TX you need to use XA db >> driver. >> >>> > >> >>> > It can be a painful to get setup >> >>> > >> >>> >> http://coffeedrivenjava.blogspot.com/2006/08/distributed-xa-transactions-w-hibernate.html >> >>> > >> >>> > And you need an XA TX manager such as JOTM >> >>> > http://jotm.ow2.org/xwiki/bin/view/Main/WebHome >> >>> > >> >>> > In j2ee land there was a JTA with the container that could do it. >> But >> >>> > in your OSGi container I do not know if it provides one out of the >> >>> > box. >> >>> > >> >>> > >> >>> > On Fri, Jul 3, 2009 at 10:09 AM, Charles Moulliard< >> cmoulli...@gmail.com> >> >>> wrote: >> >>> >> I'm still fighting against Spring config or Camel because Rollback >> does >> >>> not >> >>> >> occur. I have been able to configure Hibernate to use the same >> >>> >> TransactionManager as the one used by JMS >> >>> >> >> >>> >> Here is the different part of the config. I don't know where the >> issue >> >>> could >> >>> >> be ! >> >>> >> >> >>> >> 1) ActiveMQ >> >>> >> >> >>> >> ... >> >>> >> >> >>> >> <bean id="activemqConnectionFactory" >> >>> >> class="org.apache.activemq.ActiveMQConnectionFactory"> >> >>> >> <property name="brokerURL" value="tcp://localhost:61616" /> >> >>> >> </bean> >> >>> >> >> >>> >> <bean id="pooledConnectionFactory" >> >>> >> class="org.apache.activemq.pool.PooledConnectionFactoryBean"> >> >>> >> <property name="maxConnections" value="8" /> >> >>> >> <property name="maximumActive" value="500" /> >> >>> >> <property name="transactionManager" ref="transactionManager" >> /> >> >>> >> <property name="connectionFactory" >> >>> ref="activemqConnectionFactory" >> >>> >> /> >> >>> >> <property name="resourceName" value="activemq.default" /> >> >>> >> </bean> >> >>> >> >> >>> >> <bean id="resourceManager" >> >>> >> class="org.apache.activemq.pool.ActiveMQResourceManager" >> >>> >> init-method="recoverResource"> >> >>> >> <property name="transactionManager" >> ref="transactionManager" /> >> >>> >> <property name="connectionFactory" >> >>> ref="activemqConnectionFactory" >> >>> >> /> >> >>> >> <property name="resourceName" value="activemq.default" /> >> >>> >> </bean> >> >>> >> >> >>> >> <osgi:reference id="transactionManager" >> >>> >> interface="javax.transaction.TransactionManager" /> // This OSGI >> service >> >>> is >> >>> >> published by Geronimo Transaction bundle >> >>> >> >> >>> >> <osgi:service ref="pooledConnectionFactory"> >> >>> >> <osgi:interfaces> >> >>> >> <value>javax.jms.ConnectionFactory</value> >> >>> >> </osgi:interfaces> >> >>> >> <osgi:service-properties> >> >>> >> <entry key="name" value="default"/> >> >>> >> </osgi:service-properties> >> >>> >> </osgi:service> >> >>> >> >> >>> >> 2) Camel ActiveMQComponent >> >>> >> >> >>> >> <bean id="active-mq" >> >>> >> class="org.apache.activemq.camel.component.ActiveMQComponent"> >> >>> >> <property name="transacted" value="true"/> >> >>> >> <property name="connectionFactory"> >> >>> >> <osgi:reference >> interface="javax.jms.ConnectionFactory"/> // >> >>> >> OSGI service is published by ActiveMQ service >> >>> >> </property> >> >>> >> <property name="transactionManager"> >> >>> >> <osgi:reference >> >>> >> >> interface="org.springframework.transaction.PlatformTransactionManager"/> >> >>> >> </property> >> >>> >> </bean> >> >>> >> >> >>> >> 2) Hibernate - DAO >> >>> >> >> >>> >> <bean id="sessionFactory" >> >>> >> class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> >> >>> >> >> >>> >> <property name="mappingLocations"> >> >>> >> <list> >> >>> >> >> >>> >> >> >>> >> <value>classpath*:META-INF/com/xpectis/x3s/platform/model/*.hbm.xml</value> >> >>> >> </list> >> >>> >> </property> >> >>> >> >> >>> >> <property name="hibernateProperties"> >> >>> >> <props> >> >>> >> <prop >> >>> >> key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop> >> >>> >> <prop key="hibernate.show_sql">true</prop> >> >>> >> <prop key="hibernate.format_sql">true</prop> >> >>> >> <prop >> >>> >> key="hibernate.cglib.use_reflection_optimizer">true</prop> >> >>> >> <prop key="hibernate.jdbc.batch_size">10</prop> >> >>> >> <prop >> >>> >> >> >>> >> key="hibernate.query.factory_class">org.hibernate.hql.classic.ClassicQueryTranslatorFactory</prop> >> >>> >> <prop >> >>> >> >> >>> >> key="hibernate.transaction.factory_class">org.springframework.orm.hibernate3.SpringTransactionFactory</prop> >> >>> >> </props> >> >>> >> </property> >> >>> >> <property name="dataSource"> >> >>> >> <ref bean="dataSource" /> >> >>> >> </property> >> >>> >> >> >>> >> Remark : To avoid the JNDI lookup issue, we use >> springTransactionFactory >> >>> as >> >>> >> the TransactionFactory for Hibernate ( >> >>> >> http://forum.springsource.org/showthread.php?p=215720) >> >>> >> >> >>> >> 3) Service layer >> >>> >> >> >>> >> Here is the definition of the service used from Camel route : >> >>> >> >> >>> >> <bean id="notificationServiceTarget" >> >>> >> >> class="com.xpectis.x3s.platform.service.impl.NotificationServiceImpl"> >> >>> >> <property name="notificationDAO"> >> >>> >> <osgi:reference >> >>> >> interface="com.xpectis.x3s.platform.dao.NotificationDAO"/> >> >>> >> </property> >> >>> >> >> >>> >> </bean> >> >>> >> >> >>> >> <!-- Abstract service using the Geronimo Transaction Manager --> >> >>> >> <bean id="abstractService" abstract="true" >> >>> >> >> >>> >> class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"> >> >>> >> <property name="transactionManager"> >> >>> >> <osgi:reference >> >>> >> >> interface="org.springframework.transaction.PlatformTransactionManager"/> >> >>> >> </property> >> >>> >> </bean> >> >>> >> >> >>> >> <bean id="notificationService" >> >>> >> parent="abstractService" >> >>> >> >> >>> >> >> >>> >> class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"> >> >>> >> >> >>> >> <property name="target"> >> >>> >> <ref bean="notificationServiceTarget" /> >> >>> >> </property> >> >>> >> >> >>> >> <property name="transactionAttributes"> >> >>> >> <props> >> >>> >> <prop key="*">PROPAGATION_REQUIRED</prop> >> >>> >> </props> >> >>> >> </property> >> >>> >> </bean> >> >>> >> >> >>> >> 4) Route >> >>> >> >> >>> >> <bean id="myPolicy" >> >>> class="org.apache.camel.processor.RedeliveryPolicy"> >> >>> >> <property name="maximumRedeliveries" value="1"/> >> >>> >> </bean> >> >>> >> >> >>> >> <bean id="txErrorHandler" >> >>> >> class="org.apache.camel.spring.spi.TransactionErrorHandlerBuilder"> >> >>> >> <property name="springTransactionPolicy" >> >>> >> ref="PROPAGATION_REQUIRED"/> >> >>> >> <property name="redeliveryPolicy" ref="myPolicy"/> >> >>> >> </bean> >> >>> >> >> >>> >> <bean id="PROPAGATION_REQUIRED" >> >>> >> class="org.apache.camel.spring.spi.SpringTransactionPolicy"> >> >>> >> <property name="transactionManager"> >> >>> >> <osgi:reference >> >>> >> >> interface="org.springframework.transaction.PlatformTransactionManager"/> >> >>> >> </property> >> >>> >> </bean> >> >>> >> >> >>> >> <camel:route errorHandlerRef="txErrorHandler"> >> >>> >> <camel:from ref="queueQuickFixInEndpoint" /> >> >>> >> <camel:convertBodyTo type="quickfix.Message" /> >> >>> >> <camel:transacted ref="PROPAGATION_REQUIRED"/> >> >>> >> <camel:bean ref="serviceHelper" >> method="createNotification" >> >>> /> >> >>> >> <camel:bean ref="serviceHelper" method="generateError" >> /> >> >>> >> <camel:to ref="directNotificationEndpoint" /> >> >>> >> </camel:route> >> >>> >> >> >>> >> Any ideas are welcome >> >>> >> >> >>> >> Regards, >> >>> >> >> >>> >> Charles Moulliard >> >>> >> Senior Enterprise Architect >> >>> >> Apache Camel Committer >> >>> >> >> >>> >> ***************************** >> >>> >> blog : http://cmoulliard.blogspot.com >> >>> >> >> >>> >> >> >>> >> On Thu, Jul 2, 2009 at 5:02 PM, Charles Moulliard < >> cmoulli...@gmail.com >> >>> >wrote: >> >>> >> >> >>> >>> OK. I will try to create my own Hibernate JTATransaction manager >> as the >> >>> >>> existing try to perform a JNDI lookup to find the transaction >> manager >> >>> on >> >>> >>> OSGI platform (inheritage from J2EE world) >> >>> >>> >> >>> >>> >> >>> >>> >> >>> >> http://mail-archives.apache.org/mod_mbox/servicemix-dev/200904.mbox/%3cb23ecedc0904020615y55df4d0fhb303a2ea22df7...@mail.gmail.com%3e >> >>> >>> >> >>> >>> >> >>> >>> Charles Moulliard >> >>> >>> Senior Enterprise Architect >> >>> >>> Apache Camel Committer >> >>> >>> >> >>> >>> ***************************** >> >>> >>> blog : http://cmoulliard.blogspot.com >> >>> >>> >> >>> >>> >> >>> >>> On Thu, Jul 2, 2009 at 4:56 PM, Claus Ibsen < >> claus.ib...@gmail.com> >> >>> wrote: >> >>> >>> >> >>> >>>> On Thu, Jul 2, 2009 at 4:53 PM, Charles Moulliard< >> >>> cmoulli...@gmail.com> >> >>> >>>> wrote: >> >>> >>>> > 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 >> >>> >>>> Yes they must be configured to use the same TX manager. >> >>> >>>> >> >>> >>>> >> >>> >>>> > >> >>> >>>> > 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 >> >>> >>>> >> >> >>> >>>> > >> >>> >>>> >> >>> >>>> >> >>> >>>> >> >>> >>>> -- >> >>> >>>> 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 >> >>> > >> >>> >> >>> >> >>> >> >>> -- >> >>> Claus Ibsen >> >>> Apache Camel Committer >> >>> >> >>> Open Source Integration: http://fusesource.com >> >>> Blog: http://davsclaus.blogspot.com/ >> >>> Twitter: http://twitter.com/davsclaus >> >>> >> >> >> > >> > >> > >> > -- >> > Cheers, >> > Guillaume Nodet >> > ------------------------ >> > Blog: http://gnodet.blogspot.com/ >> > ------------------------ >> > Open Source SOA >> > http://fusesource.com >> > >> >> >> >> -- >> Claus Ibsen >> Apache Camel Committer >> >> Open Source Integration: http://fusesource.com >> Blog: http://davsclaus.blogspot.com/ >> Twitter: http://twitter.com/davsclaus >> > >