Соединения UCP закрываются при вызове closeConnections () с использованием диспетчера UCP, когда жизненный цикл пула равен LIFE_CYCLE_FAILED? - PullRequest
1 голос
/ 03 апреля 2019

Я имею дело с проблемой с менеджером Oracle UCP, использующим Oracle ojdbc 12 и Java 8. При сбое запуска пула UCP я хочу, чтобы созданные им соединения были закрыты.

Когда ORA-02391: превышен одновременный предел SESSIONS_PER_USER, возникает ошибка во время инициализации пула, например, когда значение initPoolSize слишком велико, API-интерфейс startConnectionPool выдает исключение, и состояние пула НЕУДАЧИЛО. Это ожидаемое поведение.

Однако вызов stopConnectionPool () переводит состояние пула в состояние STOPPED без фактического закрытия какого-либо соединения. Я вижу локальные соединения, использующие netstat, и на сервере v $ session.

Моя догадка такова, как упоминается в документации (https://docs.oracle.com/cd/E18283_01/java.112/e12265/manage.htm) остановка пула должна работать, только когда он находится в состоянии ЗАПУСК или ЗАПУСК / РАБОТА. Но в этом случае stopConnectionPool (), вероятно, должен выдать ошибку, что я не вижу.

Таким образом, вопрос заключается в следующем: должен ли API UCP stopConnectionPool () работать на отказавшем пуле?

Может быть, единственный выход - уничтожить бассейн?

1 Ответ

1 голос
/ 10 апреля 2019

stopConnectionPool () ничего не делает только в том случае, если объект пула уже находится в «остановленном» жизненном цикле.Во всех остальных случаях вызов этого менеджера должен остановить пул, закрывающий все открытые соединения.Если вы все еще видите открытые соединения в описанном случае, подготовьте небольшое приложение, которое воспроизводит описанное поведение, и свяжитесь с Oracle.

...