You can try camel-jpa instead and use JPA which Hibernate also support. On Fri, Aug 16, 2013 at 11:56 AM, anand_tech <anand29...@gmail.com> wrote: > Hi, > > I am trying to do a small poc with camel-hibernate component. First my > versions are : > Camel-core 2.9.0 > Camel-hibernate 2.10.0 > Spring - 3.0.6 > Hibernate - 3.6.0 > > Below is my route : > > from("direct:foo") > .process(new Processor() { > > @Override > public void process(Exchange arg0) throws Exception { > Queue q = new Queue(); > q.setName("hi"); > arg0.getIn().setBody(q); > } > }) > .to("hibernate:com.poc.camel.interesting.Queue"); > > from("direct:services") > > .errorHandler(deadLetterChannel("direct:foo").useOriginalMessage()).end().to("http://somewebserver") > > This is my configuration xml > > <camelContext id="customCamelContext" > xmlns="http://camel.apache.org/schema/spring" > trace="true" streamCache="true"> > <propertyPlaceholder id="camelProperties" > location="classpath:camel.properties" /> > <camel:routeBuilder ref="customRouteBuilder" /> > </camelContext> > > > > <camel:proxy id="appService" > serviceInterface="com.poc.camel.interesting.ApiServices" > serviceUrl="direct:services" camelContextId="tmeCamelContext" > /> > > <bean id="hibernate" > class="org.apacheextras.camel.component.hibernate.HibernateComponent"> > <property name="sessionFactory" ref="sessionFactory"/> > <property name="transactionStrategy" ref="springTransactionStrategy"/> > </bean> > > > <bean id="springTransactionStrategy" > class="org.apacheextras.camel.component.hibernate.SpringTransactionStrategy"> > <constructor-arg ref="sessionFactory"/> > <constructor-arg ref="transactionTemplate"/> > </bean> > > <bean id="transactionManager" > class="org.springframework.orm.hibernate3.HibernateTransactionManager"> > <property name="sessionFactory" ref="sessionFactory"/> > </bean> > > <bean id="transactionTemplate" > class="org.springframework.transaction.support.TransactionTemplate"> > <property name="transactionManager" ref="transactionManager"/> > </bean> > > Now the flow is : I make a HTTP request to some webservice and when it fails > it goes to deadletter error handler which is pointed to direct:foo endpoint. > This then persists a Queue object in DB using camel-hibernate component. > Now i get following exception by doing all of this: > > [2013-08-16 14:55:10,993] org.apache.commons.httpclient.HttpMethodDirector > INFO - Retrying request > [2013-08-16 14:55:10,993] org.apache.commons.httpclient.HttpConnection DEBUG > - Open connection to 10.152.160.18:8065 > [2013-08-16 14:55:11,994] org.apache.commons.httpclient.HttpMethodDirector > DEBUG - Closing the connection. > [2013-08-16 14:55:11,994] org.apache.commons.httpclient.HttpMethodDirector > DEBUG - Method retry handler returned false. Automatic recovery will not be > attempted > [2013-08-16 14:55:11,994] org.apache.commons.httpclient.HttpConnection DEBUG > - Releasing connection back to connection manager. > [2013-08-16 14:55:11,994] > org.apache.commons.httpclient.MultiThreadedHttpConnectionManager DEBUG - > Freeing connection, > hostConfig=HostConfiguration[host=http://10.152.160.18:8065] > [2013-08-16 14:55:11,994] > org.apache.commons.httpclient.util.IdleConnectionHandler DEBUG - Adding > connection at: 1376645111994 > [2013-08-16 14:55:11,995] > org.apache.commons.httpclient.MultiThreadedHttpConnectionManager DEBUG - > Notifying no-one, there are no waiting threads > [2013-08-16 14:55:11,996] org.apache.camel.processor.DeadLetterChannel DEBUG > - Failed delivery for exchangeId: ID-CHDSEZ102214D-61690-1376645101689-0-1. > On delivery attempt: 0 caught: java.net.ConnectException: Connection > refused: connect > [2013-08-16 14:55:12,007] org.apache.camel.processor.SendProcessor DEBUG - >>>>> Endpoint[direct://foo] Exchange[Message: BeanInvocation public abstract > com.poc.camel.interesting.ServiceProviderPayload > com.poc.camel.interesting.ApiServices.performOperation(com.poc.camel.interesting.ServiceProviderPayload) > with [com.poc.camel.interesting.ServiceProviderPayload@8cd4db]]] > [2013-08-16 14:55:12,007] org.apache.camel.processor.interceptor.Tracer INFO > - ID-CHDSEZ102214D-61690-1376645101689-0-1 >>> (route4) > http://ThirdPartyServers?throwExceptionOnFailure=false --> <<< > Pattern:InOnly, BodyType:org.apache.camel.component.bean.BeanInvocation, > Body:BeanInvocation public abstract > com.poc.camel.interesting.ServiceProviderPayload > com.poc.camel.interesting.ApiServices.performOperation(com.poc.camel.interesting.ServiceProviderPayload) > with [com.poc.camel.interesting.ServiceProviderPayload@8cd4db]] > [2013-08-16 14:55:12,009] org.apache.camel.processor.interceptor.Tracer INFO > - ID-CHDSEZ102214D-61690-1376645101689-0-1 >>> (route4) --> > hibernate://com.poc.camel.interesting.Queue <<< Pattern:InOnly, > BodyType:com.poc.camel.interesting.Queue, > Body:com.poc.camel.interesting.Queue@a4be02 > [2013-08-16 14:55:12,010] org.apache.camel.processor.SendProcessor DEBUG - >>>>> Endpoint[hibernate://com.poc.camel.interesting.Queue] Exchange[Message: > com.poc.camel.interesting.Queue@a4be02] > [2013-08-16 14:55:12,039] > org.springframework.orm.hibernate3.HibernateTransactionManager DEBUG - > Creating new transaction with name [null]: > PROPAGATION_REQUIRED,ISOLATION_DEFAULT > [2013-08-16 14:55:12,286] org.hibernate.impl.SessionImpl DEBUG - opened > session at timestamp: 13766451120 > [2013-08-16 14:55:12,286] > org.springframework.orm.hibernate3.HibernateTransactionManager DEBUG - > Opened new Session [org.hibernate.impl.SessionImpl@1f53293] for Hibernate > transaction > [2013-08-16 14:55:12,291] > org.springframework.orm.hibernate3.HibernateTransactionManager DEBUG - > Preparing JDBC Connection of Hibernate Session > [org.hibernate.impl.SessionImpl@1f53293] > [2013-08-16 14:55:12,329] org.hibernate.transaction.JDBCTransaction DEBUG - > begin > [2013-08-16 14:55:12,329] org.hibernate.jdbc.ConnectionManager DEBUG - > opening JDBC connection > [2013-08-16 14:55:12,329] org.hibernate.transaction.JDBCTransaction DEBUG - > current autocommit status: true > [2013-08-16 14:55:12,329] org.hibernate.transaction.JDBCTransaction DEBUG - > disabling autocommit > [2013-08-16 14:55:12,330] org.hibernate.impl.SessionImpl DEBUG - opened > session at timestamp: 13766451123 > [2013-08-16 14:55:12,412] > org.springframework.transaction.support.TransactionTemplate DEBUG - > Initiating transaction rollback on application exception > org.hibernate.HibernateException: persist is not valid without active > transaction > at > org.hibernate.context.ThreadLocalSessionContext$TransactionProtectionWrapper.invoke(ThreadLocalSessionContext.java:341) > at $Proxy42.persist(Unknown Source) > at > org.apacheextras.camel.component.hibernate.HibernateProducer$1.doInTransaction(HibernateProducer.java:54) > at > org.apacheextras.camel.component.hibernate.SpringTransactionStrategy$1.doInTransaction(SpringTransactionStrategy.java:43) > at > org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:130) > at > org.apacheextras.camel.component.hibernate.SpringTransactionStrategy.execute(SpringTransactionStrategy.java:40) > at > org.apacheextras.camel.component.hibernate.HibernateProducer.process(HibernateProducer.java:49) > at > org.apache.camel.util.AsyncProcessorConverterHelper$ProcessorToAsyncProcessorBridge.process(AsyncProcessorConverterHelper.java:61) > at > org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73) > at > org.apache.camel.processor.SendProcessor$2.doInAsyncProducer(SendProcessor.java:115) > at > org.apache.camel.impl.ProducerCache.doInAsyncProducer(ProducerCache.java:285) > at > org.apache.camel.processor.SendProcessor.process(SendProcessor.java:110) > at > org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73) > at > org.apache.camel.processor.DelegateAsyncProcessor.processNext(DelegateAsyncProcessor.java:99) > at > org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:90) > at > org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:71) > at > org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73) > at > org.apache.camel.processor.DelegateAsyncProcessor.processNext(DelegateAsyncProcessor.java:99) > at > org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:90) > at > org.apache.camel.processor.interceptor.TraceInterceptor.process(TraceInterceptor.java:163) > at > org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73) > at > org.apache.camel.processor.RedeliveryErrorHandler.processErrorHandler(RedeliveryErrorHandler.java:322) > at > org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:213) > at > org.apache.camel.processor.interceptor.StreamCachingInterceptor.process(StreamCachingInterceptor.java:53) > at > org.apache.camel.processor.RouteContextProcessor.processNext(RouteContextProcessor.java:45) > at > org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:90) > at > org.apache.camel.processor.interceptor.DefaultChannel.process(DefaultChannel.java:303) > at > org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73) > at org.apache.camel.processor.Pipeline.process(Pipeline.java:117) > at org.apache.camel.processor.Pipeline.process(Pipeline.java:80) > at > org.apache.camel.processor.RouteContextProcessor.processNext(RouteContextProcessor.java:45) > at > org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:90) > at > org.apache.camel.processor.UnitOfWorkProcessor.process(UnitOfWorkProcessor.java:122) > at > org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73) > at > org.apache.camel.processor.DelegateAsyncProcessor.processNext(DelegateAsyncProcessor.java:99) > at > org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:90) > at > org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:71) > at > org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73) > at > org.apache.camel.component.direct.DirectProducer.process(DirectProducer.java:61) > at > org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73) > at > org.apache.camel.processor.SendProcessor$2.doInAsyncProducer(SendProcessor.java:115) > at > org.apache.camel.impl.ProducerCache.doInAsyncProducer(ProducerCache.java:285) > at > org.apache.camel.processor.SendProcessor.process(SendProcessor.java:110) > at > org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73) > at > org.apache.camel.processor.RedeliveryErrorHandler.deliverToFailureProcessor(RedeliveryErrorHandler.java:741) > at > org.apache.camel.processor.RedeliveryErrorHandler.processErrorHandler(RedeliveryErrorHandler.java:265) > at > org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:213) > at > org.apache.camel.processor.interceptor.StreamCachingInterceptor.process(StreamCachingInterceptor.java:53) > at > org.apache.camel.processor.RouteContextProcessor.processNext(RouteContextProcessor.java:45) > at > org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:90) > at > org.apache.camel.processor.interceptor.DefaultChannel.process(DefaultChannel.java:303) > at > org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73) > at org.apache.camel.processor.Pipeline.process(Pipeline.java:117) > at org.apache.camel.processor.Pipeline.process(Pipeline.java:80) > at > org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73) > at > org.apache.camel.processor.ChoiceProcessor.process(ChoiceProcessor.java:85) > at > org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73) > at > org.apache.camel.processor.DelegateAsyncProcessor.processNext(DelegateAsyncProcessor.java:99) > at > org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:90) > at > org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:71) > at > org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73) > at > org.apache.camel.processor.DelegateAsyncProcessor.processNext(DelegateAsyncProcessor.java:99) > at > org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:90) > at > org.apache.camel.processor.interceptor.TraceInterceptor.process(TraceInterceptor.java:163) > at > org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73) > at > org.apache.camel.processor.RedeliveryErrorHandler.processErrorHandler(RedeliveryErrorHandler.java:322) > at > org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:213) > at > org.apache.camel.processor.interceptor.StreamCachingInterceptor.process(StreamCachingInterceptor.java:53) > at > org.apache.camel.processor.RouteContextProcessor.processNext(RouteContextProcessor.java:45) > at > org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:90) > at > org.apache.camel.processor.interceptor.DefaultChannel.process(DefaultChannel.java:303) > at > org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73) > at org.apache.camel.processor.Pipeline.process(Pipeline.java:117) > at org.apache.camel.processor.Pipeline.process(Pipeline.java:80) > at > org.apache.camel.processor.RouteContextProcessor.processNext(RouteContextProcessor.java:45) > at > org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:90) > at > org.apache.camel.processor.UnitOfWorkProcessor.processAsync(UnitOfWorkProcessor.java:150) > at > org.apache.camel.processor.UnitOfWorkProcessor.process(UnitOfWorkProcessor.java:117) > at > org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73) > at > org.apache.camel.processor.DelegateAsyncProcessor.processNext(DelegateAsyncProcessor.java:99) > at > org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:90) > at > org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:71) > at > org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:99) > at > org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:86) > at > org.apache.camel.component.direct.DirectProducer.process(DirectProducer.java:48) > at > org.apache.camel.component.bean.AbstractCamelInvocationHandler$1.call(AbstractCamelInvocationHandler.java:83) > at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) > at java.util.concurrent.FutureTask.run(FutureTask.java:138) > at > org.apache.camel.component.bean.AbstractCamelInvocationHandler.invokeWithbody(AbstractCamelInvocationHandler.java:101) > at > org.apache.camel.component.bean.CamelInvocationHandler.invoke(CamelInvocationHandler.java:44) > at $Proxy34.performOperation(Unknown Source) > at > com.poc.camel.interesting.CamelDeadLetterTester.test(CamelDeadLetterTester.java:17) > at > com.poc.camel.interesting.CamelDeadLetterTester.main(CamelDeadLetterTester.java:25) > [2013-08-16 14:55:12,415] > org.springframework.orm.hibernate3.HibernateTransactionManager DEBUG - > Initiating transaction rollback > [2013-08-16 14:55:12,416] > org.springframework.orm.hibernate3.HibernateTransactionManager DEBUG - > Rolling back Hibernate transaction on Session > [org.hibernate.impl.SessionImpl@1f53293] > [2013-08-16 14:55:12,416] org.hibernate.transaction.JDBCTransaction DEBUG - > rollback > [2013-08-16 14:55:12,417] org.hibernate.transaction.JDBCTransaction DEBUG - > re-enabling autocommit > [2013-08-16 14:55:12,417] org.hibernate.transaction.JDBCTransaction DEBUG - > rolled back JDBC Connection > [2013-08-16 14:55:12,417] org.hibernate.jdbc.ConnectionManager DEBUG - > transaction completed on session with on_close connection release mode; be > sure to close the session to release JDBC resources! > [2013-08-16 14:55:12,417] > org.springframework.orm.hibernate3.HibernateTransactionManager DEBUG - > Closing Hibernate Session [org.hibernate.impl.SessionImpl@1f53293] after > transaction > [2013-08-16 14:55:12,417] > org.springframework.orm.hibernate3.SessionFactoryUtils DEBUG - Closing > Hibernate Session > [2013-08-16 14:55:12,418] org.hibernate.jdbc.ConnectionManager DEBUG - > releasing JDBC connection [ (open PreparedStatements: 0, globally: 0) (open > ResultSets: 0, globally: 0)] > [2013-08-16 14:55:12,418] org.hibernate.jdbc.ConnectionManager DEBUG - > transaction completed on session with on_close connection release mode; be > sure to close the session to release JDBC resources! > [2013-08-16 14:55:12,422] org.apache.camel.processor.DefaultErrorHandler > DEBUG - Failed delivery for exchangeId: > ID-CHDSEZ102214D-61690-1376645101689-0-1. On delivery attempt: 0 caught: > org.hibernate.HibernateException: persist is not valid without active > transaction > [2013-08-16 14:55:12,422] org.apache.camel.processor.DefaultErrorHandler > ERROR - Failed delivery for exchangeId: > ID-CHDSEZ102214D-61690-1376645101689-0-1. Exhausted after delivery attempt: > 1 caught: org.hibernate.HibernateException: persist is not valid without > active transaction > > So is it because of my outdated versions of hibernate and spring. Or am I > missing something in my transaction/spring/hibernate configuration. > > I went through CAMEL-5849 ticket at JIRA, but if we dont have an option of > changing version, what's the alternative ? I referred to camel-hibernate > example given at Camel website for whole poc. > > > > > -- > View this message in context: > http://camel.465427.n5.nabble.com/Camel-Hibernate-org-hibernate-HibernateException-persist-is-not-valid-without-active-transaction-tp5737387.html > Sent from the Camel - Users mailing list archive at Nabble.com.
-- Claus Ibsen ----------------- Red Hat, Inc. Email: cib...@redhat.com Twitter: davsclaus Blog: http://davsclaus.com Author of Camel in Action: http://www.manning.com/ibsen