Hi Gerhard,
> org.apache.ojb.broker.accesslayer.ListProxy.get(ListProxy.java(Compiled
> Code))
> at
> de.lexcom.pl24.user.model.AccountImpl.hasUserType(AccountImpl.java(Compiled
> Code))
> ...
Seems this exception was caused by a lazy loading object (between rc5 and 1.0 the CollectionProxy stuff was reworked and should be thresadsafe)
> com.ibm.websphere.ce.cm.StaleConnectionException: class > com.ibm.ejs.cm.proxy.ResultSetProxy is closed
and OJB seems to use an connection which is already closed.
Internally OJB use the current PB instance to do the lazy load. If no current PB instance was found a new one was obtained from pool.
Can you describe the used environment? Do you use OJB within EJB or only servlets, do you use JTA transaction? What settings used in OJB.properties file? Do you use DataSource or normal connections in OJB?
regards Armin
Gerhard Grosse wrote:
Hi Armin,
thanks for looking into this!
On Fri, 20 Aug 2004 21:56:15 +0200, Armin Waibel <[EMAIL PROTECTED]> wrote:
I run some massive multithreaded tests against the 1.0_RELEASE branch in CVS (against hsql in-memory mode, single CPU) without failures (with tweaked OJB settings). In this test each thread work on separate objects, maybe the problems occur only when different threads work on the same objects.
So could you post some of the exceptions you got when run your tests and some info about the test (concurrent threads, OJB configuration, ...)?
The test were run using a load test tool from Rational. Typically 20-50 transactions were triggered per minute. How many concurrent threads this resulted in, I don't know, but I would guess something like 5-10.
Below are some typical exceptions we got and our OJB.properties file:
com.ibm.websphere.ce.cm.StaleConnectionException: class com.ibm.ejs.cm.proxy.ResultSetProxy is closed at com.ibm.ejs.cm.proxy.ResultSetProxy.getResultSet(ResultSetProxy.java(Inlined Compiled Code)) at com.ibm.ejs.cm.proxy.ResultSetProxy.wasNull(ResultSetProxy.java(Compiled Code)) at org.apache.ojb.broker.util.JdbcTypesHelper$T_BigInt.readValueFromResultSet(JdbcTypesHelper.java(Compiled Code)) at org.apache.ojb.broker.util.JdbcTypesHelper$BaseType.getObjectFromColumn(JdbcTypesHelper.java(Compiled Code)) at org.apache.ojb.broker.util.JdbcTypesHelper$BaseType.getObjectFromColumn(JdbcTypesHelper.java(Compiled Code)) at org.apache.ojb.broker.accesslayer.RowReaderDefaultImpl.readObjectArrayFrom(RowReaderDefaultImpl.java(Compiled Code)) at org.apache.ojb.broker.accesslayer.RsIterator.getObjectFromResultSet(RsIterator.java(Compiled Code)) at org.apache.ojb.broker.accesslayer.RsIterator.next(RsIterator.java(Compiled Code)) at org.apache.ojb.broker.core.QueryReferenceBroker.getCollectionByQuery(QueryReferenceBroker.java(Compiled Code)) at org.apache.ojb.broker.core.QueryReferenceBroker.getCollectionByQuery(QueryReferenceBroker.java(Compiled Code)) at org.apache.ojb.broker.core.QueryReferenceBroker.getCollectionByQuery(QueryReferenceBroker.java(Inlined Compiled Code)) at org.apache.ojb.broker.core.PersistenceBrokerImpl.getCollectionByQuery(PersistenceBrokerImpl.java(Compiled Code)) at org.apache.ojb.broker.accesslayer.BasePrefetcher.prefetchRelationship(BasePrefetcher.java(Compiled Code)) at org.apache.ojb.broker.core.QueryReferenceBroker$PBPrefetchingListener.prefetch(QueryReferenceBroker.java(Compiled Code)) at org.apache.ojb.broker.core.QueryReferenceBroker$PBCollectionProxyListener.beforeLoading(QueryReferenceBroker.java(Inlined Compiled Code)) at org.apache.ojb.broker.accesslayer.CollectionProxy.beforeLoading(CollectionProxy.java(Compiled Code)) at org.apache.ojb.broker.accesslayer.CollectionProxy.loadData(CollectionProxy.java(Compiled Code)) at org.apache.ojb.broker.accesslayer.ListProxy.loadData(ListProxy.java(Compiled Code)) at org.apache.ojb.broker.accesslayer.CollectionProxy.getData(CollectionProxy.java(Inlined Compiled Code)) at org.apache.ojb.broker.accesslayer.ListProxy.getListData(ListProxy.java(Inlined Compiled Code)) at org.apache.ojb.broker.accesslayer.ListProxy.get(ListProxy.java(Compiled Code)) at de.lexcom.pl24.user.model.AccountImpl.hasUserType(AccountImpl.java(Compiled Code)) ...
java.util.NoSuchElementException: Could not obtain next object: Error reading class type: de.lexcom.pl24.user.model.AccountUserTypeImpl from result set: class com.ibm.ejs.cm.proxy.ResultSetProxy is closed at org.apache.ojb.broker.accesslayer.RsIterator.next(RsIterator.java(Compiled Code)) at org.apache.ojb.broker.core.QueryReferenceBroker.getCollectionByQuery(QueryReferenceBroker.java(Compiled Code)) at org.apache.ojb.broker.core.QueryReferenceBroker.getCollectionByQuery(QueryReferenceBroker.java(Compiled Code)) at org.apache.ojb.broker.core.QueryReferenceBroker.getCollectionByQuery(QueryReferenceBroker.java(Inlined Compiled Code)) at org.apache.ojb.broker.core.PersistenceBrokerImpl.getCollectionByQuery(PersistenceBrokerImpl.java(Compiled Code)) at org.apache.ojb.broker.accesslayer.BasePrefetcher.prefetchRelationship(BasePrefetcher.java(Compiled Code)) at org.apache.ojb.broker.core.QueryReferenceBroker$PBPrefetchingListener.prefetch(QueryReferenceBroker.java(Compiled Code)) at org.apache.ojb.broker.core.QueryReferenceBroker$PBCollectionProxyListener.beforeLoading(QueryReferenceBroker.java(Inlined Compiled Code)) at org.apache.ojb.broker.accesslayer.CollectionProxy.beforeLoading(CollectionProxy.java(Compiled Code)) at org.apache.ojb.broker.accesslayer.CollectionProxy.loadData(CollectionProxy.java(Compiled Code)) at org.apache.ojb.broker.accesslayer.ListProxy.loadData(ListProxy.java(Compiled Code)) at org.apache.ojb.broker.accesslayer.CollectionProxy.getData(CollectionProxy.java(Inlined Compiled Code)) at org.apache.ojb.broker.accesslayer.ListProxy.getListData(ListProxy.java(Inlined Compiled Code)) at org.apache.ojb.broker.accesslayer.ListProxy.get(ListProxy.java(Compiled Code)) at de.lexcom.pl24.user.model.AccountImpl.hasUserType(AccountImpl.java(Compiled Code)) ...
2004-08-18 17:06:20,050 [Servlet.Engine.Transports : 878] ERROR ojb.broker.accesslayer.JdbcAccessImpl - PersistenceBrokerException during the execution of the query: Connection is closed com.ibm.websphere.ce.cm.StaleConnectionException: Connection is closed at com.ibm.ejs.cm.proxy.ConnectionProxy.getConnection(ConnectionProxy.java(Inlined Compiled Code)) at com.ibm.ejs.cm.proxy.ConnectionProxy.translateException(ConnectionProxy.java(Inlined Compiled Code)) at com.ibm.ejs.cm.proxy.ConnectionProxy.prepareStatement(ConnectionProxy.java(Compiled Code)) at org.apache.ojb.broker.accesslayer.StatementsForClassImpl.prepareStatement(StatementsForClassImpl.java(Compiled Code)) at org.apache.ojb.broker.accesslayer.StatementsForClassImpl.prepareStatement(StatementsForClassImpl.java(Inlined Compiled Code)) at org.apache.ojb.broker.accesslayer.StatementsForClassImpl.getPreparedStmt(StatementsForClassImpl.java(Compiled Code)) at org.apache.ojb.broker.accesslayer.StatementManager.getPreparedStatement(StatementManager.java(Compiled Code)) at org.apache.ojb.broker.accesslayer.JdbcAccessImpl.executeQuery(JdbcAccessImpl.java(Compiled Code)) at org.apache.ojb.broker.accesslayer.RsQueryObject.performQuery(RsQueryObject.java(Compiled Code)) at org.apache.ojb.broker.accesslayer.RsIterator.<init>(RsIterator.java(Compiled Code)) at org.apache.ojb.broker.core.RsIteratorFactoryImpl.createRsIterator(RsIteratorFactoryImpl.java(Compiled Code)) at org.apache.ojb.broker.core.PersistenceBrokerImpl.getRsIteratorFromQuery(PersistenceBrokerImpl.java(Compiled Code)) at org.apache.ojb.broker.core.PersistenceBrokerImpl.getIteratorFromQuery(PersistenceBrokerImpl.java(Compiled Code)) at org.apache.ojb.broker.core.QueryReferenceBroker.getCollectionByQuery(QueryReferenceBroker.java(Compiled Code)) at org.apache.ojb.broker.core.QueryReferenceBroker.getCollectionByQuery(QueryReferenceBroker.java(Compiled Code)) at org.apache.ojb.broker.core.QueryReferenceBroker.getCollectionByQuery(QueryReferenceBroker.java(Inlined Compiled Code)) at org.apache.ojb.broker.core.PersistenceBrokerImpl.getCollectionByQuery(PersistenceBrokerImpl.java(Compiled Code)) at org.apache.ojb.broker.accesslayer.BasePrefetcher.prefetchRelationship(BasePrefetcher.java(Compiled Code)) at org.apache.ojb.broker.core.QueryReferenceBroker$PBPrefetchingListener.prefetch(QueryReferenceBroker.java(Compiled Code)) at org.apache.ojb.broker.core.QueryReferenceBroker$PBMaterializationListener.beforeMaterialization(QueryReferenceBroker.java(Compiled Code)) at org.apache.ojb.broker.accesslayer.IndirectionHandler.beforeMaterialization(IndirectionHandler.java(Compiled Code)) at org.apache.ojb.broker.accesslayer.IndirectionHandler.materializeSubject(IndirectionHandler.java(Compiled Code)) at org.apache.ojb.broker.accesslayer.IndirectionHandler.getRealSubject(IndirectionHandler.java(Inlined Compiled Code)) at org.apache.ojb.broker.accesslayer.IndirectionHandler.invoke(IndirectionHandler.java(Compiled Code)) at $Proxy4.getCountry(Unknown Source) at de.lexcom.pl24.user.model.ServiceImpl.isApplicableTo(ServiceImpl.java(Compiled Code)) ...
java.lang.ArrayIndexOutOfBoundsException: Array index out of range: 0 at java.util.Vector.get(Vector.java(Compiled Code)) at org.apache.ojb.broker.accesslayer.ListProxy.get(ListProxy.java(Compiled Code)) at de.lexcom.pl24.user.model.AccountImpl.hasUserType(AccountImpl.java(Compiled Code)) at de.lexcom.pl24.user.logic.UserSession.hasUserType(UserSession.java(Inlined Compiled Code)) at de.lexcom.pl24.user.web.login.LoginAction.execute(LoginAction.java(Compiled Code)) at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java(Inlined Compiled Code))
OJB.properties:
# OJB.properties -- configuration of the OJB runtime environment # Version: 1.0 # (c) 2001, 2002, 2003 Apache Software Foundation # Author: Thomas Mahler and many others # # These settings: $Id: OJB.properties,v 1.4 2003/12/16 10:28:06 grosse Exp $ #
#---------------------------------------------------------------------------------------- # repository file settings #---------------------------------------------------------------------------------------- repositoryFile=repository.xml useSerializedRepository=false serializedRepositoryPath=.
#---------------------------------------------------------------------------------------- # PersistenceBrokerFactory / PersistenceBroker #---------------------------------------------------------------------------------------- PersistenceBrokerFactoryClass=org.apache.ojb.broker.core.PersistenceBrokerFactoryDefaultImpl PersistenceBrokerClass=org.apache.ojb.broker.core.PersistenceBrokerImpl
#---------------------------------------------------------------------------------------- # PersistenceBrokerFactory pool #---------------------------------------------------------------------------------------- maxActive=100 maxIdle=-1 maxWait=2000 timeBetweenEvictionRunsMillis=-1 minEvictableIdleTimeMillis=1000000 whenExhaustedAction=0
#---------------------------------------------------------------------------------------- # ConnectionFactory / Default ConnectionPool #---------------------------------------------------------------------------------------- ConnectionFactoryClass=org.apache.ojb.broker.accesslayer.ConnectionFactoryNotPooledImpl
#---------------------------------------------------------------------------------------- # ConnectionManager #---------------------------------------------------------------------------------------- # The ConnectionManagerClass entry defines the ConnectionManager implemementation to be used # ConnectionManagerClass=org.apache.ojb.broker.accesslayer.ConnectionManagerImpl ConnectionManagerClass=de.lexcom.common.ojb.OjbConnectionManager # public class OjbConnectionManager extends ConnectionManagerImpl implements ConnectionManagerIF #{ # private static Log log = LogFactory.getLog(OjbConnectionManager.class); # private Connection con = null; # # public OjbConnectionManager(PersistenceBroker broker) # { # super(broker); # } # # public Connection getConnection() throws LookupException # { # try # { # con = super.getConnection(); # } # catch (LookupException e) # { # log.warn("getConnection() failed! Now retrying...", e); # // try again once # con = super.getConnection(); # log.info("getConnection() retry succeeded"); # } # return con; # } # # public void releaseConnection() # { # try # { # if (getConnectionDescriptor().isDataSource() # && con != null # && !con.isClosed()) # { # con.rollback(); # } # } # catch (SQLException e) # { # log.warn("Ignoring SQL exception during connection release", e); # } # super.releaseConnection(); # } #}
#---------------------------------------------------------------------------------------- # SqlGenerator #---------------------------------------------------------------------------------------- SqlGeneratorClass=org.apache.ojb.broker.accesslayer.sql.SqlGeneratorDefaultImpl
#---------------------------------------------------------------------------------------- # CollectionProxy class #---------------------------------------------------------------------------------------- CollectionProxyClass=
#---------------------------------------------------------------------------------------- # StatementManager #---------------------------------------------------------------------------------------- StatementManagerClass=org.apache.ojb.broker.accesslayer.StatementManager
#---------------------------------------------------------------------------------------- # StatementsForClass #---------------------------------------------------------------------------------------- StatementsForClassClass=org.apache.ojb.broker.accesslayer.StatementsForClassImpl
#---------------------------------------------------------------------------------------- # JdbcAccess #---------------------------------------------------------------------------------------- JdbcAccessClass=org.apache.ojb.broker.accesslayer.JdbcAccessImpl
#---------------------------------------------------------------------------------------- # Object cache #---------------------------------------------------------------------------------------- ObjectCacheClass=de.lexcom.common.ojb.ObjectCacheThreeLevelImpl
#---------------------------------------------------------------------------------------- # Locking #---------------------------------------------------------------------------------------- LockManagerClass=org.apache.ojb.odmg.locking.LockManagerDefaultImpl LockMapClass=org.apache.ojb.odmg.locking.InMemoryLockMapImpl LockTimeout=600000 ImplicitLocking=false LockAssociations=WRITE
#---------------------------------------------------------------------------------------- # OQL / SQL settings #---------------------------------------------------------------------------------------- OqlCollectionClass=org.apache.ojb.odmg.collections.DListImpl SqlInLimit=200
#---------------------------------------------------------------------------------------- # Meta data / mapping settings #---------------------------------------------------------------------------------------- PersistentFieldClass=org.apache.ojb.broker.metadata.fieldaccess.PersistentFieldIntrospectorImpl
#---------------------------------------------------------------------------------------- # Transaction Management and assocation #---------------------------------------------------------------------------------------- OJBTxManagerClass=org.apache.ojb.odmg.LocalTxManager
#---------------------------------------------------------------------------------------- # End of OJB.properties file #----------------------------------------------------------------------------------------
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
