我正在处理使用 Oracle ojdbc 12 和 Java 8 的 Oracle UCP 管理器的问题。如果 UCP 池启动失败,我希望关闭它创建的连接。
当在池初始化期间遇到 ORA-02391:超出同时 SESSIONS_PER_USER 限制错误时,例如当 initPoolSize 值太大时,startConnectionPool API 会抛出异常并且池状态为 FAILED。这是预期的行为。
但是,调用 stopConnectionPool() 会将池状态变为 STOPPED,而不会实际关闭任何连接。我使用 netstat 和服务器 v$sessions 看到本地连接。
我的预感是,正如文档中提到的(https://docs.oracle.com/cd/E18283_01/java.112/e12265/manage.htm)停止池应该只在它处于 STARTING 或 STARTED/RUNNING 状态时起作用. 但在那种情况下, stopConnectionPool() 应该会抛出一个错误,这不是我所看到的。
所以问题是:stopConnectionPool() UCP API 是否应该在 FAILED 池上工作?
也许唯一的出路就是摧毁游泳池?