/*
* 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.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;
/**
*
* @author jagadish
*/
public class LazyConnectionEnlistmentTest implements SimpleTest {
Map<String, Boolean> resultsMap = new HashMap<String, Boolean>();
UserTransaction uTx;
InitialContext ic;
public Map<String, Boolean> runTest(DataSource ds1, PrintWriter out) {
try {
if (testLazyEnlist_1(ds1, out)) {
resultsMap.put("lazy-connection-enlistment", true);
}else{
resultsMap.put("lazy-connection-enlistment", false);
}
} catch (Exception e) {
resultsMap.put("lazy-connection-enlistment", false);
}
return resultsMap;
}
private boolean testLazyEnlist_1(DataSource ds1, PrintWriter out) {
Connection con1 = null;
Connection con2 = null;
boolean result = false;
try{
ic = new InitialContext();
uTx = (UserTransaction)ic.lookup("java:comp/UserTransaction");
out.println("got UserTransaction") ;
uTx.begin();
con1 = ds1.getConnection();
//this is a lazy-enlist resource, only when the connection is used, it should be enlisted in transaction.
//if it had been non-lazy-enlist, exception will be thrown stating not more than one non-xa resource can be
//enlisted in a transaction.
DataSource ds2 = (DataSource)ic.lookup("jdbc/jdbc-lazy-enlist-resource-2");
con2 = ds2.getConnection();
uTx.commit();
out.println("able to commit") ;
result = true;
}catch(Exception e){
HtmlUtil.printException(e, out);
}finally{
if(con1 != null){
try{
con1.close();
}catch(Exception e){}
}
if(con2 != null){
try{
con2.close();
}catch(Exception e){}
}
}
return result;
}
}