You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@openjpa.apache.org by Stuart Bedoll <be...@us.ibm.com> on 2008/01/13 20:50:55 UTC

EntityManager lifecycle and garbage collection


We have a lower software layer that creates EntityManager intances for each
transaction on the stack and leaves it for garbage collection without
issuing a close.  We are getting exceptions when running transactions (like
the ones below).  My assumption is that this is not a good practice since a
close should be issued right away to release resources (connections to the
pool) and not wait for a garbage collection event.  Otherwise we could (or
are) causing database connection issues.


Caused by:
fpa.framework.exceptions.FPADataException: Exception while Executing the
Query
      at
fpa.fw.ds.jpadataadapter.JPADataSourceAdapter.executeQuery(JPADataSourceAdapter.java:291)
      at
fpa.common.di.dataservices.fpu.GetFPUDIMediatorFunc.execute(GetFPUDIMediatorFunc.java:84)
      ... 25 more
Caused by:
<1.0.0-SNAPSHOT-SNAPSHOT nonfatal general error>
org.apache.openjpa.persistence.PersistenceException: Io exception: Got
minus one from a read callDSRA0010E: SQL State = null, Error Code = 17,002
      at
org.apache.openjpa.jdbc.sql.DBDictionary.newStoreException(DBDictionary.java:3789)
      at
org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:97)
      at
org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:83)
      at
org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:59)
      at
org.apache.openjpa.jdbc.kernel.JDBCStoreManager.connect(JDBCStoreManager.java:727)
      at
org.apache.openjpa.jdbc.kernel.JDBCStoreManager.getConnection(JDBCStoreManager.java:211)
      at
org.apache.openjpa.jdbc.sql.SelectImpl.execute(SelectImpl.java:346)
      at
org.apache.openjpa.jdbc.sql.SelectImpl.execute(SelectImpl.java:326)
      at
org.apache.openjpa.jdbc.sql.LogicalUnion$UnionSelect.execute(LogicalUnion.java:407)
      at
org.apache.openjpa.jdbc.sql.LogicalUnion.execute(LogicalUnion.java:218)
      at
org.apache.openjpa.jdbc.sql.LogicalUnion.execute(LogicalUnion.java:208)
      at
org.apache.openjpa.jdbc.kernel.SelectResultObjectProvider.open(SelectResultObjectProvider.java:94)
      at
org.apache.openjpa.lib.rop.EagerResultList.<init>(EagerResultList.java:34)
      at org.apache.openjpa.kernel.QueryImpl.toResult(QueryImpl.java:1221)
      at org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:989)
      at org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:798)
      at org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:768)
      at org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:764)
      at
org.apache.openjpa.kernel.DelegatingQuery.execute(DelegatingQuery.java:517)
      at
org.apache.openjpa.persistence.QueryImpl.execute(QueryImpl.java:230)
      at
org.apache.openjpa.persistence.QueryImpl.getResultList(QueryImpl.java:269)
      at
fpa.fw.ds.jpadataadapter.JPADataSourceAdapter.executeQuery(JPADataSourceAdapter.java:279)
      ... 26 more
Caused by:
com.ibm.websphere.ce.cm.StaleConnectionException: Io exception: Got minus
one from a read callDSRA0010E: SQL State = null, Error Code = 17,002
      at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native
Method)
      at
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:67)
      at
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
      at java.lang.reflect.Constructor.newInstance(Constructor.java:522)
      at
com.ibm.websphere.rsadapter.GenericDataStoreHelper.mapExceptionHelper(GenericDataStoreHelper.java:523)
      at
com.ibm.websphere.rsadapter.GenericDataStoreHelper.mapException(GenericDataStoreHelper.java:578)
      at
com.ibm.ws.rsadapter.AdapterUtil.mapException(AdapterUtil.java:2041)
      at
com.ibm.ws.rsadapter.spi.WSRdbDataSource.getPooledConnection(WSRdbDataSource.java:1189)
      at
com.ibm.ws.rsadapter.spi.WSManagedConnectionFactoryImpl.createManagedConnection(WSManagedConnectionFactoryImpl.java:1055)
      at
com.ibm.ejs.j2c.FreePool.createManagedConnectionWithMCWrapper(FreePool.java:1811)
      at
com.ibm.ejs.j2c.FreePool.createOrWaitForConnection(FreePool.java:1543)
      at com.ibm.ejs.j2c.PoolManager.reserve(PoolManager.java:2215)
      at
com.ibm.ejs.j2c.ConnectionManager.allocateMCWrapper(ConnectionManager.java:896)
      at
com.ibm.ejs.j2c.ConnectionManager.allocateConnection(ConnectionManager.java:596)
      at
com.ibm.ws.rsadapter.jdbc.WSJdbcDataSource.getConnection(WSJdbcDataSource.java:431)
      at
com.ibm.ws.rsadapter.jdbc.WSJdbcDataSource.getConnection(WSJdbcDataSource.java:400)
      at
