Problem with JTA/JTS - Mailing list pgsql-jdbc

From Johan Svensson
Subject Problem with JTA/JTS
Date
Msg-id 1023996645.16319.78.camel@voids
Whole thread Raw
Responses Re: Problem with JTA/JTS
Re: Problem with JTA/JTS
List pgsql-jdbc
Hi,

I've run in to some troubles using PostgreSQL 7.2 and JTA/JTS. We are
developing a J2EE application using JBossTx as JTA implementation. The
problem occurs when lots of small transactions are created and executed
sequentially. Below is a code snippet that simulates JTA interaction
with the PostgreSQL data source adapter and triggers the error.

--- begin code snippet ---

   org.postgresql.PostgresqlDataSource xaDs =
   new org.postgresql.PostgresqlDataSource();
   xaDs.setUser( "<user>" );
   xaDs.setPassword( "<pwd>" );
   xaDs.setDatabaseName( "<dbname>" );
   xaDs.setServerName( "<host>" );

   javax.sql.XAConnection xaCon = xaDs.getXAConnection();
   for ( int i = 0; i < 999; i++ )
   {
      javax.transaction.xa.XAResource xaRs = xaCon.getXAResource();
      // some xid implementation (org.jboss.tm.XidImpl)
      javax.transaction.xa.Xid xid = new SomeXidImpl();
      xaRs.start( xid, javax.transaction.xa.XAResource.TMNOFLAGS );

      Connection conn = xaDs.getXAConnection().getConnection();
      Statement stmnt = conn.createStatement();
      stmnt.executeUpdate( "INSERT INTO some_table (some_value) " +
         "VALUES (" + i + ");" );
      conn.close();

      xaRs.end( xid, javax.transaction.xa.XAResource.TMSUCCESS );
      xaRs.commit( xid, true );

      // if sleep time is removed we get exception after some iterations
      Thread.currentThread().sleep( 1000 );
   }

--- end code snippet ---

Removing the sleep will result in following exception after some
iterations:

--- begin stack trace ---

Exception in thread "main" Something unusual has occured to cause the
driver to fail. Please report this exception:
Exception: java.sql.SQLException: FATAL 1:  Sorry, too many clients
already

Stack Trace:

java.sql.SQLException: FATAL 1:  Sorry, too many clients already

 at org.postgresql.Connection.openConnection(Connection.java:274)
 at org.postgresql.Driver.connect(Driver.java:149)
 at
org.postgresql.PostgresqlDataSource.getConnection(PostgresqlDataSource.java:266)
 at
org.postgresql.PostgresqlDataSource.getConnection(PostgresqlDataSource.java:203)
 at
org.postgresql.xa.XADataSourceImpl.newConnection(XADataSourceImpl.java:293)
 at
org.postgresql.xa.XAConnectionImpl.getUnderlying(XAConnectionImpl.java:946)
 at
org.postgresql.xa.ClientConnection.getUnderlying(ClientConnection.java:554)
 at
org.postgresql.xa.ClientConnection.createStatement(ClientConnection.java:121)
 at Test.main(Test.java:147)
End of Stack Trace

 at org.postgresql.Driver.connect(Driver.java:166)
 at
org.postgresql.PostgresqlDataSource.getConnection(PostgresqlDataSource.java:266)
 at
org.postgresql.PostgresqlDataSource.getConnection(PostgresqlDataSource.java:203)
 at
org.postgresql.xa.XADataSourceImpl.newConnection(XADataSourceImpl.java:293)
 at
org.postgresql.xa.XAConnectionImpl.getUnderlying(XAConnectionImpl.java:946)
 at
org.postgresql.xa.ClientConnection.getUnderlying(ClientConnection.java:554)
 at
org.postgresql.xa.ClientConnection.createStatement(ClientConnection.java:121)
 at Test.main(Test.java:147)

--- end stack trace ---

The PostgreSQL console prints a lot of "DEBUG:  pq_recvbuf: unexpected
EOF on client connection" and one "FATAL 1:  Sorry, too many clients
already" causing the exception on our side.

It works with a delay after each completed transaction, but we cannot
have such a delay since it will decrease performance too much. Any ideas
why a delay is needed? Almost as if the db server or the java stuff
needs some time to make sure the connection is closed/free and there is
no need to create a new one.

Using java.sql.DriverManager getting a connection works fine but we need
the J2EE stuff.

Best regards,

Johan Svensson [johan.svensson@windh.net]
Kernel Developer, .windh AB


pgsql-jdbc by date:

Previous
From: "Floyd Shackelford"
Date:
Subject: Re: NullPointerExceptions in empty ResultSets
Next
From: Barry Lind
Date:
Subject: Re: NullPointerExceptions in empty ResultSets