密封违规:包 oracle.jdbc.pool 是密封的 oracle UCP 连接池
sealing violation: package oracle.jdbc.pool is sealed oracle UCP connection pooling
我的项目使用 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
我知道当我们从同一个 package
加载 2 class
时会出现错误。但是我在 intellij
中检查了外部依赖项,还尝试了 maven
的 mvn dependency:tree
命令。我在 classpath
.
中找不到重复的 OJDBC jars
还有其他原因吗?
当您的 classpath
中有 个以上 ojdbc*.jar
时,通常会发生这种情况。
在您的问题中,您清楚地表明您已确认没有 重复,但必须有一个。如果您从 Maven
加载 ojdbc8
,那么您需要确保它不是从本地 filesystem
手动添加的。
ucp.jar
也是如此。您可能想要扫描 filesystem
以查找 ojdbc6.jar or ojdbc6dms.jar (or ojdbc8.jar and ojdbc8dms.jar or ojdbc10 - just scan for ojdbc*)
并将罐子重命名为其他名称(或删除它们)。
有时很难看到完整的类路径,具体取决于您的框架。在 linux a "ps -af" command
上将显示用于启动 java 的完整命令行,这些有时会提供有关 classpath
.
的有用信息
我的项目使用 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
我知道当我们从同一个 package
加载 2 class
时会出现错误。但是我在 intellij
中检查了外部依赖项,还尝试了 maven
的 mvn dependency:tree
命令。我在 classpath
.
OJDBC jars
还有其他原因吗?
当您的 classpath
中有 个以上 ojdbc*.jar
时,通常会发生这种情况。
在您的问题中,您清楚地表明您已确认没有 重复,但必须有一个。如果您从 Maven
加载 ojdbc8
,那么您需要确保它不是从本地 filesystem
手动添加的。
ucp.jar
也是如此。您可能想要扫描 filesystem
以查找 ojdbc6.jar or ojdbc6dms.jar (or ojdbc8.jar and ojdbc8dms.jar or ojdbc10 - just scan for ojdbc*)
并将罐子重命名为其他名称(或删除它们)。
有时很难看到完整的类路径,具体取决于您的框架。在 linux a "ps -af" command
上将显示用于启动 java 的完整命令行,这些有时会提供有关 classpath
.