Uploaded image for project: 'Application Server 3  4  5 and 6'
  1. Application Server 3 4 5 and 6
  2. JBAS-2526

Spec violation: CMP reports tech problem in finder as FinderException

    XMLWordPrintable

Details

    • Bug
    • Resolution: Obsolete
    • Major
    • None
    • JBossAS-3.2.7 Final
    • CMP service
    • None

    Description

      The CMP engine reports a technical error (in our case a failure to gracefully handle database restart) as an application-level FinderException.

      The EJB spec (18.2.2) clearly states that non-application exceptions should be used to report this kind of conditions.

      "This subsection describes how the Bean Provider should handle various system-level exceptions and
      errors that an enterprise bean instance may encounter during the execution of a session or entity bean
      business method, /.../
      Examples of such exceptions and errors are: failure to obtain a
      database connection,/.../
      If the enterprise bean method encounters a system-level exception or error that does not allow the
      method to successfully complete, the method SHOULD THROW A SUITABLE NON-APPLICATION EXCEPTION [submitter's cap] that is
      compatible with the method?s throws clause. /.../"

      Furthermore, the javadoc of FinderException clearly states that FinderExcepiton is an application-exception

      "The exception is used as a standard APPLICATION-LEVEL EXCEPTION [submitter's cap] to report a failure to find /.../"

      However, the JBoss implementation nevertheless throws a FinderException in this situation.

      REPRODUCTION

      Setting: JBoss with CMP, Oracle 9 DB

      1) Start DB
      2) Start JBoss w deployed application
      3) Make call to finder method (pool is now loaded)
      4) Restart database
      5) Make call to finder method (will find trashed connections in the pool)

      EXPECTED: JBoss gracefully recovers the pool (not requested) or reports problem using system exception
      ACTUAL: JBoss reports FinderException

      And here are some stacktraces that might help:

      Restart of database causes trashed connections:

      2005-12-06 10:01:30,769 WARN [org.jboss.resource.connectionmanager.JBossManagedConnectionPool] Exception destroying ManagedConnection org.jboss.resource.connectionmanager.TxConnectionManager$TxConnectionEventListener@1ae42b1[state=DESTROYED mc=org.jboss.resource.adapter.jdbc.xa.XAManagedConnection@b758b3 handles=0 lastUse=1133858776437 permit=false trackByTx=false mcp=org.jboss.resource.connectionmanager.JBossManagedConnectionPool$OnePool@1efc3d2 context=org.jboss.resource.connectionmanager.InternalManagedConnectionPool@833a2d]
      org.jboss.resource.JBossResourceException: SQLException; - nested throwable: (java.sql.SQLException: I/O-undantag: Connection reset by peer: socket write error)
      at org.jboss.resource.adapter.jdbc.BaseWrapperManagedConnection.checkException(BaseWrapperManagedConnection.java:572)
      at org.jboss.resource.adapter.jdbc.xa.XAManagedConnection.destroy(XAManagedConnection.java:110)
      at org.jboss.resource.connectionmanager.InternalManagedConnectionPool.doDestroy(InternalManagedConnectionPool.java:539)
      at org.jboss.resource.connectionmanager.InternalManagedConnectionPool.removeTimedOut(InternalManagedConnectionPool.java:415)
      at org.jboss.resource.connectionmanager.IdleRemover$1.run(IdleRemover.java:70)
      at java.lang.Thread.run(Thread.java:595)
      Caused by: java.sql.SQLException: I/O-undantag: Connection reset by peer: socket write error
      at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
      at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:179)
      at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:334)
      at oracle.jdbc.ttc7.TTC7Protocol.handleIOException(TTC7Protocol.java:3678)
      at oracle.jdbc.ttc7.TTC7Protocol.logoff(TTC7Protocol.java:400)
      at oracle.jdbc.driver.OracleConnection.close(OracleConnection.java:1504)
      at oracle.jdbc.pool.OraclePooledConnection.close(OraclePooledConnection.java:259)
      at org.jboss.resource.adapter.jdbc.xa.XAManagedConnection.destroy(XAManagedConnection.java:106)
      ... 4 more

      CMP engine reports failed find

      2005-12-06 10:02:23,409 ERROR org.jboss.ejb.plugins.cmp.jdbc.JDBCEJBQLQuery.ScannedDocument#findAvailableForLocationSinceTimestamp Find failed
      org.jboss.util.NestedSQLException: Failure to delist resource; - nested throwable: (javax.resource.ResourceException: Failure to delist resource)
      at org.jboss.resource.adapter.jdbc.WrapperDataSource.getConnection(WrapperDataSource.java:106)
      at org.jboss.ejb.plugins.cmp.jdbc.JDBCAbstractQueryCommand.execute(JDBCAbstractQueryCommand.java:208)
      at org.jboss.ejb.plugins.cmp.jdbc.JDBCAbstractQueryCommand.execute(JDBCAbstractQueryCommand.java:128)
      at org.jboss.ejb.plugins.cmp.jdbc.JDBCFindEntitiesCommand.execute(JDBCFindEntitiesCommand.java:40)
      at org.jboss.ejb.plugins.cmp.jdbc.JDBCStoreManager.findEntities(JDBCStoreManager.java:598)
      at org.jboss.ejb.plugins.CMPPersistenceManager.findEntities(CMPPersistenceManager.java:278)
      at org.jboss.resource.connectionmanager.CachedConnectionInterceptor.findEntities(CachedConnectionInterceptor.java:325)
      at org.jboss.ejb.EntityContainer.findLocal(EntityContainer.java:609)
      at sun.reflect.GeneratedMethodAccessor97.invoke(Unknown Source)
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
      at java.lang.reflect.Method.invoke(Method.java:585)
      at org.jboss.ejb.EntityContainer$ContainerInterceptor.invokeHome(EntityContainer.java:1066)
      at org.jboss.ejb.plugins.AbstractInterceptor.invokeHome(AbstractInterceptor.java:88)
      at org.jboss.ejb.plugins.EntitySynchronizationInterceptor.invokeHome(EntitySynchronizationInterceptor.java:204)
      at org.jboss.resource.connectionmanager.CachedConnectionInterceptor.invokeHome(CachedConnectionInterceptor.java:215)
      at org.jboss.ejb.plugins.AbstractInterceptor.invokeHome(AbstractInterceptor.java:88)
      at org.jboss.ejb.plugins.EntityInstanceInterceptor.invokeHome(EntityInstanceInterceptor.java:97)
      at org.jboss.ejb.plugins.EntityLockInterceptor.invokeHome(EntityLockInterceptor.java:61)
      at org.jboss.ejb.plugins.EntityCreationInterceptor.invokeHome(EntityCreationInterceptor.java:28)
      at org.jboss.ejb.plugins.AbstractTxInterceptor.invokeNext(AbstractTxInterceptor.java:88)
      at org.jboss.ejb.plugins.TxInterceptorCMT.runWithTransactions(TxInterceptorCMT.java:317)
      at org.jboss.ejb.plugins.TxInterceptorCMT.invokeHome(TxInterceptorCMT.java:130)
      at org.jboss.ejb.plugins.SecurityInterceptor.invokeHome(SecurityInterceptor.java:85)
      at org.jboss.ejb.plugins.LogInterceptor.invokeHome(LogInterceptor.java:121)
      at org.jboss.ejb.plugins.ProxyFactoryFinderInterceptor.invokeHome(ProxyFactoryFinderInterceptor.java:93)
      at org.jboss.ejb.EntityContainer.internalInvokeHome(EntityContainer.java:478)
      at org.jboss.ejb.Container.invoke(Container.java:729)
      at org.jboss.ejb.plugins.local.BaseLocalProxyFactory.invokeHome(BaseLocalProxyFactory.java:347)
      at org.jboss.ejb.plugins.local.LocalHomeProxy.invoke(LocalHomeProxy.java:110)
      at $Proxy209.findAvailableForLocationSinceTimestamp(Unknown Source)
      ...
      Caused by: javax.resource.ResourceException: Failure to delist resource
      at org.jboss.resource.connectionmanager.TxConnectionManager$TxConnectionEventListener.delist(TxConnectionManager.java:478)
      at org.jboss.resource.connectionmanager.TxConnectionManager.managedConnectionDisconnected(TxConnectionManager.java:338)
      at org.jboss.resource.connectionmanager.BaseConnectionManager2.allocateConnection(BaseConnectionManager2.java:507)
      at org.jboss.resource.connectionmanager.BaseConnectionManager2$ConnectionManagerProxy.allocateConnection(BaseConnectionManager2.java:888)
      at org.jboss.resource.adapter.jdbc.WrapperDataSource.getConnection(WrapperDataSource.java:102)
      ... 118 more

      And, at last, the FinderException

      2005-12-06 10:02:23,737 ERROR [org.jboss.ejb.plugins.LogInterceptor] EJBException in method: public abstract its.model.generated.common.ScannedDocumentPK its.domain.scanneddoc.ScannedDocumentHandlerLocal.startProcessingNext(its.domain.edim.SubQueueFilter) throws its.service.exception.ServiceException,its.domain.edim.DocumentQueueEmptyException,its.service.exception.ITSFinderException, causedBy:
      javax.ejb.FinderException: Find failed: org.jboss.util.NestedSQLException: Failure to delist resource; - nested throwable: (javax.resource.ResourceException: Failure to delist resource)
      at org.jboss.ejb.plugins.cmp.jdbc.JDBCAbstractQueryCommand.execute(JDBCAbstractQueryCommand.java:243)
      at org.jboss.ejb.plugins.cmp.jdbc.JDBCAbstractQueryCommand.execute(JDBCAbstractQueryCommand.java:128)
      at org.jboss.ejb.plugins.cmp.jdbc.JDBCFindEntitiesCommand.execute(JDBCFindEntitiesCommand.java:40)
      at org.jboss.ejb.plugins.cmp.jdbc.JDBCStoreManager.findEntities(JDBCStoreManager.java:598)
      at org.jboss.ejb.plugins.CMPPersistenceManager.findEntities(CMPPersistenceManager.java:278)
      at org.jboss.resource.connectionmanager.CachedConnectionInterceptor.findEntities(CachedConnectionInterceptor.java:325)
      at org.jboss.ejb.EntityContainer.findLocal(EntityContainer.java:609)
      at sun.reflect.GeneratedMethodAccessor97.invoke(Unknown Source)
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
      at java.lang.reflect.Method.invoke(Method.java:585)
      at org.jboss.ejb.EntityContainer$ContainerInterceptor.invokeHome(EntityContainer.java:1066)
      at org.jboss.ejb.plugins.AbstractInterceptor.invokeHome(AbstractInterceptor.java:88)
      at org.jboss.ejb.plugins.EntitySynchronizationInterceptor.invokeHome(EntitySynchronizationInterceptor.java:204)
      at org.jboss.resource.connectionmanager.CachedConnectionInterceptor.invokeHome(CachedConnectionInterceptor.java:215)
      at org.jboss.ejb.plugins.AbstractInterceptor.invokeHome(AbstractInterceptor.java:88)
      at org.jboss.ejb.plugins.EntityInstanceInterceptor.invokeHome(EntityInstanceInterceptor.java:97)
      at org.jboss.ejb.plugins.EntityLockInterceptor.invokeHome(EntityLockInterceptor.java:61)
      at org.jboss.ejb.plugins.EntityCreationInterceptor.invokeHome(EntityCreationInterceptor.java:28)
      at org.jboss.ejb.plugins.AbstractTxInterceptor.invokeNext(AbstractTxInterceptor.java:88)
      at org.jboss.ejb.plugins.TxInterceptorCMT.runWithTransactions(TxInterceptorCMT.java:317)
      at org.jboss.ejb.plugins.TxInterceptorCMT.invokeHome(TxInterceptorCMT.java:130)
      at org.jboss.ejb.plugins.SecurityInterceptor.invokeHome(SecurityInterceptor.java:85)
      at org.jboss.ejb.plugins.LogInterceptor.invokeHome(LogInterceptor.java:121)
      at org.jboss.ejb.plugins.ProxyFactoryFinderInterceptor.invokeHome(ProxyFactoryFinderInterceptor.java:93)
      at org.jboss.ejb.EntityContainer.internalInvokeHome(EntityContainer.java:478)
      at org.jboss.ejb.Container.invoke(Container.java:729)
      at org.jboss.ejb.plugins.local.BaseLocalProxyFactory.invokeHome(BaseLocalProxyFactory.java:347)
      at org.jboss.ejb.plugins.local.LocalHomeProxy.invoke(LocalHomeProxy.java:110)
      at $Proxy209.findAvailableForLocationSinceTimestamp(Unknown Source)

      Attachments

        Activity

          People

            Unassigned Unassigned
            danj_jira Dan Johnsson (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: