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); } } }