package org.glassfish.jdbc.devtests.v3.test;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.ResultSet;
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 shalini
*/
public class NoTxConnTest implements SimpleTest {
Map<String, Boolean> resultsMap = new HashMap<String, Boolean>();
public Map<String, Boolean> runTest(DataSource ds, PrintWriter out) {
/*try {
if (testNoTxConnTest1(ds, out)) {
resultsMap.put("no-tx-test1", true);
}else{
resultsMap.put("no-tx-test1", false);
}
} catch (Exception e) {
resultsMap.put("no-tx-test1", false);
}*/
try {
if (testNoTxConnTest2(ds, out)) {
resultsMap.put("no-tx-test2", true);
}else{
resultsMap.put("no-tx-test2", false);
}
} catch (Exception e) {
resultsMap.put("no-tx-test2", false);
}
HtmlUtil.printHR(out);
return resultsMap;
}
private boolean testNoTxConnTest1(DataSource ds, PrintWriter out) {
boolean result = false;
Connection conn = null;
Connection noTxConn = null;
Statement stmt = null;
Statement stmt2 = null;
ResultSet rs = null;
ResultSet rs2 = null;
String tableName = "NOTXCONNTABLE";
String content = "method1";
String columnName = "name";
TablesUtil.createTables(ds, out, tableName, columnName);
out.println("<h4> NoTxConn Test1 </h4>");
UserTransaction tx = null;
try {
out.println("<br>");
out.println("Starting test ...");
InitialContext ctx = new InitialContext();
tx =(UserTransaction) ctx.lookup("java:comp/UserTransaction");
out.println("<br>Able to lookup UserTransaction");
tx.begin();
out.println("<br>");
out.println("Started UserTransaction<br>");
out.println("Trying to get connection ...<br>");
out.println("ds value : " + ds);
conn = ds.getConnection();
out.println("<br>Got connection - conn : " + conn);
noTxConn = ((com.sun.appserv.jdbc.DataSource)ds).getNonTxConnection();
out.println("<br>Got noTx connection - noTxConn : " + noTxConn);
stmt = conn.createStatement();
stmt.executeUpdate("INSERT INTO " + tableName + " VALUES('" +
content + "')");
stmt2 = noTxConn.createStatement();
rs2 = stmt2.executeQuery("SELECT * FROM " + tableName);
if ( rs2.next() ) {
result = false;
}
String query1 = "SELECT * FROM " + tableName;
rs = stmt.executeQuery(query1);
tx.commit();
result = true;
} catch (Exception e) {
HtmlUtil.printException(e, out);
tx.rollback();
result = false;
} finally {
if (rs != null ) {
try { rs.close(); } catch( Exception e1) {
HtmlUtil.printException(e1, out);
}
}
if (stmt != null ) {
try {stmt.close(); } catch( Exception e1) {
HtmlUtil.printException(e1, out);
}
}
if (conn != null ) {
try {conn.close();} catch( Exception e1) {
HtmlUtil.printException(e1, out);
}
}
if (rs2 != null ) {
try {rs2.close();} catch( Exception e1 ) {
HtmlUtil.printException(e1, out);
}
}
if (stmt2 != null ) {
try {stmt2.close(); } catch( Exception e1) {
HtmlUtil.printException(e1, out);
}
}
if (noTxConn != null ) {
try { noTxConn.close(); }catch( Exception e1) {
HtmlUtil.printException(e1, out);
}
}
TablesUtil.deleteTables(ds, out, tableName);
out.println("<br> Test result : " + result);
return result;
}
}
private boolean testNoTxConnTest2(DataSource ds, PrintWriter out) {
boolean result = false;
Connection conn = null;
Connection noTxConn = null;
out.println("<h4> NoTxConn Test2 </h4>");
javax.transaction.UserTransaction tx = null;
try {
out.println("<br>Starting test ...");
InitialContext ctx = new InitialContext();
tx =(UserTransaction)ctx.lookup("java:comp/UserTransaction");
out.println("<br>Able to lookup UserTransaction");
tx.begin();
out.println("<br>Started UserTransaction");
out.println("<br>Getting TRANSACTIONAL connection");
conn = ds.getConnection();
out.println("<br>Autocommit of conn => " + conn.getAutoCommit());
if (conn.getAutoCommit() == true ) {
result = false;
}
conn.close();
for (int i = 0; i < 20; i++ ) {
out.println("<br>Getting NonTx connection");
noTxConn = ((com.sun.appserv.jdbc.DataSource)ds).getNonTxConnection();
out.println("<br>Autocommit of noTxConn => " + noTxConn.getAutoCommit());
if (noTxConn.getAutoCommit() == false ) {
result = false;
}
noTxConn.close();
}
out.println("<br>Getting TRANSACTIONAL connection");
conn = ds.getConnection();
out.println("<br>Autocommit of conn => " + conn.getAutoCommit());
if (conn.getAutoCommit() == true ) {
result = false;
}
conn.close();
tx.commit();
result = true;
} catch (Exception e) {
HtmlUtil.printException(e, out);
tx.rollback();
result = false;
} finally {
try {
if (noTxConn != null ) {
noTxConn.close();
}
} catch( Exception e1 ) {
HtmlUtil.printException(e1, out);
}
out.println("<br> Test result : " + result);
return result;
}
}
}