SQLMX/IBM-liberty-datasource: 未找到有效的 jdbc 驱动程序

SQLMX/IBM-liberty-datasource: Valid jdbc driver not found

虽然我在 <liberty_server>/lib folder 中包含了 t4sqlmx-3.3.jar,但我得到了以下 jdbc driver not found error。还需要进行哪些更改?

<library id="sqlmx-lib">
    <fileset dir="lib" includes="t4sqlmx-3.3.jar"/>
</library>

错误:

Caused by: java.sql.SQLNonTransientException: DSRA4000E: A valid JDBC driver implementation class was not found for the jdbcDriver dataSource[default-0]/jdbcDriver[default-0] using the library sqlmx-lib. []
    at com.ibm.ws.jdbc.internal.JDBCDriverService.classNotFound(JDBCDriverService.java:207)
    at com.ibm.ws.jdbc.internal.JDBCDriverService.createAnyDataSource(JDBCDriverService.java:368)
    at com.ibm.ws.jdbc.DataSourceService.init(DataSourceService.java:592)
    at com.ibm.ws.jca.cm.AbstractConnectionFactoryService.run(AbstractConnectionFactoryService.java:460)
    at com.ibm.ws.jca.cm.AbstractConnectionFactoryService.run(AbstractConnectionFactoryService.java:457)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.ibm.ws.jca.cm.AbstractConnectionFactoryService.initPrivileged(AbstractConnectionFactoryService.java:457)
    at com.ibm.ws.jca.cm.AbstractConnectionFactoryService.createResource(AbstractConnectionFactoryService.java:144)
    at com.ibm.ws.resource.internal.ResourceFactoryTrackerData.getService(ResourceFactoryTrackerData.java:120)
    ... 107 more

修复数据源后,一些 sqlmx 特定错误:

[12/05/18 14:39:26:473 EDT] 000003f8 SystemErr           R Caused by: java.sql.SQLException: Pool requests blocked for dataSource[default-0]/connectionManager, connection pool is being shut down.
[12/05/18 14:39:26:473 EDT] 000003f8 SystemErr           R  at com.ibm.ws.rsadapter.AdapterUtil.toSQLException(AdapterUtil.java:822)
[12/05/18 14:39:26:473 EDT] 000003f8 SystemErr           R  at com.ibm.ws.rsadapter.jdbc.WSJdbcDataSource.getConnection(WSJdbcDataSource.java:152)
[12/05/18 14:39:26:474 EDT] 000003f8 SystemErr           R  at com.ibm.ws.rsadapter.jdbc.WSJdbcDataSource.getConnection(WSJdbcDataSource.java:116)
[12/05/18 14:39:26:474 EDT] 000003f8 SystemErr           R  at org.hibernate.connection.DatasourceConnectionProvider.getConnection(DatasourceConnectionProvider.java:92)
[12/05/18 14:39:26:474 EDT] 000003f8 SystemErr           R  at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:446)
[12/05/18 14:39:26:474 EDT] 000003f8 SystemErr           R  ... 95 more
[12/05/18 14:39:26:474 EDT] 000003f8 SystemErr           R Caused by: javax.resource.spi.ResourceAllocationException: Pool requests blocked for dataSource[default-0]/connectionManager, connection pool is being shut down.
[12/05/18 14:39:26:475 EDT] 000003f8 SystemErr           R  at com.ibm.ejs.j2c.PoolManager.reserve(PoolManager.java:1275)
[12/05/18 14:39:26:475 EDT] 000003f8 SystemErr           R  at com.ibm.ejs.j2c.ConnectionManager.allocateMCWrapper(ConnectionManager.java:573)
[12/05/18 14:39:26:475 EDT] 000003f8 SystemErr           R  at com.ibm.ejs.j2c.ConnectionManager.allocateConnection(ConnectionManager.java:309)
[12/05/18 14:39:26:475 EDT] 000003f8 SystemErr           R  at com.ibm.ws.rsadapter.jdbc.WSJdbcDataSource.getConnection(WSJdbcDataSource.java:143)
[12/05/18 14:39:26:475 EDT] 000003f8 SystemErr           R  ... 98 more

根据堆栈跟踪,您似乎已在 server.xml 中配置了一个 <dataSource> 元素,但未将其包含在您的问题中。使用您提供的 <library> 配置,您的配置可能如下所示:

<dataSource jndiName="jdbc/myDB" type="javax.sql.XADataSource">
    <jdbcDriver libraryRef="sqlmx-lib"  javax.sql.XADataSource="com.tandem.t4jdbc.SQLMXDataSource"/>
    <properties databaseName="SAMPLEDB" hostName="localhost" port="12345"/>
</dataSource>

有关如何在 Liberty 中配置数据源的更多信息,请参阅:
Configuring relational database connectivity in Liberty

注意: 基于对 SQL/MX JDBC 驱动程序文档的谷歌搜索,我发现他们的 XADataSource 实现 class 名称是 com.tandem.t4jdbc.SQLMXDataSource。如果那个 class 名称对于你的 JDBC 驱动程序 jar 不正确,那么使用你的 jar 有的任何 class 。此外,如果您的驱动程序未提供 javax.sql.XADataSource 的任何实现,则将配置更改为 javax.sql.ConnectionPoolDataSource