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$1.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$1.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 上运行。

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

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

4

1 回答 1

0

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

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

于 2019-06-20T19:50:04.693 回答