Мы пытались создать источник данных оракула и пул соединений с помощью кода.Мы используем ojdbc6.jar
Context ctx = null;
Properties cacheProperties = new Properties();
System.out.println( ">>>>>>>> Initializing the ORACLE datasource and connection pool <<<<<<<<<" );
// JNDI parameters
String oracle_dataSource = "mfc:mfcJdbcDatasource";
// DataSource parameters
String username = "admin";
String password = "password";
String url = "jdbc:oracle:thin:@server details";
String ods_ONSConfiguration = "<onsconfigruation>";
String ods_driverClassName = "oracle.jdbc.driver.OracleDriver";
boolean ods_ConnectionCachingEnabled = true;
boolean ods_FastConnectionFailoverEnabled = true;
boolean ods_ValidateConnectionOnBorrow = true;
String ods_ConnectionCacheName = "ConnectionCache";
boolean ods_UCPMgrEnabled = true;
// Connection Cache properties
String ods_InitialLimit = "5";
String ods_MinLimit = "1";
String ods_MaxLimit = "50";
String ods_ConnectionWaitTimeout = "2000";
String ods_AbandonedConnectionTimeout = "900";
String ods_MaxStatementsLimit = "40";
String ods_PropertyCheckInterval = "900";
String ods_InactivityTimeout = "28800";
cacheProperties.setProperty( "InitialLimit", ods_InitialLimit );
cacheProperties.setProperty( "MinLimit", ods_MinLimit );
cacheProperties.setProperty( "MaxLimit", ods_MaxLimit );
cacheProperties.setProperty( "ConnectionWaitTimeout", ods_ConnectionWaitTimeout );
cacheProperties.setProperty( "AbandonedConnectionTimeout", ods_AbandonedConnectionTimeout );
cacheProperties.setProperty( "MaxStatementsLimit", ods_MaxStatementsLimit );
cacheProperties.setProperty( "PropertyCheckInterval", ods_PropertyCheckInterval );
cacheProperties.setProperty( "InactivityTimeout", ods_InactivityTimeout );
System.out.println( "Initializing Oracle connection pool with following parameters: " + "\n\t url: " + url + "\n\t username: " + username + "\n\t driverClassName: " + ods_driverClassName + "\n\t ConnectionCachingEnabled: " + ods_ConnectionCachingEnabled + "\n\t FastConnectionFailoverEnabled: " + ods_FastConnectionFailoverEnabled + "\n\t ConnectionCacheName: " + ods_ConnectionCacheName + "\n\t ONSConfiguration: " + ods_ONSConfiguration + "\n\t cacheProperties: " + cacheProperties );
// First load Oracle driver
try {
Class.forName( ods_driverClassName );
}
catch ( ClassNotFoundException e ) {
e.printStackTrace();
System.out.println( "Unable to load database driver: " + ods_driverClassName );
}
try {
// initialize oracle datasource
PoolDataSource datasource = PoolDataSourceFactory.getPoolDataSource();
if ( ods_UCPMgrEnabled ) {
UniversalConnectionPoolManager mgr = UniversalConnectionPoolManagerImpl.getUniversalConnectionPoolManager();
mgr.setLogLevel( Level.FINE );
}
datasource.setURL( url );
datasource.setUser( username );
datasource.setPassword( password );
datasource.setConnectionFactoryClassName( "oracle.jdbc.pool.OracleDataSource" );
datasource.setONSConfiguration( ods_ONSConfiguration );
datasource.setFastConnectionFailoverEnabled( ods_FastConnectionFailoverEnabled );
datasource.setValidateConnectionOnBorrow( ods_ValidateConnectionOnBorrow );
datasource.setConnectionPoolName( ods_ConnectionCacheName );
datasource.setConnectionProperties( cacheProperties );
ctx = new InitialContext();
ctx.bind( oracle_dataSource, datasource );
}
, когда пытаемся получить соединение с базой данных из пула следующим образом.
Connection c = null;
PoolDataSource ds = null;
try {
ds = (PoolDataSource)ctx.lookup("mfc:mfcJdbcDatasource");
c = ds.getConnection();
} catch (Exception e) {
try {
if (c != null) c.close();
}catch (Exception e1) {
}
/*try {
OracleJDBCConnectionPoolStatistics stats = (OracleJDBCConnectionPoolStatistics) ds.getStatistics();
DAUtil.perror("Connection Pool Stats on Error: " + stats.getFCFProcessingInfo(), DBTransactionalManager.class, MSG_TYPE.ERROR);
} catch (Exception e1) {
}*/
c = null;
e.printStackTrace();
}
return c;
Приведенный выше код работает нормально в tomcat 6. нокогда мы развертываем войну на tomcat 8, он выдает следующую ошибку при попытке доступа к ней во второй раз.
20 октября 2018 г. 15:05:51 oracle.ucp.jdbc.PoolDataSourceImpl createPoolWithDefaultProperties FINE: ConnectionЭкземпляр пула создается со свойствами по умолчанию. java.sql.SQLException: Невозможно запустить универсальный пул соединений: oracle.ucp.UniversalConnectionPoolException: ошибка при создании пула в MBean диспетчера универсальных подключений в oracle.ucp.util.UCPErrorHandler.newSQLException (UCPErrorHandler.Java: 541) по адресу oracle.ucp.jdbc.PoolDataSourceImpl.throwSQLException (PoolDataSourceImpl.java:588) по адресу oracle.ucp.jdbc.PoolDataSourceImpl.startPool (PoolDataSourceImpl.java:2ucp.Impata.jp.dll)..java: 647) по адресу oracle.ucp.jdbc.PoolDataSourceImpl.getConnection (PoolDataSourceImpl.java:614) по адресу oracle.ucp.jdbc.PoolDataSourceImpl.getConnection (PoolDataSourceImpl.java:608) по адресу com.testojb.example.DBTransactionalManager $ DBAccess.getTjb_Manager_Manager_MB.example.DBTransactionalManager. (DBTransactionalManager.java:101) по адресу com.testojb.example.DBTransactionalManager.getInstance (DBTransactionalManager.java:111) по адресу com.testojb.example.HelloWorld.doGet (HelloWorld.jax: HelloWorld.jax: Hello)..http.HttpServlet.service (HttpServlet.java:635) в javax.servlet.http.HttpSHerplet.service (HttpServlet.java:742) в org.apache.catalina.core.ApplicationFilterChain.internalFilterorg.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java:166) в org.apache.tomcat.websocket.server.WsFilter.doFilter (WsFilter.java:52) в org.apache.catalinaFilter.internalDoFilter (ApplicationFilterChain.java:193) в org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java:166) в org.apache.catalina.core.StandardWrapperValve.invoke (StandardWrapperValve.java:198) в org.apache.catalina.core.StandardContextValve.invoke: atveveg: atv.apache.catalina.authenticator..java: 81) в org.apache.catalina.valves.AbstractAccessLogValve.invoke (AbstractAccessLogValve.java:650) в org.apache.catalina.core.StandardEngineValve.invoke (StandardEngineValve.java:87) в org.Connector.CoyoteAdapter.service (CoyoteAdapter.java:342) в org.apache.coyote.http11.Http11Processor.service (Http11Processor.java:803) в org.apache.coyote.AbstractProcessorLight.process (AbstractProcessorLight.jpg).apache.coyote.AbstractProtocol $ ConnectionHandler.process (AbstractProtocol.java:790) в org.apache.tomcat.util.net.NioEndpoint $ SocketProcessor.doRun (NioEndpoint.java:1468) в org.apache.tomcat.util.net.SocketProcessorBase.run (SocketProcessorBase.java:49) в java.util.concurrent.ThreadPoolExorker (ThreadPoolExecutor.java:1149) в java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:624) в org.apache.tomcat.util.threads.TaskThread $ WrappingRunnable.run (TaskThread.java61:).lang.Thread.run (Thread.java:748) Вызывается: oracle.ucp.UniversalConnectionPoolException: ошибка при создании пула в MBean диспетчера универсальных подключений в oracle.ucp.util.UCPErrorHandler.newUniversalConnectionPoolException (UCPErrorHandler.java:4)на oracle.ucp.util.UCPErrorHandler.newUniversalConnectionPoolException (UCPErrorHandler.java:389) в oracle.ucp.admin.UniversalConnectionPoolManagerMBeanImpl.createConnectionPool (UniversalConnectionPoolManagerMBeanImpl.java:360) в oracle.ucp.jdbc.PoolDataSourceImpl.startPool (PoolDataSourceImpl.java:252) ... еще 31 Причина: oracle.ucp.UniversalConnectionPoolException: Ошибка при создании пула в диспетчере пулов универсальных соединений в oracle.ucp.util.UCPErrorHandler.newUniversalConnectionPoolException (UCPErrorHandler.java:421) в oracle.ucp.util.UCPErrornewUniversalConnectionPoolException (UCPErrorHandler.java:389) по адресу oracle.ucp.admin.UniversalConnectionPoolManagerBase.createConnectionPool (UniversalConnectionPoolManagerBase.java:575) по адресу oracle.ucp.admin.UnEnganManPan