-->
These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 1 post ] 
Author Message
 Post subject: Database lock during CacheSynchronization.beforeCompletion
PostPosted: Wed Sep 29, 2010 3:10 pm 
Newbie

Joined: Wed Sep 29, 2010 2:38 pm
Posts: 1
Hi,

I am experiencing a hung database in the following setup.

I'm running GlassFish 3.0.1 on Linux. DB2 9.7 with type 4 driver.

I have a Quartz job that invokes a stateless session bean (method myBeanMethod) with a container managed transaction (RequiresNew).

The bean method communicates with my DB2 in two ways.

1) It starts off with doing a number of SQL queries using straight JDBC. Every query fetch a connection from the connection pool defined i GlassFish (jdbc/mydatasource).
2) Last it updates some data using Hibernate. Hibernate is configured to use the same data source in GlassFish as the straight JDBC code.

I have set the following properties on my Hibernate session factory:

Code:
hibernate.transaction.factory_class=org.hibernate.transaction.CMTTransactionFactory
hibernate.transaction.manager_lookup_class=org.hibernate.transaction.SunONETransactionManagerLookup
hibernate.jta.UserTransaction=javax.transaction.UserTransaction
hibernate.connection.datasource=java:comp/env/jdbc/mydatasource
hibernate.current_session_context_class=jta


My experience is that the Quartz job completes without any exceptions being thrown but some part of my database in locked until I kill the GlassFish process.

If I omit the Hibernate code (step 2 from above) everything is OK, the database is not locked.

When I turn on leak detection in GlassFish the following stack trace shows up which indicated that a dead lock is present during CacheSynchronization.beforeCompletion.

If I manually close the hibernate session when I'm done using it in the tx everything works fine (instead of relying it being done for me during tx commit). Howerver, I would like to avoid doing the manually closing of Hibernate sessions and let the transaction manager do it for me.

Any ideas to why this is not working for me? Any help/comments would be appreciated.

Code:
[#|2010-09-29T15:06:41.270+0200|WARNING|glassfish3.0.1|javax.enterprise.resource.resourceadapter.com.sun.enterprise.resource.pool|_ThreadID=28;_ThreadName=Thread-1;|A potential connection leak detected for connection pool MyPoolTx. The stack trace of the thread is provided below :
com.sun.enterprise.resource.pool.ConnectionPool.setResourceStateToBusy(ConnectionPool.java:319)
com.sun.enterprise.resource.pool.ConnectionPool.getResourceFromPool(ConnectionPool.java:694)
com.sun.enterprise.resource.pool.ConnectionPool.getUnenlistedResource(ConnectionPool.java:572)
com.sun.enterprise.resource.pool.ConnectionPool.internalGetResource(ConnectionPool.java:467)
com.sun.enterprise.resource.pool.ConnectionPool.getResource(ConnectionPool.java:369)
com.sun.enterprise.resource.pool.PoolManagerImpl.getResourceFromPool(PoolManagerImpl.java:226)
com.sun.enterprise.resource.pool.PoolManagerImpl.getResource(PoolManagerImpl.java:150)
com.sun.enterprise.connectors.ConnectionManagerImpl.getResource(ConnectionManagerImpl.java:321)
com.sun.enterprise.connectors.ConnectionManagerImpl.internalGetConnection(ConnectionManagerImpl.java:290)
com.sun.enterprise.connectors.ConnectionManagerImpl.allocateConnection(ConnectionManagerImpl.java:182)
com.sun.enterprise.connectors.ConnectionManagerImpl.allocateConnection(ConnectionManagerImpl.java:159)
com.sun.enterprise.connectors.ConnectionManagerImpl.allocateConnection(ConnectionManagerImpl.java:154)
com.sun.gjc.spi.base.DataSource.getConnection(DataSource.java:105)
org.hibernate.connection.DatasourceConnectionProvider.getConnection(DatasourceConnectionProvider.java:92)
org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:446)
org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:167)
org.hibernate.jdbc.AbstractBatcher.prepareStatement(AbstractBatcher.java:116)
org.hibernate.jdbc.AbstractBatcher.prepareStatement(AbstractBatcher.java:109)
org.hibernate.jdbc.AbstractBatcher.prepareBatchStatement(AbstractBatcher.java:244)
org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:2382)
org.hibernate.persister.entity.AbstractEntityPersister.updateOrInsert(AbstractEntityPersister.java:2335)
org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:2635)
org.hibernate.action.EntityUpdateAction.execute(EntityUpdateAction.java:115)
org.hibernate.engine.ActionQueue.execute(ActionQueue.java:279)
org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:263)
org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:168)
org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:321)
org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:50)
org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1027)
org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:365)
org.hibernate.transaction.CacheSynchronization.beforeCompletion(CacheSynchronization.java:88)
com.sun.jts.jta.SynchronizationImpl.before_completion(SynchronizationImpl.java:99)
com.sun.jts.CosTransactions.RegisteredSyncs.distributeBefore(RegisteredSyncs.java:158)
com.sun.jts.CosTransactions.TopCoordinator.beforeCompletion(TopCoordinator.java:2551)
com.sun.jts.CosTransactions.CoordinatorTerm.commit(CoordinatorTerm.java:278)
com.sun.jts.CosTransactions.TerminatorImpl.commit(TerminatorImpl.java:251)
com.sun.jts.CosTransactions.CurrentImpl.commit(CurrentImpl.java:623)
com.sun.jts.jta.TransactionManagerImpl.commit(TransactionManagerImpl.java:318)
com.sun.enterprise.transaction.jts.JavaEETransactionManagerJTSDelegate.commitDistributedTransaction(JavaEETransactionManagerJTSDelegate.java:171)
com.sun.enterprise.transaction.JavaEETransactionManagerSimplified.commit(JavaEETransactionManagerSimplified.java:843)
com.sun.ejb.containers.BaseContainer.completeNewTx(BaseContainer.java:5040)
com.sun.ejb.containers.BaseContainer.postInvokeTx(BaseContainer.java:4805)
com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:2004)
com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:1955)
com.sun.ejb.containers.EJBObjectInvocationHandler.invoke(EJBObjectInvocationHandler.java:208)
com.sun.ejb.containers.EJBObjectInvocationHandler.invoke(EJBObjectInvocationHandler.java:118)
$Proxy181.myBeanMethod(Unknown Source)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
java.lang.reflect.Method.invoke(Method.java:597)
com.sun.corba.ee.impl.presentation.rmi.StubInvocationHandlerImpl.privateInvoke(StubInvocationHandlerImpl.java:228)
com.sun.corba.ee.impl.presentation.rmi.StubInvocationHandlerImpl.invoke(StubInvocationHandlerImpl.java:147)
com.sun.corba.ee.impl.presentation.rmi.codegen.CodegenStubBase.invoke(CodegenStubBase.java:225)
...
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
java.lang.reflect.Method.invoke(Method.java:597)
org.quartz.jobs.ee.ejb.EJBInvokerJob.execute(EJBInvokerJob.java:230)
...
org.quartz.core.JobRunShell.run(JobRunShell.java:202)
org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:534)


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 1 post ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
cron
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.