нарушение герметизации: пакет oracle .jdb c .pool закрыт oracle Пул соединений UCP - PullRequest
0 голосов
/ 22 января 2020

Мой проект использовал ojdbc6 с c3p0 пулами соединений. Это я переехал в ojdbc8 и UCP(Oracle's universal connection pooling). Но я получаю ниже ошибку:

UCP Config используется:

try
                {
                    //Creating a pool-enabled data source
                    pds= PoolDataSourceFactory.getPoolDataSource();

                    String dbURL="jdbc:oracle:thin:@(DESCRIPTION = (CONNECT_TIMEOUT= 15)(RETRY_COUNT=20)(RETRY_DELAY=3) (ADDRESS_LIST =(LOAD_BALANCE=on)(ADDRESS = (PROTOCOL = TCP) (HOST = vm-host-101) (PORT = 1521))) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = S1NAME)))";

          //this is where am using that package 
                    pds.setConnectionFactoryClassName("oracle.jdbc.pool.OracleDataSource");
                    pds.setURL(dbURL);
                    pds.setUser("username");
                    pds.setPassword("password");
                    pds.setInitialPoolSize(5);
                    pds.setMinPoolSize(5);
                    pds.setMaxPoolSize(10);
                    pds.setFastConnectionFailoverEnabled(false);
                    return pds;
                }
                catch(SQLException e)
                {
                    e.printStackTrace();
                }
                return pds;

            }

Ошибка:

Caused by: java.sql.SQLException: Unable to create factory class instance with provided factory class name: java.lang.SecurityException: sealing violation: package oracle.jdbc.pool is sealed
    at oracle.ucp.util.UCPErrorHandler.newSQLException(UCPErrorHandler.java:456) ~[ucp-12.2.0.1.jar:12.2.0.1.0]
    at oracle.ucp.util.UCPErrorHandler.throwSQLException(UCPErrorHandler.java:133) ~[ucp-12.2.0.1.jar:12.2.0.1.0]
    at oracle.ucp.jdbc.PoolDataSourceImpl.initConnectionFactory(PoolDataSourceImpl.java:3243) ~[ucp-12.2.0.1.jar:12.2.0.1.0]
    at oracle.ucp.jdbc.PoolDataSourceImpl.createUniversalConnectionPool(PoolDataSourceImpl.java:1105) ~[ucp-12.2.0.1.jar:12.2.0.1.0]
    ... 61 common frames omitted
Caused by: java.lang.SecurityException: sealing violation: package oracle.jdbc.pool is sealed

Я понимаю, что ошибка придет, когда у нас есть 2 class загружен из того же package. Но я проверил внешние зависимости в intellij, а также попробовал mvn dependency:tree команду maven. Я не смог найти дубликат OJDBC jars в classpath.

Есть ли какая-либо другая причина для этого?

1 Ответ

0 голосов
/ 24 января 2020

Обычно это происходит, когда у вас более одного ojdbc*.jar в вашем classpath.

В своем вопросе вы четко заявляете, что вы убедились, что не было дубликата , но он должен быть. Если вы загружаете ojdbc8 из Maven, вам нужно убедиться, что он не добавлен вручную из локального filesystem.

То же самое для ucp.jar. Возможно, вы захотите отсканировать filesystem на ojdbc6.jar or ojdbc6dms.jar (or ojdbc8.jar and ojdbc8dms.jar or ojdbc10 - just scan for ojdbc*) и переименовать банки в другое (или удалить их).

Иногда крипт c - в зависимости от вашей структуры - видеть ваш полный путь к классу. На linux a "ps -af" command будет отображаться полная командная строка, которая использовалась для запуска java, и иногда она предоставляет полезную информацию о classpath.

...