/*
* 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 org.glassfish.jdbc.devtests.v3.util.HtmlUtil;
/**
*
* @author jagadish
*/
public class DoubleResourceReferenceTest implements SimpleTest {
Map<String, Boolean> resultsMap = new HashMap<String, Boolean>();
public Map<String, Boolean> runTest(DataSource ds, PrintWriter out) {
try {
if (testDoubleResourceReference(ds, out)) {
resultsMap.put("Double-resource-reference-test", true);
}else{
resultsMap.put("Double-resource-reference-test", false);
}
} catch (Exception e) {
resultsMap.put("Double-resource-reference-test", false);
}
HtmlUtil.printHR(out);
return resultsMap;
}
/**
* test whether two resources referring to same pool does not cause pool over-write.
* @param ds1
* @param out
* @return
*/
private boolean testDoubleResourceReference(DataSource ds1, PrintWriter out) {
boolean result = false;
Connection con1 = null;
Connection con2 = null;
Statement stmt1 = null;
Statement stmt2 = null;
try{
//Initialize pool via first resource
con1 = ds1.getConnection();
InitialContext ic = new InitialContext();
DataSource ds2 = (DataSource) ic.lookup("jdbc/double-resource-reference-resource-2");
//Initialize (or reuse) pool via first resource
con2 = ds2.getConnection();
//If this passes, pool is reused by both resources, no over-write happens
stmt1 = con1.createStatement();
stmt2 = con2.createStatement();
result = true;
}catch(Exception e){
HtmlUtil.printException(e, out);
}finally{
if(stmt1 != null){
try{
stmt1.close();
}catch(Exception e){}
}
if(con1 != null){
try{
con1.close();
}catch(Exception e){}
}
if(stmt2 != null){
try{
stmt2.close();
}catch(Exception e){}
}
if(con2 != null){
try{
con2.close();
}catch(Exception e){}
}
}
return result;
}
}