Hi,
I am trying to create and use a Camel Transaction Oriented Endpoint (Camel
TOE) using Spring, Hibernate and have several questions.
Can I use my Hibernate Session Factory and Transaction Manager to create a
transaction across the route?
If so, does anyone have an example of this set up?
I have have tried several configurations including using Atomikos
Transaction Essentials but keep getting a LazyInitializationException. Here
is the route trace. I can see that the endpoint is a transaction since it
has the org.apache.camel.transacted property set to true.
I have included the trace and the configuration below.
Regards,
Marc
[INFO] [talledLocalContainer] [RULESTREAM] INFO [http-8081-1]
TraceInterceptor.process(87) | -> choice(exchange.in.headers.operationName
== 'checkin', exchange.in.headers.operationName == 'delete',
exchange.in.headers.operationName == 'findUsersWithRoleOnObject',
exchange.in.headers.operationName == 'find',
exchange.in.headers.operationName.startsWith('find'),
exchange.in.headers.operationName == 'lock',
exchange.in.headers.operationName == 'rollback',
exchange.in.headers.operationName == 'unlock',
exchange.in.headers.operationName == 'version') , Pattern:InOut ,
Properties:{class
org.apache.cxf.service.model.BindingOperationInfo=[BindingOperationInfo:
{http://core.rulestream.com/class}find], org.apache.camel.transacted=true} ,
Headers:{content-length=1056, operationName=find,
content.type=text/xml;charset=UTF-8, host=localhost:8081, user-agent=Jakarta
Commons-HttpClient/3.0.1,
operationNameSpace=http://core.rulestream.com/class,
content-type=text/xml;charset=UTF-8, soapaction=""} ,
Body:[EMAIL PROTECTED]
[talledLocalContainer] [RULESTREAM] INFO [http-8081-1]
TraceInterceptor.process(87) | -> to(bean:classBSO?methodName=find) ,
Pattern:InOut , Properties:{class
org.apache.cxf.service.model.BindingOperationInfo=[BindingOperationInfo:
{http://core.rulestream.com/class}find], org.apache.camel.transacted=true} ,
Headers:{content-length=1056, operationName=find,
content.type=text/xml;charset=UTF-8, host=localhost:8081, user-agent=Jakarta
Commons-HttpClient/3.0.1,
operationNameSpace=http://core.rulestream.com/class,
content-type=text/xml;charset=UTF-8, soapaction=""} ,
Body:[EMAIL PROTECTED]
[talledLocalContainer] [RULESTREAM] INFO [http-8081-1]
TraceInterceptor.process(87) | -> bean(ref: classLatestRevision method:
filter) , Pattern:InOut , Properties:{org.apache.camel.transacted=true,
class
org.apache.cxf.service.model.BindingOperationInfo=[BindingOperationInfo:
{http://core.rulestream.com/class}find],
org.apache.camel.bean.BeanHolder=bean: classBSO} ,
Headers:{content-length=1056, operationName=find,
content.type=text/xml;charset=UTF-8, host=localhost:8081, user-agent=Jakarta
Commons-HttpClient/3.0.1,
operationNameSpace=http://core.rulestream.com/class,
content-type=text/xml;charset=UTF-8, soapaction=""} ,
Body:[EMAIL PROTECTED]
[talledLocalContainer] [RULESTREAM] INFO [http-8081-1]
TraceInterceptor.process(87) | -> bean(ref: objectMaterializer method:
materialize) , Pattern:InOut , Properties:{class
org.apache.cxf.service.model.BindingOperationInfo=[BindingOperationInfo:
{http://core.rulestream.com/class}find], org.apache.camel.transacted=true,
org.apache.camel.bean.BeanHolder=bean: classLatestRevision} ,
Body:[EMAIL PROTECTED]
[talledLocalContainer] [RULESTREAM] ERROR [http-8081-1]
LazyInitializationException.<init>(19) | failed to lazily initialize a
collection of role:
com.rulestream.core.knowledge.persistence.ClassDTO.compositeSpecs, no
session or session was closed[INFO] [talledLocalContainer]
org.hibernate.LazyInitializationException: failed to lazily initialize a
collection of role:
com.rulestream.core.knowledge.persistence.ClassDTO.compositeSpecs, no
session or session was closed[INFO] [talledLocalContainer] at
org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationException(AbstractPersistentCollection.java:358)
My spring configuration for the route:
<camel:camelContext id="camel.context" trace="true"
errorHandlerRef="cxfDeadLetterErrorHandler">
<camel:jmxAgent id="agent" disabled="true"/>
<camel:route>
<camel:from uri="cxf://bean:classService" />
<camel:policy ref="PROPAGATION_REQUIRED"/>
<camel:choice>
<camel:when>
<camel:groovy>exchange.in.headers.operationName ==
'checkin'</camel:groovy>
<camel:to uri="bean:classBSO?methodName=checkin" />
<camel:process ref="booleanProcessor" />
</camel:when>
<camel:when>
<camel:groovy>exchange.in.headers.operationName ==
'delete'</camel:groovy>
<camel:to uri="bean:classBSO?methodName=delete" />
<camel:process ref="booleanProcessor" />
</camel:when>
<camel:when>
<camel:groovy>exchange.in.headers.operationName ==
'findUsersWithRoleOnObject'</camel:groovy>
<camel:to uri="bean:classBSO?methodName=findUsersWithRoleOnObject"
/>
<camel:process ref="stringListProcessor" />
</camel:when>
<camel:when>
<camel:groovy>exchange.in.headers.operationName ==
'find'</camel:groovy>
<camel:to uri="bean:classBSO?methodName=find" />
<camel:bean ref="classLatestRevision" method="filter"/>
<camel:bean ref="objectMaterializer" method="materialize"/>
<camel:process ref="classListProcessor" />
</camel:when>
<camel:when>
<camel:groovy>exchange.in.headers.operationName.startsWith('find')</camel:groovy>
<camel:recipientList>
<camel:groovy>
'bean:classBSO?methodName='+exchange.in.headers.operationName
</camel:groovy>
</camel:recipientList>
<camel:process ref="classListProcessor" />
</camel:when>
<camel:when>
<camel:groovy>exchange.in.headers.operationName ==
'lock'</camel:groovy>
<camel:to uri="bean:classBSO?methodName=lock" />
<camel:process ref="booleanProcessor" />
</camel:when>
<camel:when>
<camel:groovy>exchange.in.headers.operationName ==
'rollback'</camel:groovy>
<camel:to uri="bean:classBSO?methodName=rollback" />
<camel:process ref="booleanProcessor" />
</camel:when>
<camel:when>
<camel:groovy>exchange.in.headers.operationName ==
'unlock'</camel:groovy>
<camel:to uri="bean:classBSO?methodName=unlock" />
<camel:process ref="booleanProcessor" />
</camel:when>
<camel:when>
<camel:groovy>exchange.in.headers.operationName ==
'version'</camel:groovy>
<camel:to uri="bean:classVersionBSO?methodName=create" />
<camel:process ref="classProcessor" />
</camel:when>
<camel:otherwise>
<camel:recipientList>
<camel:groovy>
'bean:classBSO?methodName='+exchange.in.headers.operationName
</camel:groovy>
</camel:recipientList>
<camel:process ref="classProcessor" />
</camel:otherwise>
</camel:choice>
<camel:to uri="bean:entityCacheClearingProcessor" />
</camel:route>
</camel:camelContext>
--
View this message in context:
http://www.nabble.com/Camel-TOE-tp20540912s22882p20540912.html
Sent from the Camel - Users mailing list archive at Nabble.com.