Details
-
Improvement
-
Status: Resolved
-
Major
-
Resolution: Fixed
-
1.3.2
-
None
-
ServiceMix 3.3, Hibernate DAO, Oracle Database
Description
I used a following configuration in jndi.xml:
<bean id="odeMCF" class="org.tranql.connector.oracle.XAMCF">
<property name="databaseName" value="XE"/>
<property name="userName" value="ode12"/>
<property name="password" value="ode12"/>
<property name="portNumber" value="1521"/>
<property name="serverName" value="localhost"/>
<property name="driverType" value="thin"/>
</bean>
<bean id="odeDataSource" class="org.jencks.factory.ConnectionFactoryFactoryBean">
<property name="managedConnectionFactory" ref="odeMCF"/>
<property name="connectionManager" ref="connectionManager"/>
</bean>
Note that tranql is configured using vendor-oracle jar instead of org.jencks.tranql.DataSourceMCF.
I deployed ODE successfully.
I deployed process helloworld-sa.
I got a following warning:
17:30:53,359 | WARN | Timer-3 | Transaction | action.manager.TransactionImpl 212 | Unable to enlist XAResource org.apache.geronimo.transaction.manager.WrapperNamedXAResource@1190cfc, errorC
ode: -6
oracle.jdbc.xa.OracleXAException
at oracle.jdbc.xa.OracleXAResource.checkError(OracleXAResource.java:1120)
at oracle.jdbc.xa.client.OracleXAResource.start(OracleXAResource.java:249)
at org.apache.geronimo.transaction.manager.WrapperNamedXAResource.start(WrapperNamedXAResource.java:86)
at org.apache.geronimo.transaction.manager.TransactionImpl.enlistResource(TransactionImpl.java:208)
at org.apache.geronimo.connector.outbound.TransactionEnlistingInterceptor.getConnection(TransactionEnlistingInterceptor.java:54)
at org.apache.geronimo.connector.outbound.TransactionCachingInterceptor.getConnection(TransactionCachingInterceptor.java:88)
at org.apache.geronimo.connector.outbound.ConnectionHandleInterceptor.getConnection(ConnectionHandleInterceptor.java:43)
at org.apache.geronimo.connector.outbound.TCCLInterceptor.getConnection(TCCLInterceptor.java:39)
at org.apache.geronimo.connector.outbound.ConnectionTrackingInterceptor.getConnection(ConnectionTrackingInterceptor.java:66)
at org.apache.geronimo.connector.outbound.AbstractConnectionManager.allocateConnection(AbstractConnectionManager.java:87)
at org.tranql.connector.jdbc.DataSource.getConnection(DataSource.java:56)
at org.apache.ode.daohib.SessionManager.getConnection(SessionManager.java:115)
at org.apache.ode.daohib.DataSourceConnectionProvider.getConnection(DataSourceConnectionProvider.java:43)
at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:423)
at org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:144)
at org.hibernate.jdbc.AbstractBatcher.prepareQueryStatement(AbstractBatcher.java:139)
at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1547)
at org.hibernate.loader.Loader.doQuery(Loader.java:673)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)
at org.hibernate.loader.Loader.doList(Loader.java:2220)
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2104)
at org.hibernate.loader.Loader.list(Loader.java:2099)
at org.hibernate.loader.criteria.CriteriaLoader.list(CriteriaLoader.java:94)
at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1569)
at org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:283)
at org.hibernate.impl.CriteriaImpl.uniqueResult(CriteriaImpl.java:305)
at org.apache.ode.daohib.bpel.BpelDAOConnectionImpl.getProcess(BpelDAOConnectionImpl.java:119)
at org.apache.ode.bpel.engine.BpelProcess.bounceProcessDAO(BpelProcess.java:753)
at org.apache.ode.bpel.engine.BpelProcess.access$1500(BpelProcess.java:78)
at org.apache.ode.bpel.engine.BpelProcess$HydrationLatch$3.call(BpelProcess.java:872)
at org.apache.ode.scheduler.simple.SimpleScheduler.execTransaction(SimpleScheduler.java:208)
at org.apache.ode.bpel.engine.BpelProcess$HydrationLatch.doHydrate(BpelProcess.java:870)
at org.apache.ode.bpel.engine.BpelProcess$HydrationLatch.access$100(BpelProcess.java:786)
at org.apache.ode.bpel.engine.BpelProcess$HydrationLatch$2.run(BpelProcess.java:796)
at org.apache.ode.bpel.engine.NStateLatch.latch(NStateLatch.java:89)
at org.apache.ode.bpel.engine.BpelProcess.hydrate(BpelProcess.java:661)
at org.apache.ode.bpel.engine.BpelServerImpl.register(BpelServerImpl.java:285)
at org.apache.ode.jbi.OdeServiceUnit.start(OdeServiceUnit.java:104)
at org.apache.ode.jbi.OdeSUManager.start(OdeSUManager.java:115)
at org.apache.servicemix.jbi.framework.ServiceUnitLifeCycle.start(ServiceUnitLifeCycle.java:103)
at org.apache.servicemix.jbi.framework.ServiceAssemblyLifeCycle.start(ServiceAssemblyLifeCycle.java:132)
at org.apache.servicemix.jbi.framework.DeploymentService.start(DeploymentService.java:378)
at org.apache.servicemix.jbi.framework.AutoDeploymentService.updateServiceAssembly(AutoDeploymentService.java:355)
at org.apache.servicemix.jbi.framework.AutoDeploymentService.updateArchive(AutoDeploymentService.java:256)
at org.apache.servicemix.jbi.framework.AutoDeploymentService.monitorDirectory(AutoDeploymentService.java:667)
at org.apache.servicemix.jbi.framework.AutoDeploymentService.access$800(AutoDeploymentService.java:62)
at org.apache.servicemix.jbi.framework.AutoDeploymentService$1.run(AutoDeploymentService.java:631)
at java.util.TimerThread.mainLoop(Timer.java:512)
at java.util.TimerThread.run(Timer.java:462)
I did some research for this and found that enabling JTA environment for hibernate in bpel-store/src/main/java/org/apache/ode/store/hib/DbConfStoreConnectionFactory.java, adding transactionManager.begin() and commit() in jbi/src/main/java/org/apache/ode/jbi/OdeSUManager.java and modifying ProcessStoreImpl.java so it uses the same thread for database operations, solves problem.
It is similar to transactions usage in dao-hibernate/src/main/java/org/apache/ode/daohib/bpel/BpelDAOConnectionFactoryImpl.java, which doesn't show this warning.