I was going to suggest that as well, Paulo, but Andrew indicated that this same issue applies to Glassfish... And, Andrew is using Postgres... I thought the resultSetHoldability is a DB2 only property... Maybe Glassfish and Postgres have similar functionality, but I kind of doubt it...
Andrew, can you verify my statements and your environment? On Tue, Oct 1, 2013 at 9:44 AM, Paulo Borges <abuda...@hotmail.com> wrote: > Andrew: > > In WebSphere under the custom properties for your datasource change the > > resultSetHoldability from 2 (CLOSE_CURSORS_AT_COMMIT) to 1 > (HOLD_CURSORS_OVER_COMMIT) > > and see if it solves your problem. > > ---------------------------------------- > > Date: Tue, 1 Oct 2013 12:27:25 +0100 > > From: and...@ahastie.net > > To: users@openjpa.apache.org > > Subject: Connection is closed across multiple EntityManager instances in > a JEE Container > > > > Hi all, > > > > OK, I suspect what I need here is more along the lines of advice on how > > to proceed diagnosing a problem ..... > > > > I have a JEE EJB3 application which makes us of Statefull Session Beans > > where my EntityManager is rooted. Connections are non-XA and managed by > > the container (Glassfish or WebSphere) and transactions under JTA > control. > > > > OpenJPA version = v2.1.1 > > Persistence database = PostgreSQL 9.2 > > OS = Linux and Windows 2008 Server > > JEE Container = Glassfish V3.2 and IBM WebSphere V8.5.5 > > > > Here's the persistence.xml (stripped down for salient bits and removal > > of sensitive data items):- > > > > *<?xml version="1.0" encoding="UTF-8" ?> > > <persistence xmlns="http://java.sun.com/xml/ns/persistence" > > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > > xsi:schemaLocation="http://java.sun.com/xml/ns/persistence > > http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd" > > version="2.0"> > > > > <persistence-unit name="..........." transaction-type="JTA"> > > <description> > > ............ > > </description> > > > <provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider> > > <jta-data-source>jdbc/.......</jta-data-source> > > <class>.....</class> > > *** <class>.....</class> > > * > > <properties> > > <property name="openjpa.TransactionMode" value="managed"/> > > > > <property name="openjpa.jdbc.DBDictionary" > > value="postgres(SearchStringEscape=\)"/> > > </properties> > > </persistence-unit> > > </persistence>* > > > > > > When stress testing the application, I see failures emanating from the > > underlying database connection associated with the EntityManager stating > > that the "connection is closed". The problem only appears to show up > > when the application is under load with multiple session bean instances, > > but I can find no fixed pattern that triggers the error. > > > > Here's a snippet from the stack trace:- > > > > > [#|2013-09-30T15:43:39.848+0100|SEVERE|glassfish3.1.2|com.rocketsoftware.ascentserver.dataaccess.catalog.JpaDAO|_ThreadID=34;_ThreadName=Thread-2;|JPA > > Nested Throwable: org.apache.openjpa.lib.jdbc > > .ReportingSQLException:*Connection closed* {SELECT t0.appcode_id, > > t0.asRecNoMax, t0.asTableType, t0.comment, t0.creationDate, > > t0.CULTURE_ID, t0.currentCycle, t0.DATASOURCE_ID, t0.dataSpecification, > > t0.efficiency, t0.help, t0.hostCodepage, t0.id, t0.indexReorgNeeded, > > t0.internalName, t0.lastModified, t0.lastModifyCommand, > > t0.lockTimestamp, t0.locked, t0.lockingUserID, t0.maxCycle, t0.panel, > > t0.password, t0.passwordProtected, t0.recordCount, t0.recordSize, > > t0.reservationLock, t0.reserved, t0.reservedTimestamp, > > t0.reservingUserID, t0.shareable, t0.tableName, t0.tableNamekey, > t0.tablePr > > otected, t0.title, t0.usable, t0.writtenTo FROM ASCENTTABLE t0 WHERE > > t0.id = ?} [code=0, state=null] > > java.lang.RuntimeException: > > org.apache.openjpa.lib.jdbc.ReportingSQLException: Connection closed > > {SELECT t0.appcode_id, t0.asRecNoMax, t0.asTableType, t0.comment, > > t0.creationDate, t0.CULTURE_ID, t > > 0.currentCycle, t0.DATASOURCE_ID, t0.dataSpecification, t0.efficiency, > > t0.help, t0.hostCodepage, t0.id, t0.indexReorgNeeded, t0.internalName, > > t0.lastModified, t0.lastModifyCommand, t0.lockTimestam > > p, t0.locked, t0.lockingUserID, t0.maxCycle, t0.panel, t0.password, > > t0.passwordProtected, t0.recordCount, t0.recordSize, t0.reservationLock, > > t0.reserved, t0.reservedTimestamp, t0.reservingUserID, > > t0.shareable, t0.tableName, t0.tableNamekey, t0.tableProtected, > > t0.title, t0.usable, t0.writtenTo FROM ASCENTTABLE t0 WHERE t0.id = ?} > > [code=0, state=null] > > at > > > org.apache.openjpa.jdbc.kernel.FinderQueryImpl.execute(FinderQueryImpl.java:160) > > at > > > org.apache.openjpa.jdbc.kernel.JDBCStoreManager.getInitializeStateResult(JDBCStoreManager.java:566) > > at > > > org.apache.openjpa.jdbc.kernel.JDBCStoreManager.initializeState(JDBCStoreManager.java:378) > > at > > > org.apache.openjpa.jdbc.kernel.JDBCStoreManager.initialize(JDBCStoreManager.java:333) > > at > > > org.apache.openjpa.kernel.DelegatingStoreManager.initialize(DelegatingStoreManager.java:112) > > at > > > org.apache.openjpa.kernel.ROPStoreManager.initialize(ROPStoreManager.java:57) > > at > > org.apache.openjpa.kernel.BrokerImpl.initialize(BrokerImpl.java:1027) > > at org.apache.openjpa.kernel.BrokerImpl.find(BrokerImpl.java:985) > > at org.apache.openjpa.kernel.BrokerImpl.find(BrokerImpl.java:907) > > at > > org.apache.openjpa.kernel.BrokerImpl.isDetached(BrokerImpl.java:4563) > > ... > > ... > > Caused by: org.apache.openjpa.lib.jdbc.ReportingSQLException: > > *Connection closed* {SELECT t0.appcode_id, t0.asRecNoMax, > > t0.asTableType, t0.comment, t0.creationDate, t0.CULTURE_ID, > > t0.currentCycle, t0.DATASOURCE_ID, t0.dataSpecification, t0.efficiency, > > t0.help, t0.hostCodepage, t0.id, t0.indexReorgNeeded, t0.internalName, > > t0.lastModified, t0.lastModifyCommand, t0.lockTimestamp, t0.locked, > > t0.lockingUserID, t0.maxCycle, t0.panel, t0.password, > > t0.passwordProtected, t0.recordCount, t0.recordSize, t0.reservationLock, > > t0.reserved, t0.reservedTimestamp, t0.reservingUserID, t0.shareable, > > t0.tableName, t0.tableNamekey, t0.tableProtected, t0.title, t0.usable, > > t0.writtenTo FROM ASCENTTABLE t0 WHERE t0.id = ?} [code=0, state=null] > > at > > > org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator.wrap(LoggingConnectionDecorator.java:281) > > at > > > org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator.wrap(LoggingConnectionDecorator.java:261) > > at > > > org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator.access$000(LoggingConnectionDecorator.java:72) > > at > > > org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator$LoggingConnection.prepareStatement(LoggingConnectionDecorator.java:313) > > at > > > org.apache.openjpa.lib.jdbc.DelegatingConnection.prepareStatement(DelegatingConnection.java:155) > > at > > > org.apache.openjpa.lib.jdbc.ConfiguringConnectionDecorator$ConfiguringConnection.prepareStatement(ConfiguringConnectionDecorator.java:158) > > at > > > org.apache.openjpa.lib.jdbc.DelegatingConnection.prepareStatement(DelegatingConnection.java:155) > > at > > > org.apache.openjpa.jdbc.sql.PostgresDictionary$PostgresConnection.prepareStatement(PostgresDictionary.java:980) > > at > > > org.apache.openjpa.lib.jdbc.DelegatingConnection.prepareStatement(DelegatingConnection.java:155) > > at > > > org.apache.openjpa.jdbc.kernel.JDBCStoreManager$RefCountConnection.prepareStatement(JDBCStoreManager.java:1653) > > at > > > org.apache.openjpa.lib.jdbc.DelegatingConnection.prepareStatement(DelegatingConnection.java:144) > > at > > > org.apache.openjpa.jdbc.sql.SelectImpl.prepareStatement(SelectImpl.java:490) > > at > > > org.apache.openjpa.jdbc.kernel.FinderQueryImpl.execute(FinderQueryImpl.java:144) > > ... 125 more > > > > So far I've come up with the following conclusions:- > > a. On the assumption I may have got a database connection in a closed > > state in the containers connection pool, I configured the connection > > pool for "connection validation", but this made no difference. > > b. After the failures, multiple EJB Statefull Session Beans, each with > > their own private EntityManager, experience the same "connection closed" > > exception > > c. No errors relating to the connection pool (i.e. exhaustion of > > connections or connection timeouts) are logged by the container > > d. No errors reported by the PostgreSQL database layer > > > > Anybody able to offer any advice on what to look for here? Any > > diagnostics in OpenJPA that would help me track this down? > > > > Thanks > > Andrew > > > > > > >