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.

Reply via email to