Oracle ucp jdbc пул не работает в обновлении Tomcat 6 до 8 - PullRequest
0 голосов
/ 20 октября 2018

Мы пытались создать источник данных оракула и пул соединений с помощью кода.Мы используем 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

...