JBoss Transaction Stand-Alone, trying to adapt the manual ex
wandi Aug 29, 2006 3:24 PMUnfortunately, 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);
 }
 }
}