JDBC 创建数据源需要重新启动 - Websphere 9.0

JDBC create Data Source requires restart - Websphere 9.0

我正在 websphere 中创建一个 JDBC 数据源。创作部分一切正常。因此,当我测试来自 websphere 数据源的连接时,连接成功。但是如果我尝试通过浏览器访问它,比如去

http://10.10.10.23:9090/TestJdbCResourceName/ 我得到一个 Sql 异常。

我希望得到 Connection: com.ibm.ws.rsadapter.jdbc.WSJdbcConnection@f9cf6468

但我得到的只是:

java.sql.SQLException
    at com.ibm.ws.rsadapter.AdapterUtil.toSQLException(AdapterUtil.java:1705)
    at com.ibm.ws.rsadapter.jdbc.WSJdbcDataSource.getConnection(WSJdbcDataSource.java:663)
    at com.ibm.ws.rsadapter.jdbc.WSJdbcDataSource.getConnection(WSJdbcDataSource.java:613)
    at com.test.testHello.TestServlet.doGet(TestServlet.java:29)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:687)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
    at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1234)
    at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:778)
    at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:477)
    at com.ibm.ws.webcontainer.servlet.ServletWrapperImpl.handleRequest(ServletWrapperImpl.java:178)
    at com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:1124)
    at com.ibm.ws.webcontainer.webapp.WebApp.handleRequest(WebApp.java:4115)
    at com.ibm.ws.webcontainer.webapp.WebAppImpl.handleRequest(WebAppImpl.java:2198)
    at com.ibm.ws.webcontainer.webapp.WebGroup.handleRequest(WebGroup.java:304)
    at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:1028)
    at com.ibm.ws.webcontainer.WSWebContainer.handleRequest(WSWebContainer.java:1817)
    at com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:382)
    at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:465)
    at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewRequest(HttpInboundLink.java:532)
    at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.processRequest(HttpInboundLink.java:318)
    at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.ready(HttpInboundLink.java:289)
    at com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.sendToDiscriminators(NewConnectionInitialReadCallback.java:214)
    at com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.complete(NewConnectionInitialReadCallback.java:113)
    at com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:175)
    at com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:217)
    at com.ibm.io.async.AsyncChannelFuture.run(AsyncChannelFuture.java:205)
    at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1892)
Caused by: javax.resource.spi.ResourceAllocationException
    at com.ibm.ejs.j2c.FreePool.createManagedConnectionWithMCWrapper(FreePool.java:2523)
    at com.ibm.ejs.j2c.FreePool.createOrWaitForConnection(FreePool.java:1840)
    at com.ibm.ejs.j2c.PoolManager.reserve(PoolManager.java:3840)
    at com.ibm.ejs.j2c.PoolManager.reserve(PoolManager.java:3116)
    at com.ibm.ejs.j2c.ConnectionManager.allocateMCWrapper(ConnectionManager.java:1548)
    at com.ibm.ejs.j2c.ConnectionManager.allocateConnection(ConnectionManager.java:1031)
    at com.ibm.ws.rsadapter.jdbc.WSJdbcDataSource.getConnection(WSJdbcDataSource.java:646)
    ... 25 more
Caused by: java.lang.NullPointerException
    at oracle.jdbc.pool.OracleConnectionPoolDataSource.getPooledConnection(OracleConnectionPoolDataSource.java:68)
    at com.ibm.ws.rsadapter.spi.InternalGenericDataStoreHelper.run(InternalGenericDataStoreHelper.java:1365)
    at com.ibm.ws.security.util.AccessController.doPrivileged(AccessController.java:118)
    at com.ibm.ws.rsadapter.spi.InternalGenericDataStoreHelper.getPooledConnection(InternalGenericDataStoreHelper.java:1384)
    at com.ibm.ws.rsadapter.spi.WSRdbDataSource.getPooledConnection(WSRdbDataSource.java:2154)
    at com.ibm.ws.rsadapter.spi.WSManagedConnectionFactoryImpl.getConnection(WSManagedConnectionFactoryImpl.java:1787)
    at com.ibm.ws.rsadapter.spi.WSManagedConnectionFactoryImpl.createManagedConnection(WSManagedConnectionFactoryImpl.java:1557)
    at com.ibm.ws.rsadapter.spi.WSManagedConnectionFactoryImpl.createManagedConnection(WSManagedConnectionFactoryImpl.java:1113)
    at com.ibm.ejs.j2c.FreePool.createManagedConnectionWithMCWrapper(FreePool.java:2162)
    ... 31 more

当我重新启动 Websphere 并尝试完全相同的操作时,它会起作用。

但重启不是一个选项,因为其他应用程序在 websphere 上 运行。

不知道为什么这需要重新启动并且在创建后不能立即工作。 (因为它适用于数据源测试连接)

可能是什么原因导致这种情况发生?

您正在使用的 WebSphere Application Server 传统版不支持在不重新启动服务器的情况下更新数据源,这就是您在尝试更新时看到错误的原因。为了将来可能会阅读此答案的其他人,应该澄清 WebSphere Application Server Liberty 确实支持在不重新启动服务器的情况下对数据源进行配置更新,但这对您的情况没有帮助,因为您使用的是传统的 WebSphere Application服务器版。

您可以通过测试连接操作看到它成功的原因是测试连接操作不通过连接管理器执行正常的产品代码路径,而是直接通过 JDBC 驱动程序直接形成连接。鉴于您的所有配置都是正确的,这会成功,而通过 JNDI(生产代码路径)访问数据源会失败。