/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package org.glassfish.jdbc.devtests.v3.test;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.Statement;
import java.util.HashMap;
import java.util.Map;
import javax.naming.InitialContext;
import javax.sql.DataSource;
import javax.transaction.UserTransaction;
import org.glassfish.jdbc.devtests.v3.util.HtmlUtil;
import org.glassfish.jdbc.devtests.v3.util.TablesUtil;
/**
*
* @author jagadish
*/
public class SimpleXATest implements SimpleTest {
Map<String, Boolean> resultsMap = new HashMap<String, Boolean>();
public Map<String, Boolean> runTest(DataSource ds, PrintWriter out) {
try {
if (testXA(ds, out)) {
resultsMap.put("simple-xa-test", true);
}else{
resultsMap.put("simple-xa-test", false);
}
} catch (Exception e) {
resultsMap.put("simple-xa-test", false);
}
return resultsMap;
}
private boolean testXA(DataSource ds, PrintWriter out) {
UserTransaction uTx = null;
DataSource callFlowDS = null;
String tableName1 = "xa_ds_table1";
String tableName2 = "xa_ds_table2";
Connection con1 = null;
Connection con2 = null;
Statement stmt1 = null;
Statement stmt2 = null;
try{
InitialContext ic = new InitialContext();
callFlowDS = (DataSource)ic.lookup("jdbc/jdbc-simple-xa-test-resource-2");
String columnName = "xa_ds_col";
TablesUtil.createTables(ds,out, tableName1, columnName);
TablesUtil.createTables(callFlowDS,out, tableName2, columnName);
//con1 = ds.getConnection();
//con2 = callFlowDS.getConnection();
uTx = (UserTransaction)ic.lookup("java:comp/UserTransaction");
out.println("got UserTransaction") ;
uTx.begin();
TablesUtil.insertEntry(ds, out, tableName1, "entry1");
TablesUtil.insertEntry(callFlowDS, out, tableName2, "entry1");
out.println("inserted entries <br>") ;
/* stmt1 = con1.createStatement();
stmt2 = con2.createStatement();
stmt1.executeQuery("select * from sys.systables");
stmt2.executeQuery("select * from sys.systables");
out.println("got both the resultsets<br>") ; */
uTx.commit();
out.println("able to commit") ;
}catch(Exception e){
HtmlUtil.printException(e, out);
try{
uTx.rollback();
}catch(Exception e1){
HtmlUtil.printException(e1, out);
}
return false;
}finally{
if(stmt1 != null){
try{
stmt1.close();
}catch(Exception e){}
}
if(stmt2 != null){
try{
stmt2.close();
}catch(Exception e){}
}
if(con1 != null){
try{
con1.close();
}catch(Exception e){}
}
if(con2 != null){
try{
con2.close();
}catch(Exception e){}
}
if(ds != null)
TablesUtil.deleteTables(ds, out, tableName1);
if(callFlowDS != null)
TablesUtil.deleteTables(callFlowDS, out, tableName2);
}
return true;
}
}