1 Reply Latest reply on Mar 16, 2004 2:36 PM by Adrian Brock

    Firebird JDBC driver and JCA get NPE under load.

    Jeff Bannister Newbie

      Hi,

      I have an application that consists of 5 MDBs processing a message queue. Each MDB updates an entity bean and creates a new record in the database. When the application is running for a large number of messages say 10,000 a small number say 5 in 1000 messages fail to be process successfully due to a NullPointerException thrown from inside the JDBC driver.

      I am using Firebird database v1.0.1 & JayBird JDBC driver, virutally unmodifed firebird-ds.xml apart for logins, path etc, and firebirdsql.rar.
      My MDB has transaction attribute 'NotSupported'

      I have initially raised this NPE on the firebird-java forum and one of the driver developers has checked the driver code and claims the issue maybe being caused by the JBoss JCA layer that wraps the JDBC driver.

      This post can be found at http://groups.yahoo.com/group/Firebird-Java/message/5307

      Also when this NPE occurs it looks like I leak a database connection, so that at the end of the job I have approx 1 extra connection for each error.

      So if the max pool size is 50 and the job has 30 of these exceptions the number of connections opened to the database server is approx 80.

      Has anyone successfully used Firebird v1.0.1, the Jaybird JDBC driver, and JBoss JCA wrapper on an application under load and has any success?

      I'm unsure of where to go next with this issue, what can I try next?

      regards,

      Jeff.

      14:09:29,031,MailProcessorBean] Unable to store email sent record : null
      STACK TRACE BEGIN[###################
      java.lang.NullPointerException
      at org.firebirdsql.jgds.GDS_Impl.isc_start_transaction(GDS_Impl.java:486)
      at org.firebirdsql.jca.FBManagedConnectionFactory.getCurrentIscTrHandle(FBManagedConnectionFactory.java:491)
      at org.firebirdsql.jca.FBManagedConnection.findIscTrHandle(FBManagedConnection.java:1064)
      at org.firebirdsql.jca.FBManagedConnection.internalStart(FBManagedConnection.java:676)
      at org.firebirdsql.jca.FBLocalTransaction.internalBegin(FBLocalTransaction.java:118)
      at org.firebirdsql.jca.FBLocalTransaction.begin(FBLocalTransaction.java:103)
      at org.firebirdsql.jdbc.FBConnection.ensureInTransaction(FBConnection.java:998)
      at org.firebirdsql.jdbc.FBPreparedStatement.(FBPreparedStatement.java:77)
      at org.firebirdsql.jdbc.FBConnection.prepareStatement(FBConnection.java:243)
      at com.beetleweed.bulkmail.ejbs.MailDAO.store(MailDAO.java:29)
      at com.beetleweed.bulkmail.ejbs.MailProcessorBean.onMessage(MailProcessorBean.java:293)
      at sun.reflect.GeneratedMethodAccessor179.invoke(Unknown Source)
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
      at java.lang.reflect.Method.invoke(Method.java:324)
      at org.jboss.ejb.MessageDrivenContainer$ContainerInterceptor.invoke(MessageDrivenContainer.java:460)
      at org.jboss.resource.connectionmanager.CachedConnectionInterceptor.invoke(CachedConnectionInterceptor.java:185)
      at org.jboss.ejb.plugins.MessageDrivenInstanceInterceptor.invoke(MessageDrivenInstanceInterceptor.java:62)
      at org.jboss.ejb.plugins.AbstractTxInterceptor.invokeNext(AbstractTxInterceptor.java:84)
      at org.jboss.ejb.plugins.TxInterceptorCMT.runWithTransactions(TxInterceptorCMT.java:240)
      at org.jboss.ejb.plugins.TxInterceptorCMT.invoke(TxInterceptorCMT.java:128)
      at org.jboss.ejb.plugins.RunAsSecurityInterceptor.invoke(RunAsSecurityInterceptor.java:90)
      at org.jboss.ejb.plugins.LogInterceptor.invoke(LogInterceptor.java:191)
      at org.jboss.ejb.plugins.ProxyFactoryFinderInterceptor.invoke(ProxyFactoryFinderInterceptor.java:122)
      at org.jboss.ejb.MessageDrivenContainer.internalInvoke(MessageDrivenContainer.java:374)
      at org.jboss.ejb.Container.invoke(Container.java:700)
      at org.jboss.ejb.plugins.jms.JMSContainerInvoker.invoke(JMSContainerInvoker.java:824)
      at org.jboss.ejb.plugins.jms.JMSContainerInvoker$MessageListenerImpl.onMessage(JMSContainerInvoker.java:1114)
      at org.jboss.jms.asf.StdServerSession.onMessage(StdServerSession.java:256)
      at org.jboss.mq.SpyMessageConsumer.sessionConsumerProcessMessage(SpyMessageConsumer.java:633)
      at org.jboss.mq.SpyMessageConsumer.addMessage(SpyMessageConsumer.java:433)
      at org.jboss.mq.SpySession.run(SpySession.java:298)
      at org.jboss.jms.asf.StdServerSession.run(StdServerSession.java:180)
      at EDU.oswego.cs.dl.util.concurrent.PooledExecutor$Worker.run(PooledExecutor.java:732)
      at java.lang.Thread.run(Thread.java:536)

      STACK TRACE END#####################]




        • 1. Re: Firebird JDBC driver and JCA get NPE under load.
          Adrian Brock Master

          You haven't posted much information except the NPE in somebody else's code.

          You can see what jboss is doing if you enable TRACE logging for org.jboss.resource
          It will be doing very little except pooling.
          You also don't post your JBoss version or explain what the MDB is doing with the
          connection.

          I would also comment that an JDBC Driver should never throw an NPE. It
          should always wrap it an SQLException.

          You could always try JBoss's JDBC RAR. Just copy one of the dbs and
          fill in the parameters.

          Regards,
          Adrian