I've got a little exception, which handicaps our development.
On a AppServer 4.1 comes up a
java.sql.SQLException: PooledConnection has already been closed.
without any further explanations.
After that no database access is possible unless I restart the container.
This is propably a mistake in one ore more of other beans, but we don't now
where to search. We use stateless session beans and container managed entity
beans.
Our database connection is build over a jdbc2-datasource defined as follows:
<datasource-definitions>
<visitransact-datasource>
<jndi-name>file://d:/ds/Tds</jndi-name>
<driver-datasource-jndiname>file://d:/ds/InetDS</driver-datasource-jndiname>
<property>
<prop-name>connectionType</prop-name>
<prop-type>String</prop-type>
<prop-value>Direct</prop-value>
</property>
<property>
<prop-name>dialect</prop-name>
<prop-type>String</prop-type>
<prop-value>mssqlserver</prop-value>
</property>
<property>
<prop-name>maxPoolSize</prop-name>
<prop-type>int</prop-type>
<prop-value>1000</prop-value>
</property>
<property>
<prop-name>waitTimeout</prop-name>
<prop-type>int</prop-type>
<prop-value>240</prop-value>
</property>
<property>
<prop-name>idleTimeout</prop-name>
<prop-type>int</prop-type>
<prop-value>240</prop-value>
</property>
<property>
<prop-name>busyTimeout</prop-name>
<prop-type>int</prop-type>
<prop-value>240</prop-value>
</property>
</visitransact-datasource>
<driver-datasource>
<jndi-name>file://d:/ds/InetDS</jndi-name>
<datasource-class-name>com.inet.pool.PDataSource</datasource-class-name>
<property>
<prop-name>DatabaseName</prop-name>
<prop-type>java.lang.String</prop-type>
<prop-value>database1</prop-value>
</property>
<property>
<prop-name>ServerName</prop-name>
<prop-type>java.lang.String</prop-type>
<prop-value>server1</prop-value>
</property>
<property>
<prop-name>Port</prop-name>
<prop-type>java.lang.String</prop-type>
<prop-value>1433</prop-value>
</property>
<property>
<prop-name>User</prop-name>
<prop-type>java.lang.String</prop-type>
<prop-value>user</prop-value>
</property>
<property>
<prop-name>Password</prop-name>
<prop-type>java.lang.String</prop-type>
<prop-value>password</prop-value>
</property>
<property>
<prop-name>SqlServer7Mode</prop-name>
<prop-type>boolean</prop-type>
<prop-value>true</prop-value>
</property>
</driver-datasource>
</datasource-definitions>
It goes over a inet-driver (non XA) to a mssql 7 server.
We cannot reproduce this error. It simple happens ;-)
Any suggestions ?
Ingo
Stack trace would be helpful. Also to identify if it really
is our bug or the driver's you may have to submit a case
to our support to find out more about your environment like
JDBC driver version, your backend,
concurrency (single threaded or multi-threaded), duration
of transaction (short lived or long lived) for e.g you
have a busyTimeout of 4 minutes (240 secs) is there
a chance that transaction may be longer than that.
However I would suggest to try to increase the timeouts
to bigger numbers to see if any changes (just to help diagnose the problem),
in case you haven't tried that already.
Regards,
Rafay
what I can send you is the error_log - output of the container.
These are the actions before and after the first apperance of the error.
Is it possible to set a property to tell the PoolManager to script more
actions ?
[Wed Aug 23 13:26:38 GMT+02:00 2000] stderr: java.sql.SQLException:
[LWSRV1]Cannot insert duplicate key row in object 'AlertDefinition' with
unique index 'XAK1AlertDefinition'.
[Wed Aug 23 13:26:38 GMT+02:00 2000] stderr: at com.inet.tds.c.a(Unknown
Source)
[Wed Aug 23 13:26:38 GMT+02:00 2000] stderr: at com.inet.tds.b.if(Unknown
Source)
[Wed Aug 23 13:26:38 GMT+02:00 2000] stderr: at
com.inet.tds.b.executeUpdate(Unknown Source)
[Wed Aug 23 13:26:38 GMT+02:00 2000] stderr: at
com.inet.pool.b.executeUpdate(Unknown Source)
[Wed Aug 23 13:26:38 GMT+02:00 2000] stderr: at
com.inprise.ejb.cmp.JdbcManager.executeUpdate(JdbcManager.java:1383)
[Wed Aug 23 13:26:38 GMT+02:00 2000] stderr: at
com.inprise.ejb.cmp.JdbcManager.create(JdbcManager.java:805)
[Wed Aug 23 13:26:38 GMT+02:00 2000] stderr: at
com.inprise.ejb.cmp.OneToManyManager.create(OneToManyManager.java:143)
[Wed Aug 23 13:26:38 GMT+02:00 2000] stderr: at
com.inprise.ejb.cmp.CompoundManager.create(CompoundManager.java:537)
[Wed Aug 23 13:26:38 GMT+02:00 2000] stderr: at
com.inprise.ejb.cmp.FieldManager.create(FieldManager.java:227)
[Wed Aug 23 13:26:38 GMT+02:00 2000] stderr: at
com.inprise.ejb.cmp.DefaultManager.create(DefaultManager.java:36)
[Wed Aug 23 13:26:38 GMT+02:00 2000] stderr: at
com.inprise.ejb.cmp.CreateMethod.invoke(CreateMethod.java:24)
[Wed Aug 23 13:26:38 GMT+02:00 2000] stderr: at
com.inprise.ejb.EJBContext.invoke(EJBContext.java:149)
[Wed Aug 23 13:26:38 GMT+02:00 2000] stderr: at
com.inprise.ejb.Dispatcher.doInvoke(Dispatcher.java:1050)
[Wed Aug 23 13:26:38 GMT+02:00 2000] stderr: at
com.inprise.ejb.Dispatcher.invoke(Dispatcher.java:527)
[Wed Aug 23 13:26:38 GMT+02:00 2000] stderr: at
com.inprise.ejb.Dispatcher.invokeCreate(Dispatcher.java:377)
[Wed Aug 23 13:26:38 GMT+02:00 2000] stderr: at
com.inprise.ejb.Dispatcher.create(Dispatcher.java:392)
[Wed Aug 23 13:26:38 GMT+02:00 2000] stderr: at
com.inprise.ejb.EntityHome.create(EntityHome.java:103)
[Wed Aug 23 13:26:38 GMT+02:00 2000] stderr: at
com.inprise.ejb.EJBHome.invoke(EJBHome.java:141)
[Wed Aug 23 13:26:38 GMT+02:00 2000] stderr: at
com.chainnet.designer.server.interfaces.AlertDefinitionCMHomePOAInvokeHandle
r.create(AlertDefinitionCMHomePOAInvokeHandler.java:120)
[Wed Aug 23 13:26:38 GMT+02:00 2000] stderr: at
com.chainnet.designer.server.interfaces.AlertDefinitionCMHomePOAInvokeHandle
r.create(AlertDefinitionCMHomePOAInvokeHandler.java:215)
[Wed Aug 23 13:26:38 GMT+02:00 2000] stderr: at
com.chainnet.designer.server.interfaces.AlertDefinitionCMHomePOA._invoke(Ale
rtDefinitionCMHomePOA.java:117)
[Wed Aug 23 13:26:38 GMT+02:00 2000] stderr: at
com.chainnet.designer.server.interfaces.AlertDefinitionCMHomePOA._invoke(Ale
rtDefinitionCMHomePOA.java:57)
[Wed Aug 23 13:26:38 GMT+02:00 2000] stderr: at
com.inprise.vbroker.poa.POAImpl.invoke(POAImpl.java:2152)
[Wed Aug 23 13:26:38 GMT+02:00 2000] stderr: at
com.inprise.vbroker.poa.ActivationRecord.invoke(ActivationRecord.java:101)
[Wed Aug 23 13:26:38 GMT+02:00 2000] stderr: at
com.inprise.vbroker.poa.ServerInterceptorManager$ARWrapper.invoke(ServerInte
rceptorManager.java:56)
[Wed Aug 23 13:26:38 GMT+02:00 2000] stderr: at
com.inprise.vbroker.GIOP.GiopProtocolAdapter.doRequest(GiopProtocolAdapter.j
ava:392)
[Wed Aug 23 13:26:38 GMT+02:00 2000] stderr: at
com.inprise.vbroker.GIOP.GiopProtocolAdapter.dispatchMessage(GiopProtocolAda
pter.java:527)
[Wed Aug 23 13:26:38 GMT+02:00 2000] stderr: at
com.inprise.vbroker.orb.TPDispatcherImpl$TPDispatcher.run(TPDispatcherImpl.j
ava:100)
[Wed Aug 23 13:26:38 GMT+02:00 2000] stderr: at
com.inprise.vbroker.orb.ThreadPool$PoolWorker.run(ThreadPool.java:76)
[Wed Aug 23 13:26:38 GMT+02:00 2000] stderr: <<<< EJB LOG <<<<
[Wed Aug 23 13:31:45 GMT+02:00 2000] stderr: >>>> EJB LOG >>>>
[Wed Aug 23 13:31:45 GMT+02:00 2000] stderr: java.sql.SQLException:
PooledConnection has already been closed.
[Wed Aug 23 13:31:45 GMT+02:00 2000] stderr: at
com.inet.pool.c.getConnection(Unknown Source)
[Wed Aug 23 13:31:45 GMT+02:00 2000] stderr: at
com.inprise.visitransact.jdbc2.PooledConnectionHolder.getConnectionProxy(Poo
ledConnectionHolder.java:155)
[Wed Aug 23 13:31:45 GMT+02:00 2000] stderr: at
com.inprise.visitransact.jdbc2.GenericConnectionPool.doWorkforNewElement(Gen
ericConnectionPool.java:192)
[Wed Aug 23 13:31:45 GMT+02:00 2000] stderr: at
com.inprise.visitransact.jdbc2.GenericPool.getPooledObject(GenericPool.java:
397)
[Wed Aug 23 13:31:45 GMT+02:00 2000] stderr: at
com.inprise.visitransact.jdbc2.GenericConnectionPool.getPooledConnection(Gen
ericConnectionPool.java:25)
[Wed Aug 23 13:31:45 GMT+02:00 2000] stderr: at
com.inprise.visitransact.jdbc2.InpriseDataSource.getConnection(InpriseDataSo
urce.java:204)
[Wed Aug 23 13:31:45 GMT+02:00 2000] stderr: at
com.inprise.visitransact.jdbc2.InpriseDataSource.getConnection(InpriseDataSo
urce.java:222)
[Wed Aug 23 13:31:45 GMT+02:00 2000] stderr: at
com.inprise.ejb.cmp.JdbcManager.getTransactionContext(JdbcManager.java:1393)
[Wed Aug 23 13:31:45 GMT+02:00 2000] stderr: at
com.inprise.ejb.cmp.JdbcManager.findWhatever(JdbcManager.java:966)
[Wed Aug 23 13:31:45 GMT+02:00 2000] stderr: at
com.inprise.ejb.cmp.JdbcManager.findSingle(JdbcManager.java:923)
[Wed Aug 23 13:31:45 GMT+02:00 2000] stderr: at
com.inprise.ejb.cmp.OneToManyManager.findSingle(OneToManyManager.java:225)
[Wed Aug 23 13:31:45 GMT+02:00 2000] stderr: at
com.inprise.ejb.cmp.CompoundManager.findSingle(CompoundManager.java:627)
[Wed Aug 23 13:31:45 GMT+02:00 2000] stderr: at
com.inprise.ejb.cmp.FieldManager.findSingle(FieldManager.java:357)
[Wed Aug 23 13:31:45 GMT+02:00 2000] stderr: at
com.inprise.ejb.cmp.DefaultManager.findSingle(DefaultManager.java:78)
[Wed Aug 23 13:31:45 GMT+02:00 2000] stderr: at
com.inprise.ejb.cmp.FinderMethod.invoke(FinderMethod.java:37)
[Wed Aug 23 13:31:45 GMT+02:00 2000] stderr: at
com.inprise.ejb.EJBContext.invoke(EJBContext.java:149)
[Wed Aug 23 13:31:45 GMT+02:00 2000] stderr: at
com.inprise.ejb.Dispatcher.doInvoke(Dispatcher.java:1050)
[Wed Aug 23 13:31:45 GMT+02:00 2000] stderr: at
com.inprise.ejb.Dispatcher.invoke(Dispatcher.java:527)
[Wed Aug 23 13:31:45 GMT+02:00 2000] stderr: at
com.inprise.ejb.Dispatcher.find(Dispatcher.java:455)
[Wed Aug 23 13:31:45 GMT+02:00 2000] stderr: at
com.inprise.ejb.EntityHome.doFind(EntityHome.java:188)
[Wed Aug 23 13:31:45 GMT+02:00 2000] stderr: at
com.inprise.ejb.EntityHome.find(EntityHome.java:204)
[Wed Aug 23 13:31:45 GMT+02:00 2000] stderr: at
com.inprise.ejb.EJBHome.invoke(EJBHome.java:154)
[Wed Aug 23 13:31:45 GMT+02:00 2000] stderr: at
com.chainnet.server.ejb.cnuserCM.interfaces.CnuserCMHomePOAInvokeHandler.fin
dByLogin(CnuserCMHomePOAInvokeHandler.java:79)
[Wed Aug 23 13:31:45 GMT+02:00 2000] stderr: at
com.chainnet.server.ejb.cnuserCM.interfaces.CnuserCMHomePOAInvokeHandler.fin
dByLogin(CnuserCMHomePOAInvokeHandler.java:329)
[Wed Aug 23 13:31:45 GMT+02:00 2000] stderr: at
com.chainnet.server.ejb.cnuserCM.interfaces.CnuserCMHomePOA._invoke(CnuserCM
HomePOA.java:82)
[Wed Aug 23 13:31:45 GMT+02:00 2000] stderr: at
com.chainnet.server.ejb.cnuserCM.interfaces.CnuserCMHomePOA._invoke(CnuserCM
HomePOA.java:61)
[Wed Aug 23 13:31:45 GMT+02:00 2000] stderr: at
com.inprise.vbroker.poa.POAImpl.invoke(POAImpl.java:2152)
[Wed Aug 23 13:31:45 GMT+02:00 2000] stderr: at
com.inprise.vbroker.poa.ActivationRecord.invoke(ActivationRecord.java:101)
[Wed Aug 23 13:31:45 GMT+02:00 2000] stderr: at
com.inprise.vbroker.poa.ServerInterceptorManager$ARWrapper.invoke(ServerInte
rceptorManager.java:56)
[Wed Aug 23 13:31:45 GMT+02:00 2000] stderr: at
com.inprise.vbroker.GIOP.GiopProtocolAdapter.doRequest(GiopProtocolAdapter.j
ava:392)
[Wed Aug 23 13:31:45 GMT+02:00 2000] stderr: at
com.inprise.vbroker.GIOP.GiopProtocolAdapter.dispatchMessage(GiopProtocolAda
pter.java:527)
[Wed Aug 23 13:31:45 GMT+02:00 2000] stderr: at
com.inprise.vbroker.orb.TPDispatcherImpl$TPDispatcher.run(TPDispatcherImpl.j
ava:100)
[Wed Aug 23 13:31:45 GMT+02:00 2000] stderr: at
com.inprise.vbroker.orb.ThreadPool$PoolWorker.run(ThreadPool.java:76)
[Wed Aug 23 13:31:45 GMT+02:00 2000] stderr: <<<< EJB LOG <<<<
We are working with:
- NT 4.0 SP5
- IAS 4.1
- InetSoftware Opta2000
- MS SQLServer 7.0 SP2
SQLServer and Application Server are installed on seperate machines.
The Datasource is configured as follows:
<datasource-definitions>
<visitransact-datasource>
<jndi-name>file://D:/ds/Tds</jndi-name>
<driver-datasource-jndiname>file://D:/ds/InetDS</driver-datasource-jndiname>
</visitransact-datasource>
<driver-datasource>
<jndi-name>file://D:/ds/InetDS</jndi-name>
<datasource-class-name>com.inet.pool.PDataSource</datasource-class-name>
<property>
<prop-name>DatabaseName</prop-name>
<prop-type>java.lang.String</prop-type>
<prop-value>database</prop-value>
</property>
<property>
<prop-name>ServerName</prop-name>
<prop-type>java.lang.String</prop-type>
<prop-value>srv1</prop-value>
</property>
<property>
<prop-name>Port</prop-name>
<prop-type>java.lang.String</prop-type>
<prop-value>1433</prop-value>
</property>
<property>
<prop-name>User</prop-name>
<prop-type>java.lang.String</prop-type>
<prop-value>user</prop-value>
</property>
<property>
<prop-name>Password</prop-name>
<prop-type>java.lang.String</prop-type>
<prop-value>password</prop-value>
</property>
<property>
<prop-name>SqlServer7Mode</prop-name>
<prop-type>boolean</prop-type>
<prop-value>true</prop-value>
</property>
</driver-datasource>
</datasource-definitions>
We use some user transactions. In all cases a connection is used, we pack
all in a try-catch und release the connection in a finally-block.
Thanks,
Ingo
Rafay Khawaja <rkha...@inprise.com> schrieb in im Newsbeitrag:
39A692DD...@inprise.com...
Ingo Langer <ila...@lwplus.de> schrieb in im Newsbeitrag:
39aa165f_1@dnews...