Uploaded image for project: 'JBoss Enterprise Application Platform'
  1. JBoss Enterprise Application Platform
  2. JBEAP-25950

[GSS](7.4.z) Misleading error message - IJ031083: Wrong driver class

    XMLWordPrintable

Details

    • Bug
    • Resolution: Duplicate
    • Major
    • None
    • None
    • JCA
    • None
    • False
    • None
    • False

    Description

      Using Enterprise DB edb-jdbc-42.2.12.1.jar , the driver is com.edb.Driver which is in META-INF/services/java.sql.Driver.

      Bundle-Description: Java JDBC 4.2 (JRE 8+) driver for EnterpriseDB database
      Implementation-Title: EnterpriseDB JDBC Driver - JDBC 4.2

      This configuration:

                      <datasource jndi-name="java:jboss/PostgresDS" pool-name="PostgresDS">
                          <connection-url>jdbc:postgresql://localhost:5432/postgresdb</connection-url>
                          <driver>postgresql</driver>
                          <security>
                              <user-name>admin</user-name>
                              <password>admin</password>
                          </security>
                          <validation>
                              <valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLValidConnectionChecker"/>
                              <validate-on-match>true</validate-on-match>
                              <background-validation>false</background-validation>
                              <exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLExceptionSorter"/>
                          </validation>
                      </datasource>
                      <drivers>
                          <driver name="h2" module="com.h2database.h2">
                              <xa-datasource-class>org.h2.jdbcx.JdbcDataSource</xa-datasource-class>
                          </driver>
                          <driver name="postgresql" module="com.postgresql">
                              <xa-datasource-class>com.edb.xa.PGXADataSource</xa-datasource-class>
                          </driver>
                      </drivers>

      Throws this error below:

      Throws this error below:

      Caused by: javax.resource.ResourceException: IJ000453: Unable to get managed connection for java:jboss/PostgresDS
         at org.jboss.jca.core.connectionmanager.AbstractConnectionManager.getManagedConnection(AbstractConnectionManager.java:690)
         at org.jboss.jca.core.connectionmanager.tx.TxConnectionManagerImpl.getManagedConnection(TxConnectionManagerImpl.java:440)
         at org.jboss.jca.core.connectionmanager.AbstractConnectionManager.allocateConnection(AbstractConnectionManager.java:789)
         at org.jboss.jca.adapters.jdbc.WrapperDataSource.getConnection(WrapperDataSource.java:152)
         ... 58 more
      Caused by: javax.resource.ResourceException: IJ031084: Unable to create connection
         at org.jboss.jca.adapters.jdbc.local.LocalManagedConnectionFactory.createLocalManagedConnection(LocalManagedConnectionFactory.java:364)
         at org.jboss.jca.adapters.jdbc.local.LocalManagedConnectionFactory.getLocalManagedConnection(LocalManagedConnectionFactory.java:371)
         at org.jboss.jca.adapters.jdbc.local.LocalManagedConnectionFactory.createManagedConnection(LocalManagedConnectionFactory.java:287)
         at org.jboss.jca.core.connectionmanager.pool.mcp.SemaphoreConcurrentLinkedDequeManagedConnectionPool.createConnectionEventListener(SemaphoreConcurrentLinkedDequeManagedConnectionPool.java:1328)
         at org.jboss.jca.core.connectionmanager.pool.mcp.SemaphoreConcurrentLinkedDequeManagedConnectionPool.getConnection(SemaphoreConcurrentLinkedDequeManagedConnectionPool.java:505)
         at org.jboss.jca.core.connectionmanager.pool.AbstractPool.getTransactionNewConnection(AbstractPool.java:770)
         at org.jboss.jca.core.connectionmanager.pool.AbstractPool.getConnection(AbstractPool.java:666)
         at org.jboss.jca.core.connectionmanager.AbstractConnectionManager.getManagedConnection(AbstractConnectionManager.java:624)
         ... 61 more
      Caused by: javax.resource.ResourceException: IJ031083: Wrong driver class [com.edb.Driver] for this connection URL [jdbc:postgresql://localhost:5432/postgresdb]
         at org.jboss.jca.adapters.jdbc.local.LocalManagedConnectionFactory.createLocalManagedConnection(LocalManagedConnectionFactory.java:337)
         ... 68 more

      You can also specify <driver-class>com.edb.Driver</driver-class> and get the same error.

      The error is misleading because it is saying the driver class com.edb.Driver is wrong, but the actual issue is a <datasource> is being defined but the driver only has <xa-datasource-class> , so it is wanting the <datasource-class> to be specified such as this:

                          <driver name="enterprisedb" module="com.edb">
                              <datasource-class>com.edb.ds.PGSimpleDataSource</datasource-class>
                              <xa-datasource-class>com.edb.xa.PGXADataSource</xa-datasource-class>
                          </driver>

      com.edb.xa.PGXADataSource implements XADataSource but not DataSource.  Some other jdbc datasources implement both such as 

      org.h2.jdbcx.JdbcDataSource implements XADataSource, DataSource ...

      Since H2 does not complain, it is probably IronJacamar using the xa-datasource-class and casting to DataSource , though we would have to check the code.

                      <datasource jndi-name="java:jboss/datasources/ExampleDS" pool-name="ExampleDS" enabled="true" use-java-context="true" statistics-enabled="${wildfly.datasources.statistics-enabled:${wildfly.statistics-enabled:false}}">
                          <connection-url>jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE</connection-url>
                          <driver>h2</driver>
                          <security>
                              <user-name>sa</user-name>
                              <password>sa</password>
                          </security>
                      </datasource>
                      <drivers>
                          <driver name="h2" module="com.h2database.h2">
                              <xa-datasource-class>org.h2.jdbcx.JdbcDataSource</xa-datasource-class>
                          </driver>
                      </drivers>

      For this error, it should say something more like com.edb.xa.PGXADataSource does not implement javax.sql.DataSource

      Attachments

        Issue Links

          Activity

            People

              chaowan@redhat.com Chao Wang
              rhn-support-bmaxwell Brad Maxwell
              Votes:
              0 Vote for this issue
              Watchers:
              2 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: