[jboss-jira] [JBoss JIRA] (JBJCA-1014) DataSource class is never picked for establishing connection, driverClass is always picked.
RH Bugzilla Integration (JIRA)
issues at jboss.org
Tue Aug 26 11:13:02 EDT 2014
[ https://issues.jboss.org/browse/JBJCA-1014?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12995847#comment-12995847 ]
RH Bugzilla Integration commented on JBJCA-1014:
------------------------------------------------
Martin Simka <msimka at redhat.com> changed the Status of [bug 957175|https://bugzilla.redhat.com/show_bug.cgi?id=957175] from NEW to CLOSED
> 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
> Security Level: Public(Everyone can see)
> 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
> Labels: JDBC
>
> 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 was sent by Atlassian JIRA
(v6.3.1#6329)
More information about the jboss-jira
mailing list