我正在处理使用Oracle ojdbc 12和Java 8的Oracle UCP管理器的问题。 如果UCP池启动失败,我希望关闭它创建的连接。
当 ORA-02391:超出同时SESSIONS_PER_USER限制错误时,例如,当 initPoolSize 值太大时,startConnectionPool API 会引发异常,并且池状态为 FAILED。这是预期行为。
但是,调用 stopConnectionPool() 会将池状态变为 STOPED,而不会实际关闭任何连接。我看到使用 netstat 和服务器 v$sessions 的本地连接。
我的预感是,正如文档提到的(https://docs.oracle.com/cd/E18283_01/java.112/e12265/manage.htm) 停止池应仅在池处于"正在启动"或"已启动/正在运行"状态时起作用。但是在这种情况下,stopConnectionPool() 应该会抛出一个错误,这不是我所看到的。
所以问题是:stopConnectionPool() UCP API 应该在失败的池上工作吗?
也许唯一的出路就是摧毁游泳池?
'stopConnectionPool()' 仅在池对象已处于"已停止"生命周期的情况下不执行任何操作。 在所有其他情况下,此管理器的调用应停止池关闭所有打开的连接。 如果在所述情况下仍然看到打开的连接,请准备重现报告行为的小型应用程序并联系 Oracle。