org.apache.openjpa.lib.jdbc.DelegatingDataSource.getConnection(DelegatingDataSource.java:106)
      at
org.apache.openjpa.lib.jdbc.DecoratingDataSource.getConnection(DecoratingDataSource.java:87)
      at
org.apache.openjpa.jdbc.kernel.JDBCStoreManager.connectInternal(JDBCStoreManager.java:738)
      at
org.apache.openjpa.jdbc.kernel.JDBCStoreManager.connect(JDBCStoreManager.java:723)



OR

Caused by:
fpa.framework.exceptions.FPADataException: Exception while Executing the
Query
      at
fpa.fw.ds.jpadataadapter.JPADataSourceAdapter.executeQuery(JPADataSourceAdapter.java:292)
      at
fpa.common.di.dataservices.fpu.GetFPUDIMediatorFunc.execute(GetFPUDIMediatorFunc.java:86)
      ... 25 more
Caused by:
<1.0.0-SNAPSHOT-SNAPSHOT nonfatal general error>
org.apache.openjpa.persistence.PersistenceException: Io exception: Got
minus one from a read call
      at
org.apache.openjpa.jdbc.sql.DBDictionary.newStoreException(DBDictionary.java:3789)
      at
org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:97)
      at
org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:83)
      at
org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:59)
      at
org.apache.openjpa.jdbc.sql.OracleDictionary.ensureDriverVendor(OracleDictionary.java:248)
      at
org.apache.openjpa.jdbc.sql.OracleDictionary.toSelect(OracleDictionary.java:357)
      at
org.apache.openjpa.jdbc.sql.DBDictionary.toSelect(DBDictionary.java:1968)
      at
org.apache.openjpa.jdbc.sql.SelectImpl.toSelect(SelectImpl.java:212)
      at
org.apache.openjpa.jdbc.sql.SelectImpl.execute(SelectImpl.java:343)
      at
org.apache.openjpa.jdbc.sql.SelectImpl.execute(SelectImpl.java:326)
      at
org.apache.openjpa.jdbc.sql.LogicalUnion$UnionSelect.execute(LogicalUnion.java:407)
      at
org.apache.openjpa.jdbc.sql.LogicalUnion.execute(LogicalUnion.java:218)
      at
org.apache.openjpa.jdbc.sql.LogicalUnion.execute(LogicalUnion.java:208)
      at
org.apache.openjpa.jdbc.kernel.SelectResultObjectProvider.open(SelectResultObjectProvider.java:94)
      at
org.apache.openjpa.lib.rop.EagerResultList.<init>(EagerResultList.java:34)
      at org.apache.openjpa.kernel.QueryImpl.toResult(QueryImpl.java:1221)
      at org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:989)
      at org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:798)
      at org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:768)
      at org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:764)
      at
org.apache.openjpa.kernel.DelegatingQuery.execute(DelegatingQuery.java:517)
      at
org.apache.openjpa.persistence.QueryImpl.execute(QueryImpl.java:230)
      at
org.apache.openjpa.persistence.QueryImpl.getResultList(QueryImpl.java:269)
      at
fpa.fw.ds.jpadataadapter.JPADataSourceAdapter.executeQuery(JPADataSourceAdapter.java:280)
      ... 26 more
Caused by:
java.sql.SQLException: Io exception: Got minus one from a read call
      at
oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:111)
      at
oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:145)
      at
oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:254)
      at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:386)
      at
oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:413)
      at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:164)
      at
oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:34)
      at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:752)
      at
org.apache.openjpa.jdbc.schema.SimpleDriverDataSource.getConnection(SimpleDriverDataSource.java:73)
      at
org.apache.openjpa.jdbc.schema.SimpleDriverDataSource.getConnection(SimpleDriverDataSource.java:68)
      at
org.apache.openjpa.lib.jdbc.DelegatingDataSource.getConnection(DelegatingDataSource.java:113)
      at
org.apache.openjpa.lib.jdbc.DecoratingDataSource.getConnection(DecoratingDataSource.java:93)
      at
org.apache.openjpa.lib.jdbc.DelegatingDataSource.getConnection(DelegatingDataSource.java:113)
      at
org.apache.openjpa.jdbc.schema.DataSourceFactory$DefaultsDataSource.getConnection(DataSourceFactory.java:269)
      at
org.apache.openjpa.jdbc.sql.OracleDictionary.ensureDriverVendor(OracleDictionary.java:245)

Re: EntityManager lifecycle and garbage collection

Posted by Pinaki Poddar <pp...@apache.org>.
Closing EntityManagers when appropriate (that is a non-trivial design
decision) by application is preferred to depending on garbage collectors
non-deterministic behavior.

However, please note that database error code DSRA0010E signify some sort of
authentication problem. The observed error may be arising from issues
unrelated to closing of EntityManagers.
  
-- 
View this message in context: http://www.nabble.com/EntityManager-lifecycle-and-garbage-collection-tp14790206p14808462.html
Sent from the OpenJPA Users mailing list archive at Nabble.com.