1 Reply Latest reply on Sep 1, 2006 6:19 AM by kconner

    JBoss Transaction Stand-Alone, trying to adapt the manual ex

      Unfortunately, the official exemple (programmer pdf manual) don´t work, so I tried to adapt the exemple to don't use JNDI.

      I tried create an Oracle XADataSource and go on.

      The exemple run without error in output BUT the rolback wasn't exectued.

      Anybody can help? I almost leave the JBoss Transaction solution =(

      public class JDBCTest2 {
      
       public static void main(String[] args) {
      
       Connection conn = null;
       Connection conn2 = null;
       Statement stmt = null; // non-tx statement
       Statement stmtx = null; // will be a tx-statement
       Properties dbProperties = new Properties();
      
       try {
      
       DataSource ds = null;
      
       try {
      
       Class oracleXADataSource = Class.forName("oracle.jdbc.xa.client.OracleXADataSource");
       ds = (DataSource) oracleXADataSource.newInstance();
       Method setUrlMethod = oracleXADataSource.getMethod("setURL", new Class[]{String.class});
       String urlOracleDB = "jdbc:oracle:thin:@<ORACLEIP>:<PORT>:<INSTANCE>";
       setUrlMethod.invoke(ds, new Object[]{new String(urlOracleDB)});
      
       } catch (Exception ex) {
      
       ex.printStackTrace();
       System.exit(0);
       }
      
       conn = ds.getConnection("user","pass");
       conn2 = ds.getConnection("user","pass");
       stmt = conn.createStatement(); // non-tx statement
      
       try {
       stmt.executeUpdate("DROP TABLE test_table");
       stmt.executeUpdate("DROP TABLE test_table2");
       } catch (Exception e) {
       // assume not in database.
       }
      
       try {
       stmt.executeUpdate("CREATE TABLE test_table (a INTEGER,b INTEGER)");
       stmt.executeUpdate("CREATE TABLE test_table2 (a INTEGER,b INTEGER)");
       } catch (Exception e) {}
      
       try {
       System.out.println("Starting top-level transaction.");
      
       com.arjuna.ats.jta.UserTransaction.userTransaction().begin();
       stmtx = conn.createStatement(); // will be a tx-statement
      
       System.out.println("\nAdding entries to table 1.");
       stmtx.executeUpdate("INSERT INTO test_table (a, b) VALUES (1,2)");
      
       ResultSet res1 = null;
       System.out.println("\nInspecting table 1.");
       res1 = stmtx.executeQuery("SELECT * FROM test_table");
       while (res1.next()) {
       System.out.println("Column 1: " + res1.getInt(1));
       System.out.println("Column 2: " + res1.getInt(2));
       }
      
       System.out.println("\nAdding entries to table 2.");
       stmtx.executeUpdate("INSERT INTO test_table2 (a, b) VALUES (3,4)");
      
       res1 = stmtx.executeQuery("SELECT * FROM test_table2");
       System.out.println("\nInspecting table 2.");
       while (res1.next()) {
       System.out.println("Column 1: " + res1.getInt(1));
       System.out.println("Column 2: " + res1.getInt(2));
       }
      
       System.out.print("\nNow attempting to rollback changes.");
       com.arjuna.ats.jta.UserTransaction.userTransaction().rollback();
      
       com.arjuna.ats.jta.UserTransaction.userTransaction().begin();
       stmtx = conn.createStatement();
       ResultSet res2 = null;
       System.out.println("\nNow checking state of table 1.");
       res2 = stmtx.executeQuery("SELECT * FROM test_table");
       while (res2.next()) {
       System.out.println("Column 1: " + res2.getInt(1));
       System.out.println("Column 2: " + res2.getInt(2));
       }
      
       System.out.println("\nNow checking state of table 2.");
       stmtx = conn.createStatement();
       res2 = stmtx.executeQuery("SELECT * FROM test_table2");
       while (res2.next()) {
       System.out.println("Column 1: " + res2.getInt(1));
       System.out.println("Column 2: " + res2.getInt(2));
       }
       com.arjuna.ats.jta.UserTransaction.userTransaction().commit();
      
       } catch (Exception ex) {
       ex.printStackTrace();
       System.exit(0);
       }
      
       } catch (Exception sysEx) {
       sysEx.printStackTrace();
       System.exit(0);
       }
      
       }
      
      }
      


        • 1. Re: JBoss Transaction Stand-Alone, trying to adapt the manua
          kconner

          It does not look like you are enlisting the connections in the transaction. Why do you expect them to execute in a transactional context?

          You should be using an XADataSource, an XAConnection and elisting the XAResource in the transaction.

          If you were running the body of your code from within an application server then it would take care of these issues for you. You have to do it manually when you are running standalone.

          Please look at the trailmap for an example.