0 Replies Latest reply on Apr 28, 2009 8:26 AM by idhira

    Handling Application Exceptions within MDBs and EJBs

    idhira

      I am running JBoss 4.2.3 with JBoss Messaging 1.4.2.GA-SP1

      This is related to Container Managed Transactions and handling Application Exceptions within EJBs and MDBs.

      The following are the exceptions I use:
      MyRetryException - Extends Exception
      MyEJBRetryRuntimeException - Extends Runtime Exception. Annotated with @ApplicationException ( rollback = false )

      The following represents a scenario I am testing.

      public class myMDB implements MessageListener
      {
       @EJB
       MyEJB myEJB;
      
       public void onMessage( Message msg )
       {
      
       try
       {
       myEJB.process(); // uses the transaction from the MDB
       }
       catch ( MyEJBRetryRuntimeException e )
       {
       myEJB.handleException( e ); // starts a new transaction
       throw e; // I want this message to be redelivered
       }
       }
      }


      In myEJB...
      @TransactionAttribute( TransactionAttributeType.SUPPORTS )
      public void process()
      {
       try
       {
       throw new MyRetryException ("test");
       }
       catch ( MyRetryException e )
       {
       throw new MyEJBRetryRuntimeException(e);
       }
      }
      
      @TransactionAttribute( TransactionAttributeType.REQUIRES_NEW )
      public void handleException( Exception ex )
      {
       Connection conn = datasource.getConnection(); <-- throws an exception.
      
      }


      The handleException method tries to obtain a jdbc connection but throws the exception: javax.resource.ResourceException: Interrupted while requesting permit! Waited 0 ms.

      According to http://www.jboss.org/community/docs/DOC-10001 it seems that i would get this error when a transaction is rolled back but I am throwing an ApplicationException with rollback = false. Is there something I'm not doing right? Any help would be appreciated.