Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [eclipselink-users] bug: connection leak in Eclipselink

I'm not sure there is a bug, atleast not yet. EclipseLink is using a datasource and obtaining a connection and should release it in a finally block within the beforeCompletion method. So all connections obtained from EclipseLink should always be released. What settings are you using on your datasource to monitor leaks? Could it just be that the settings are not giving threads enough time to operate before assuming the thread has leaked? Check to see if you have configured the connection-leak-timeout-in-seconds setting on your pool,and that if you are using it, it is set sufficiently high for your application under load. If it is not, any long operation will cause it to give this warning.
Best Regards,
Chris

On 06/10/2010 8:53 AM, Yannick Majoros wrote:
 Hello,

I think there is a bug in Eclipselink. Regularly, we have connection leaks (as detected by Glassfish) in our production app. It's an ejb 3 application, we don't create connections manually but rely on EntityManager as provided by Eclipselink.

Is this a known bug and is there a solution?

Here is the stacktrace (from glassfish leak detection):

[#|2010-10-04T10:47:21.600+0200|WARNING|sun-appserver2.1|javax.enterprise.resource.resourceadapter|_ThreadID=107;_ThreadName=Timer-15;ConnectionPoolName=newEpcProdPool;_RequestID=72baa66d-db93-47ff-8906-b1b644fc1466;|A potential connection leak detected for connection pool newEpcProdPool. The stack trace of the thread is provided below : com.sun.enterprise.resource.AbstractResourcePool.setResourceStateToBusy(AbstractResourcePool.java:304) com.sun.enterprise.resource.AbstractResourcePool.getUnenlistedResource(AbstractResourcePool.java:691) com.sun.enterprise.resource.AbstractResourcePool.internalGetResource(AbstractResourcePool.java:609) com.sun.enterprise.resource.AbstractResourcePool.getResource(AbstractResourcePool.java:458) com.sun.enterprise.resource.PoolManagerImpl.getResourceFromPool(PoolManagerImpl.java:248) com.sun.enterprise.resource.PoolManagerImpl.getResource(PoolManagerImpl.java:176) com.sun.enterprise.connectors.ConnectionManagerImpl.internalGetConnection(ConnectionManagerImpl.java:327) com.sun.enterprise.connectors.ConnectionManagerImpl.allocateConnection(ConnectionManagerImpl.java:189) com.sun.enterprise.connectors.ConnectionManagerImpl.allocateConnection(ConnectionManagerImpl.java:165) com.sun.enterprise.connectors.ConnectionManagerImpl.allocateConnection(ConnectionManagerImpl.java:158)
com.sun.gjc.spi.base.DataSource.getConnection(DataSource.java:108)
org.eclipse.persistence.sessions.JNDIConnector.connect(JNDIConnector.java:126) org.eclipse.persistence.sessions.JNDIConnector.connect(JNDIConnector.java:94) org.eclipse.persistence.sessions.DatasourceLogin.connectToDatasource(DatasourceLogin.java:162) org.eclipse.persistence.internal.databaseaccess.DatasourceAccessor.connectInternal(DatasourceAccessor.java:327) org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.connectInternal(DatabaseAccessor.java:291) org.eclipse.persistence.internal.databaseaccess.DatasourceAccessor.reconnect(DatasourceAccessor.java:558) org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.reconnect(DatabaseAccessor.java:1433) org.eclipse.persistence.internal.databaseaccess.DatasourceAccessor.incrementCallCount(DatasourceAccessor.java:302) org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.basicExecuteCall(DatabaseAccessor.java:570) org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeCall(DatabaseAccessor.java:526) org.eclipse.persistence.internal.sessions.AbstractSession.executeCall(AbstractSession.java:980) org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:206) org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:192) org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.updateObject(DatasourceCallQueryMechanism.java:747) org.eclipse.persistence.internal.queries.StatementQueryMechanism.updateObject(StatementQueryMechanism.java:430) org.eclipse.persistence.internal.queries.DatabaseQueryMechanism.updateObjectForWriteWithChangeSet(DatabaseQueryMechanism.java:1144) org.eclipse.persistence.queries.UpdateObjectQuery.executeCommitWithChangeSet(UpdateObjectQuery.java:84) org.eclipse.persistence.internal.queries.DatabaseQueryMechanism.executeWriteWithChangeSet(DatabaseQueryMechanism.java:290) org.eclipse.persistence.queries.WriteObjectQuery.executeDatabaseQuery(WriteObjectQuery.java:58) org.eclipse.persistence.queries.DatabaseQuery.execute(DatabaseQuery.java:736) org.eclipse.persistence.queries.DatabaseQuery.executeInUnitOfWork(DatabaseQuery.java:643) org.eclipse.persistence.queries.ObjectLevelModifyQuery.executeInUnitOfWorkObjectLevelModifyQuery(ObjectLevelModifyQuery.java:108) org.eclipse.persistence.queries.ObjectLevelModifyQuery.executeInUnitOfWork(ObjectLevelModifyQuery.java:85) org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.internalExecuteQuery(UnitOfWorkImpl.java:2909) org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1291) org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1273) org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1233) org.eclipse.persistence.internal.sessions.CommitManager.commitChangedObjectsForClassWithChangeSet(CommitManager.java:265) org.eclipse.persistence.internal.sessions.CommitManager.commitAllObjectsWithChangeSet(CommitManager.java:128) org.eclipse.persistence.internal.sessions.AbstractSession.writeAllObjectsWithChangeSet(AbstractSession.java:3348) org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.commitToDatabase(UnitOfWorkImpl.java:1422) org.eclipse.persistence.internal.sessions.RepeatableWriteUnitOfWork.commitToDatabase(RepeatableWriteUnitOfWork.java:546) org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.commitToDatabaseWithChangeSet(UnitOfWorkImpl.java:1527) org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.issueSQLbeforeCompletion(UnitOfWorkImpl.java:3182) org.eclipse.persistence.internal.sessions.RepeatableWriteUnitOfWork.issueSQLbeforeCompletion(RepeatableWriteUnitOfWork.java:268) org.eclipse.persistence.transaction.AbstractSynchronizationListener.beforeCompletion(AbstractSynchronizationListener.java:157) org.eclipse.persistence.transaction.JTASynchronizationListener.beforeCompletion(JTASynchronizationListener.java:68) com.sun.enterprise.distributedtx.J2EETransaction.commit(J2EETransaction.java:429) com.sun.enterprise.distributedtx.J2EETransactionManagerOpt.commit(J2EETransactionManagerOpt.java:371) com.sun.ejb.containers.BaseContainer.completeNewTx(BaseContainer.java:3826) com.sun.ejb.containers.BaseContainer.postInvokeTx(BaseContainer.java:3605)
com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:1388)
com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:1325)
com.sun.ejb.containers.EJBLocalObjectInvocationHandler.invoke(EJBLocalObjectInvocationHandler.java:205) com.sun.ejb.containers.EJBLocalObjectInvocationHandlerDelegate.invoke(EJBLocalObjectInvocationHandlerDelegate.java:83)
$Proxy112.saveValidationInscription(Unknown Source)
be.ucl.parcours.tttactionparcours.AllForSaveInscCours.saveInscriptionEtat(AllForSaveInscCours.java:50) be.ucl.parcours.inscriptionCours.EnregistrerInscriptionCoursAction.execute(EnregistrerInscriptionCoursAction.java:130) org.apache.struts.chain.commands.servlet.ExecuteAction.execute(ExecuteAction.java:58) org.apache.struts.chain.commands.AbstractExecuteAction.execute(AbstractExecuteAction.java:67) org.apache.struts.chain.commands.ActionCommandBase.execute(ActionCommandBase.java:51)
org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:191)



_______________________________________________
eclipselink-users mailing list
eclipselink-users@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/eclipselink-users


Back to the top