You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@commons.apache.org by "Kirk Hill (Jira)" <ji...@apache.org> on 2022/10/17 20:10:00 UTC

[jira] [Reopened] (DBCP-587) DBCP and Transparent Application Continuity

     [ https://issues.apache.org/jira/browse/DBCP-587?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Kirk Hill reopened DBCP-587:
----------------------------

Ok,  So not sure if this is considered a bug so I apologize if is not.  I have changed the code to work now using Datasource and here is my current code.
{code:java}
// 
public class DbPoolTest {    private GenericObjectPool<PoolableConnection> connectionPool = null;    private static BasicDataSource dataSource;    private static BasicDataSource getDataSource() {        {            if (dataSource == null)
            {
                BasicDataSource ds = new BasicDataSource();
                ds.setUrl("jdbc:oracle:thin:@pdb_tac");
                ds.setUsername("hr");
                ds.setPassword("my_password");
                ds.setDriverClassName("oracle.jdbc.driver.OracleDriver");
                ds.setDefaultAutoCommit(false);
                ds.setConnectionFactoryClassName("oracle.jdbc.replay.OracleDataSourceImpl");
                System.out.println("DBCP classname: " + ds.getConnectionFactoryClassName());                ds.setInitialSize(5);
                ds.setMinIdle(5);
                ds.setMaxIdle(10);
                ds.setMaxOpenPreparedStatements(100);                dataSource = ds;
            }
            return dataSource;
        }    }    private static PoolingDataSource setupDataSource(BasicDataSource ds ) {
        ConnectionFactory connectionFactory = new DataSourceConnectionFactory(ds);        PoolableConnectionFactory poolableConnectionFactory = new PoolableConnectionFactory(connectionFactory, null);
        GenericObjectPoolConfig poolConfig = new GenericObjectPoolConfig();        poolConfig.setMaxTotal(4);
        poolConfig.setMinIdle(3);        ObjectPool objectPool = new GenericObjectPool(poolableConnectionFactory,poolConfig);        System.out.println("Max connections total at setup: "
                + poolConfig.getMaxTotal());        poolableConnectionFactory.setPool(objectPool);        return new PoolingDataSource(objectPool);    }    private GenericObjectPool<PoolableConnection> getConnectionPool() {
        return connectionPool;
    }
    public static void main(String[] args) {
        DbPoolTest demo = new DbPoolTest();
        int numValue = 5000;
        Connection conn = null;
        BasicDataSource dataSource = DbPoolTest.getDataSource();
        PoolingDataSource pds = setupDataSource(dataSource);        try {
   
            conn = pds.getConnection();
            String var10001 = demo.getInstanceName(conn);
            var10000.println("Instance Name = " + var10001);
            System.out.println("Performing transactions");
        } catch (Exception e) {
            e.printStackTrace(System.out);
        }
    }}
 {code}
Now returns this for an error.
{code:java}
// 
"C:\Program Files\Java\jdk1.8.0_333\bin\java.exe" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2021.3.1\lib\idea_rt.jar=63926:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2021.3.1\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.8.0_333\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_333\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_333\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_333\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_333\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_333\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_333\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_333\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_333\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_333\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_333\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_333\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_333\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_333\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_333\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_333\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_333\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_333\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_333\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_333\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_333\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_333\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_333\jre\lib\rt.jar;C:\Users\ksh\Documents\mywork\java\test_tac\out\production\test_tac;C:\Users\ksh\Documents\mywork\java\test_tac\ucp.jar;C:\Users\ksh\Documents\mywork\java\test_tac\ojdbc8.jar;C:\oracle\product\19.0.0\client_1\jlib\oraclepki.jar;C:\Users\ksh\Documents\mywork\java\test_tac\commons-dbcp2-2.9.0.jar;C:\Users\ksh\Documents\mywork\java\test_tac\commons-pool2-2.11.1.jar;C:\Users\ksh\Documents\mywork\java\test_tac\commons-logging-1.2.jar;C:\Users\ksh\Documents\mywork\java\test_tac\commons-collections4-4.4.jar;C:\Users\ksh\Documents\mywork\java\test_tac\simplefan.jar;C:\Users\ksh\Documents\mywork\java\test_tac\ons.jar" DbPoolTest
DBCP classname: oracle.jdbc.replay.OracleDataSourceImpl
Max connections total at setup: 4
java.sql.SQLException: Cannot load ConnectionFactory implementation 'oracle.jdbc.replay.OracleDataSourceImpl'
    at org.apache.commons.dbcp2.ConnectionFactoryFactory.createConnectionFactory(ConnectionFactoryFactory.java:70)
    at org.apache.commons.dbcp2.BasicDataSource.createConnectionFactory(BasicDataSource.java:459)
    at org.apache.commons.dbcp2.BasicDataSource.createDataSource(BasicDataSource.java:525)
    at org.apache.commons.dbcp2.BasicDataSource.getConnection(BasicDataSource.java:731)
    at org.apache.commons.dbcp2.DataSourceConnectionFactory.createConnection(DataSourceConnectionFactory.java:83)
    at org.apache.commons.dbcp2.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:374)
    at org.apache.commons.pool2.impl.GenericObjectPool.create(GenericObjectPool.java:571)
    at org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:298)
    at org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:223)
    at org.apache.commons.dbcp2.PoolingDataSource.getConnection(PoolingDataSource.java:141)
    at DbPoolTest.main(DbPoolTest.java:142)
Caused by: java.lang.NoSuchMethodException: oracle.jdbc.replay.OracleDataSourceImpl.<init>(java.sql.Driver, java.lang.String, java.util.Properties)
    at java.lang.Class.getConstructor0(Class.java:3082)
    at java.lang.Class.getConstructor(Class.java:1825)
    at org.apache.commons.dbcp2.ConnectionFactoryFactory.createConnectionFactory(ConnectionFactoryFactory.java:64)
    ... 10 more
 {code}
With this being the culprit.

Caused by: java.lang.NoSuchMethodException: oracle.jdbc.replay.OracleDataSourceImpl.<init>(java.sql.Driver, java.lang.String, java.util.Properties)

 

 

 

> DBCP and Transparent Application Continuity
> -------------------------------------------
>
>                 Key: DBCP-587
>                 URL: https://issues.apache.org/jira/browse/DBCP-587
>             Project: Commons DBCP
>          Issue Type: Bug
>    Affects Versions: 2.9.0
>            Reporter: Kirk Hill
>            Priority: Major
>
> Oracle databases have a high-availability setup that uses an item called Transparent Application Continuity.  It requires using the following driver class name for "oracle.jdbc.replay.OracleDataSourceImpl"  When I attempt to use this driver I get the following error message.  
> SQLException occurred : Cannot create JDBC driver of class 'oracle.jdbc.replay.OracleDataSourceImpl' 
> Having this as a way to create connection pools would greatly enhance your product.  



--
This message was sent by Atlassian Jira
(v8.20.10#820010)