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