[jboss-jira] [JBoss JIRA] (JBJCA-1014) DataSource class is never picked for establishing connection, driverClass is always picked.
Himanshu Bhardwaj (JIRA)
jira-events at lists.jboss.org
Thu Mar 21 02:05:43 EDT 2013
Himanshu Bhardwaj created JBJCA-1014:
----------------------------------------
Summary: DataSource class is never picked for establishing connection, driverClass is always picked.
Key: JBJCA-1014
URL: https://issues.jboss.org/browse/JBJCA-1014
Project: IronJacamar
Issue Type: Bug
Components: JDBC
Affects Versions: 1.0.13.Final
Environment: Windows-7, JBoss AS-7.1, SQL Server, JDK-1.7.0
Reporter: Himanshu Bhardwaj
Assignee: Jesper Pedersen
Use Case: Implemented a custom datasource for some extension purposes over sqljdbc4.jar (JDBC-4 compliant).
Now when configuring the datasource, the module was loaded successfully, the configuration used in standalone.xml:
<datasource jta="true" jndi-name="java:jboss/datasources/ejb/testdbjndi" pool-name="test-cluster-Pool" enabled="true" use-java-context="true" use-ccm="false">
<connection-url>jdbc:sqlserver://localhost:1433;databaseName=cm-6.5;</connection-url>
<datasource-class>com.himanshu.jdbcdriver.datasource.DataSource</datasource-class>
<connection-property name="serverName">
<!-- IP of the database server -->
</connection-property>
<driver>test-jdbc</driver>
<new-connection-sql>SET DATEFIRST 1</new-connection-sql>
<pool>
<min-pool-size>10</min-pool-size>
<max-pool-size>100</max-pool-size>
<prefill>false</prefill>
</pool>
<security>
<user-name>sa</user-name>
<password>sa</password>
</security>
<statement>
<prepared-statement-cache-size>32</prepared-statement-cache-size>
<share-prepared-statements>true</share-prepared-statements>
</statement>
</datasource>
<driver name="test-jdbc" module="com.himanshu.jdbc"/>
Now on doing testing the connections were successfully established and queries were getting executed.
But it turns out the my custom datasource class is not used, rather the connection is made via driverClass, DriverManager.getConnection() kind of method.
On debugging code for ironjacamar:
org.jboss.ironjacamar
ironjacamar-jdbc
1.0.13.Final-redhat-1
On looking code for "org.jboss.jca.adapters.jdbc.local.LocalManagedConnectionFactory", it turns out that both the driverClass property (META-INF/services/java.sql.driver file) and dataSourceClass property (from standalone.xml) is read.
Now the way connection is made is bit confusing here.
Looking into method: private LocalManagedConnection getLocalManagedConnection(Properties props, Properties copy); in class
"LocalManagedConnectionFactory"
private LocalManagedConnection getLocalManagedConnection(Properties props, Properties copy)
throws ResourceException
{
Connection con = null;
try
{
if (driverClass != null)
{
String url = getConnectionURL();
Driver d = getDriver(url);
con = d.connect(url, copy);
if (con == null)
throw new ResourceException("Wrong driver class [" + d.getClass() + "] for this connection URL [" +
url + "]");
}
else
{
DataSource d = getDataSource();
con = d.getConnection(copy.getProperty("user"), copy.getProperty("password"));
if (con == null)
throw new ResourceException("Unable to create connection from datasource");
}
return new LocalManagedConnection(this, con, props, transactionIsolation, preparedStatementCacheSize);
}
catch (Throwable e)
{
if (con != null)
{
try
{
con.close();
}
catch (Throwable ignored)
{
// Ignore
}
}
throw new ResourceException("Could not create connection", e);
}
}
Now the if-else block condition here is difficult to understand:
If I have driverClass available then all the connections are made via driverClass property, even if I mention datasourceClass or not.
This is because the first if condition always checks for driverClass the dataSourceClass check never executes.
So the question is how this can be avoided, becuase the DriverClass is picked automatically from the java.sql.driver file (being JDBC-4 compliant).
If there is no configuration for the same for giving priority to datasource class or explicitly setting the driver class to null, then definitely something's amiss.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira
More information about the jboss-jira
mailing list