ConnectionRequestInfo cxRequestInfo) throws ResourceException {
logFine("In createManagedConnection");
if (dsObjBuilder == null) {
dsObjBuilder = new DataSourceObjectBuilder(spec);
}
PasswordCredential pc = SecurityUtils.getPasswordCredential(this, subject, cxRequestInfo);
try {
Class.forName(spec.getDetail(DataSourceSpec.CLASSNAME));
} catch (ClassNotFoundException cnfe) {
_logger.log(Level.SEVERE, "jdbc.exc_cnfe", cnfe);
throw new ResourceException("The driver could not be loaded: " + spec.getDetail(DataSourceSpec.CLASSNAME));
}
java.sql.Connection dsConn = null;
Properties driverProps = new Properties();
//Will return a set of properties that would have setURL and <url> as objects
//Get a set of normal case properties
Hashtable properties = dsObjBuilder.parseDriverProperties(spec, false);
Set<Map.Entry<String,Vector>> entries =
(Set<Map.Entry<String, Vector>>) properties.entrySet();
for(Map.Entry<String, Vector> entry : entries) {
String value = null;
String key = (String) entry.getKey();
Vector values = (Vector) entry.getValue();
if(!values.isEmpty() && values.size() == 1) {
value = (String) values.firstElement();
} else if(values.size() > 1) {
logFine("More than one value for key : " + key);
}
String prop = getParsedKey(key);
driverProps.put(prop, value);
if(prop.equalsIgnoreCase("URL")) {
if(spec.getDetail(DataSourceSpec.URL) == null) {
setConnectionURL(value);
}
}
}
try {
if (cxRequestInfo != null) {
driverProps.setProperty("user", pc.getUserName());
driverProps.setProperty("password", new String(pc.getPassword()));
} else {
String user = spec.getDetail(DataSourceSpec.USERNAME);
String password = spec.getDetail(DataSourceSpec.PASSWORD);
if(user != null) {
driverProps.setProperty("user", user);