JDBC: ошибка универсального пула соединений Oracle UCP-45060 Недопустимое состояние жизненного цикла
Я использую Oracle UCP (Universal Connection Pool). Я получаю следующую ошибку после обработки около 100K записей.
oracle.ucp.UniversalConnectionPoolException: Invalid life cycle state. Check the status of the Universal Connection Pool
at oracle.ucp.util.UCPErrorHandler.newSQLException(UCPErrorHandler.java:488) ~[ucp-11.2.0.3.0.jar:11.2.0.3.0]
at oracle.ucp.util.UCPErrorHandler.throwSQLException(UCPErrorHandler.java:163) ~[ucp-11.2.0.3.0.jar:11.2.0.3.0]
at oracle.ucp.jdbc.PoolDataSourceImpl.getConnection(PoolDataSourceImpl.java:943) ~[ucp-11.2.0.3.0.jar:11.2.0.3.0]
at oracle.ucp.jdbc.PoolDataSourceImpl.getConnection(PoolDataSourceImpl.java:873) ~[ucp-11.2.0.3.0.jar:11.2.0.3.0]
at oracle.ucp.jdbc.PoolDataSourceImpl.getConnection(PoolDataSourceImpl.java:863) ~[ucp-11.2.0.3.0.jar:11.2.0.3.0]
Caused by: oracle.ucp.UniversalConnectionPoolException: Invalid life cycle state. Check the status of the Universal Connection Pool
at oracle.ucp.util.UCPErrorHandler.newUniversalConnectionPoolException(UCPErrorHandler.java:368) ~[ucp-11.2.0.3.0.jar:11.2.0.3.0]
at oracle.ucp.util.UCPErrorHandler.throwUniversalConnectionPoolException(UCPErrorHandler.java:49) ~[ucp-11.2.0.3.0.jar:11.2.0.3.0]
at oracle.ucp.util.UCPErrorHandler.throwUniversalConnectionPoolException(UCPErrorHandler.java:80) ~[ucp-11.2.0.3.0.jar:11.2.0.3.0]
at oracle.ucp.util.UCPErrorHandler.throwUniversalConnectionPoolException(UCPErrorHandler.java:131) ~[ucp-11.2.0.3.0.jar:11.2.0.3.0]
at oracle.ucp.common.UniversalConnectionPoolImpl.borrowConnectionWithoutCountingRequests(UniversalConnectionPoolImpl.java:304) ~[ucp-11.2.0.3.0.jar:11.2.0.3.0]
at oracle.ucp.common.UniversalConnectionPoolImpl.borrowConnectionAndValidate(UniversalConnectionPoolImpl.java:168) ~[ucp-11.2.0.3.0.jar:11.2.0.3.0]
at oracle.ucp.common.UniversalConnectionPoolImpl.borrowConnection(UniversalConnectionPoolImpl.java:143) ~[ucp-11.2.0.3.0.jar:11.2.0.3.0]
at oracle.ucp.jdbc.JDBCConnectionPool.borrowConnection(JDBCConnectionPool.java:157) ~[ucp-11.2.0.3.0.jar:11.2.0.3.0]
at oracle.ucp.jdbc.PoolDataSourceImpl.getConnection(PoolDataSourceImpl.java:931) ~[ucp-11.2.0.3.0.jar:11.2.0.3.0]
... 15 more
Вот фрагмент кода для создания источника данных
PoolDataSource dataSource = PoolDataSourceFactory.getPoolDataSource();
dataSource.setURL("jdbc.url"));
dataSource.setUser("jdbc.user"));
dataSource.setPassword("jdbc.password"));
dataSource.setMaxConnectionReuseCount(100);
dataSource.setInitialPoolSize(50);
dataSource.setMinPoolSize(50);
dataSource.setMaxPoolSize(100);
dataSource.setValidateConnectionOnBorrow(true);
dataSource.setConnectionFactoryClassName("oracle.jdbc.pool.OracleDataSource");
И тогда я получаю соединение из источника данных как
datasource.getConnection();
2 ответа
В моем случае я столкнулся с этим исключением во время обычного обновления приложения tomcat. При попытке взаимодействовать с базой данных Oracle (и, таким образом, получить соединение из UniversalConnectionPool) приложение продолжало получать это исключение.
Прочитав UniversalConnectionPool (обзор-использование-ucp-manager), я нашел эту строку в некоторой документации Oracle: « исключение состояния жизненного цикла возникает, если приложение пытается запустить пул, который был запущен ранее, или если пул в состоянии, отличном от остановленного или неудавшегося. " Это самое близкое, что я мог найти для чего-то, связанного с этим исключением.
В итоге я обнаружил, что ошибка в моей конфигурации сборки означала, что у меня есть драйвер OJDBC, размещенный как в моем приложении, так и извне в Tomcat, и каким-то образом они затем одновременно взаимодействовали с моим источником данных и UCP, вызывая инициализацию последний, чтобы дать эту ошибку. Удаление драйвера OJDBC из пути к классам в моем приложении устранило проблему.