如何修复J2CA0045E:调用方法创建或等待资源连接时连接不可用 jdbc/"my_datasource"



我已经在 IBM AIX 7.2 服务器上的 Websphere ND 8.5.5.9 中安装了一个 J2EE 应用程序。 在安装应用程序时,我通过为其提供虚拟值来跳过队列设置。然后,侦听器端口问题出现,因为队列正在尝试连接到虚拟设置。这样,连接池已满,系统开始出现异常。因此,我重新安装了该应用程序,并将侦听器端口保持在STOP模式。最初的几个小时应用程序按预期运行。现在,它给出了以下例外:

[5/23/18 17:29:53:609 CEST] 000000a9 FreePool      E   J2CA0045E: Connection not available while invoking method createOrWaitForConnection for resource jdbc/"". 
[5/23/18 17:31:12:899 CEST] 00000055 FreePool      E   J2CA0045E: Connection not available while invoking method createOrWaitForConnection for resource jdbc/"". 
[5/23/18 17:31:12:900 CEST] 00000055 AlarmThreadMo W   UTLS0009W: Alarm Thread "Non-deferrable Alarm : 0" (00000055) previously reported to be delayed has now completed.  It was active for approximately 180004 milliseconds. 
[5/23/18 17:32:11:191 CEST] 00000029 AlarmThreadMo W   UTLS0008W: The return of alarm thread "Non-deferrable Alarm : 2" (00000057) to the alarm thread pool has been delayed for 18271 milliseconds. This may be preventing normal alarm function within the application server. The alarm listener stack trace is as follows:
at java.lang.Object.wait(Native Method)
at java.lang.Object.wait(Object.java:201)
at com.ibm.ejs.j2c.FreePool.queueRequest(FreePool.java:438)
at com.ibm.ejs.j2c.FreePool.createOrWaitForConnection(FreePool.java:1344)
at com.ibm.ejs.j2c.PoolManager.reserve(PoolManager.java:3898)
at com.ibm.ejs.j2c.PoolManager.reserve(PoolManager.java:3118)
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)
at com.ibm.ws.rsadapter.jdbc.WSJdbcDataSource.getConnection(WSJdbcDataSource.java:924)
at com.ibm.ws.extensionhelper.db.impl.DatabaseHelperImpl$DSWrapper.getConnection(DatabaseHelperImpl.java:1595)
at com.ibm.ws.extensionhelper.db.impl.DatabaseHelperImpl.getConnection(DatabaseHelperImpl.java:750)
at com.ibm.ws.leasemanager.impl.LeaseManagerDBHelper.getConnection(LeaseManagerDBHelper.java:213)
at com.ibm.ws.leasemanager.impl.LeaseStoreImpl.renew(LeaseStoreImpl.java:452)
at com.ibm.ws.leasemanager.impl.LeaseImpl.renew(LeaseImpl.java:141)
at com.ibm.ws.scheduler.LeaseAlarm.alarm(LeaseAlarm.java:173)
at com.ibm.ejs.util.am._Alarm.runImpl(_Alarm.java:151)
at com.ibm.ejs.util.am._Alarm.run(_Alarm.java:136)
at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1892).

请建议在不进行任何代码更改的情况下可以执行哪些操作来释放连接池。是否可以在操作系统级别或 Websphere 级别处理它?

等待 18 秒的最后一个警告是 WAS 调度程序进行的连接尝试。 您应该查看配置,查看调度程序是否配置为使用与先前错误相同的数据源 jdbc/"(这是一个不寻常的名称 - 此数据源配置是否正确? 这些错误/警告背后的原因有几种可能性。 您的连接池的大小不足以处理应用程序所需的负载,或者您的代码在连接上保留的时间过长,从而使数据源的其他用户匮乏。

最新更新