2 Replies Latest reply on Aug 1, 2008 1:38 AM by gan.gary

    set a rolled-back txn back to active

    gan.gary

      have Java/HIbernate apps. When run in Eclipse/JAR file with this, it works fine.

      public void saveToDatabase() throws Exception
      {
       Transaction txReporting = null;
       try{
       txReporting = sesReporting.beginTransaction();
       ...
       txReporting.commit();
       } catch (Exception e) {
       if (txReporting != null) {
       // Something went wrong; discard all partial changes
       txReporting.rollback();
       // nested try-catch loop to catch all errors
       try{
       // for logging purpose
       txReporting = sesReporting.beginTransaction();
       ...
       txReporting.commit();
       } catch (Exception ex) {
       throw ex;
       }
       }
       throw e;
       }
       }



      But when I throw this into JBoss, I hit:

      2008-07-23 17:46:04,291 DEBUG [org.hibernate.util.JDBCExceptionReporter] Cannot open connection [???]
      org.jboss.util.NestedSQLException: Transaction is not active: tx=TransactionImple < ac, BasicAction: acc550a:c94:4886fda0:41 status: ActionStatus.ABORT_ONLY >; - nested throwable: (javax.resource.ResourceException: Transaction is not active: tx=TransactionImple < ac, BasicAction: acc550a:c94:4886fda0:41 status: ActionStatus.ABORT_ONLY >)
      ...
      Caused by: javax.resource.ResourceException: Transaction is not active: tx=TransactionImple < ac, BasicAction: acc550a:c94:4886fda0:41 status: ActionStatus.ABORT_ONLY >
      at org.jboss.resource.connectionmanager.TxConnectionManager.getManagedConnection(TxConnectionManager.java:304)
      at org.jboss.resource.connectionmanager.BaseConnectionManager2.allocateConnection(BaseConnectionManager2.java:396)
      at org.jboss.resource.connectionmanager.BaseConnectionManager2$ConnectionManagerProxy.allocateConnection(BaseConnectionManager2.java:842)
      at org.jboss.resource.adapter.jdbc.WrapperDataSource.getConnection(WrapperDataSource.java:88)
      ... 53 more
      2008-07-23 17:46:04,307 WARN [org.hibernate.util.JDBCExceptionReporter] SQL Error: 0, SQLState: null
      2008-07-23 17:46:04,307 ERROR [org.hibernate.util.JDBCExceptionReporter] Transaction is not active: tx=TransactionImple < ac, BasicAction: acc550a:c94:4886fda0:41 status: ActionStatus.ABORT_ONLY >; - nested throwable: (javax.resource.ResourceException: Transaction is not active: tx=TransactionImple < ac, BasicAction: acc550a:c94:4886fda0:41 status: ActionStatus.ABORT_ONLY >)
      2008-07-23 17:46:04,307 ERROR [STDERR] org.hibernate.exception.GenericJDBCException: Cannot open connection


      anyone?
      is this called "multiple one-phase" : http://wiki.jboss.org/wiki/Multiple1PC ?

      I thought using 2 separate transactions is required MSDTC (change <local-tx-datasource> to <xa-datasource>. )?

      when i do this in between code:

      txReporting.rollback();
      if(txReporting.wasRolledBack())
       System.out.printf("txReporting.wasRolledBack \n");
      if(txReporting.isActive())
       System.out.printf("txReporting.isActive \n");



      It never show "txReporting.isActive" after txn.rolledback. But there's no option/method to set it to active?

      anyone?