This is an example of ending a transaction in your application.
import java.sql.*; import javax.sql.*; import java.util.*; import javax.transaction.*; import javax.transaction.xa.*; import com.ibm.db2.jdbc.app.*; public class JTATxEnd { public static void main(java.lang.String[] args) { JTATxEnd test = new JTATxEnd(); test.setup(); test.run(); } /** * Handle the previous cleanup run so that this test can recommence. */ public void setup() { Connection c = null; Statement s = null; try { Class.forName("com.ibm.db2.jdbc.app.DB2Driver"); c = DriverManager.getConnection("jdbc:db2:*local"); s = c.createStatement(); try { s.executeUpdate("DROP TABLE CUJOSQL.JTATABLE"); } catch (SQLException e) { // Ignore... does not exist } s.executeUpdate("CREATE TABLE CUJOSQL.JTATABLE (COL1 CHAR (50))"); s.executeUpdate("INSERT INTO CUJOSQL.JTATABLE VALUES('Fun with JTA')"); s.executeUpdate("INSERT INTO CUJOSQL.JTATABLE VALUES('JTA is fun.)"); s.close(); } finally { if (c != null) { c.close(); } } } /** * This test use JTA support to handle transactions. */ public void run() { Connection c = null; try { Context ctx = new InitialContext(); // Assume the data source is backed by a UDBXADataSource. UDBXADataSource ds = (UDBXADataSource) ctx.lookup("XADataSource"); // From the DataSource, obtain an XAConnection object that // contains an XAResource and a Connection object. XAConnection xaConn = ds.getXAConnection(); XAResource xaRes = xaConn.getXAResource(); Connection c = xaConn.getConnection(); // For XA transactions, transaction identifier is required. // An implementation of the XID interface is not included // with the JDBC driver. See Transactions with JTA for a // description of this interface to build a class for it. Xid xid = new XidImpl(); // The connection from the XAResource can be used as any other // JDBC connection. Statement stmt = c.createStatement(); // The XA resource must be notified before starting any // transactional work. xaRes.start(xid, XAResource.TMNOFLAGS); // Create a ResultSet during JDBC processing and fetch a row. ResultSet rs = stmt.executeUpdate("SELECT * FROM CUJOSQL.JTATABLE"); rs.next(); // When the end method is called, all ResultSet cursors close. // Accessing the ResultSet after this point results in an // exception being thrown. xaRes.end(xid, XAResource.TMNOFLAGS); try { String value = rs.getString(1); System.out.println("Something failed if you receive this message."); } catch (SQLException e) { System.out.println("The expected exception was thrown."); } // Commit the transaction to ensure that all locks are // released. int rc = xaRes.prepare(xid); xaRes.commit(xid, false); } catch (Exception e) { System.out.println("Something has gone wrong."); e.printStackTrace(); } finally { try { if (c != null) c.close(); } catch (SQLException e) { System.out.println("Note: Cleaup exception."); e.printStackTrace(); } } } }