You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@commons.apache.org by "Aaron Hamid (JIRA)" <ji...@apache.org> on 2011/05/16 23:39:47 UTC

[jira] [Created] (DBCP-360) BasicManagedDataSource fails with OracleXADataSource

BasicManagedDataSource fails with OracleXADataSource
----------------------------------------------------

                 Key: DBCP-360
                 URL: https://issues.apache.org/jira/browse/DBCP-360
             Project: Commons Dbcp
          Issue Type: Bug
    Affects Versions: 1.4
            Reporter: Aaron Hamid


Using the same JDBC url and settings as in non-XA (driverClassName) mode, the BasicManagedDataSource will fail when it attempts to obtain an Oracle connection when using the Oracle oracle.jdbc.xa.client.OracleXADataSource datasource class.

It appears that BasicManagedDataSource.createConnectionFactory is never actually setting the URL (I can't tell where if at all it is set, the exception must occur before then).

<bean id="riceDataSource" class="org.apache.commons.dbcp.managed.BasicManagedDataSource" destroy-method="close">
    <property name="transactionManager" ref="jotm" />
    <property name="url" value="${datasource.url}"/>
    <property name="XADataSource" value="${xadatasource.class}"/>
    <property name="maxActive" value="${datasource.pool.maxActive}"/>
    <property name="minIdle" value="${datasource.minIdle}" />
    <property name="initialSize" value="${datasource.initialSize}"/>
    <property name="validationQuery" value="${datasource.pool.validationQuery}"/>
    <property name="username" value="${datasource.username}" />
    <property name="password" value="${datasource.password}" />
    <property name="accessToUnderlyingConnectionAllowed" value="${datasource.accessToUnderlyingConnectionAllowed}"/>
    <property name="connectionProperties"><value>driverType=thin;portNumber=1521</value></property> <!-- as rumored on the internets -->
</bean>

org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is java.sql.SQLException: Cannot create PoolableConnectionFactory (Invalid Oracle URL specified: OracleDataSource.makeURL)
Caused by: java.sql.SQLException: Cannot create PoolableConnectionFactory (Invalid Oracle URL specified: OracleDataSource.makeURL)
	at org.apache.commons.dbcp.managed.BasicManagedDataSource.createPoolableConnectionFactory(BasicManagedDataSource.java:200)
	at org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1388)
	at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044)
	at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:113)
	at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:79)
	at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:276)
	at ConnectionTest$1.doInTransaction(ConnectionTest.java:79)
	at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:127)
	at ConnectionTest.testConnectionRecovery(ConnectionTest.java:76)
	at ConnectionTest.testOracleBMDSXARecovery(ConnectionTest.java:58)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:616)
	at org.junit.internal.runners.TestMethod.invoke(TestMethod.java:59)
	at org.junit.internal.runners.MethodRoadie.runTestMethod(MethodRoadie.java:98)
	at org.junit.internal.runners.MethodRoadie$2.run(MethodRoadie.java:79)
	at org.junit.internal.runners.MethodRoadie.runBeforesThenTestThenAfters(MethodRoadie.java:87)
	at org.junit.internal.runners.MethodRoadie.runTest(MethodRoadie.java:77)
	at org.junit.internal.runners.MethodRoadie.run(MethodRoadie.java:42)
	at org.junit.internal.runners.JUnit4ClassRunner.invokeTestMethod(JUnit4ClassRunner.java:88)
	at org.junit.internal.runners.JUnit4ClassRunner.runMethods(JUnit4ClassRunner.java:51)
	at org.junit.internal.runners.JUnit4ClassRunner$1.run(JUnit4ClassRunner.java:44)
	at org.junit.internal.runners.ClassRoadie.runUnprotected(ClassRoadie.java:27)
	at org.junit.internal.runners.ClassRoadie.runProtected(ClassRoadie.java:37)
	at org.junit.internal.runners.JUnit4ClassRunner.run(JUnit4ClassRunner.java:42)
	at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:49)
	at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
Caused by: java.sql.SQLException: Invalid Oracle URL specified: OracleDataSource.makeURL
	at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
	at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:146)
	at oracle.jdbc.pool.OracleDataSource.makeURL(OracleDataSource.java:1353)
	at oracle.jdbc.pool.OracleDataSource.getURL(OracleDataSource.java:1064)
	at oracle.jdbc.xa.client.OracleXADataSource.getPooledConnection(OracleXADataSource.java:204)
	at oracle.jdbc.xa.client.OracleXADataSource.getXAConnection(OracleXADataSource.java:159)
	at oracle.jdbc.xa.client.OracleXADataSource.getXAConnection(OracleXADataSource.java:133)
	at org.apache.commons.dbcp.managed.DataSourceXAConnectionFactory.createConnection(DataSourceXAConnectionFactory.java:103)
	at org.apache.commons.dbcp.managed.PoolableManagedConnectionFactory.makeObject(PoolableManagedConnectionFactory.java:103)
	at org.apache.commons.dbcp.BasicDataSource.validateConnectionFactory(BasicDataSource.java:1556)
	at org.apache.commons.dbcp.managed.BasicManagedDataSource.createPoolableConnectionFactory(BasicManagedDataSource.java:196)
	... 31 more


--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

[jira] [Closed] (DBCP-360) BasicManagedDataSource fails with OracleXADataSource

Posted by "Aaron Hamid (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/jira/browse/DBCP-360?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Aaron Hamid closed DBCP-360.
----------------------------


> BasicManagedDataSource fails with OracleXADataSource
> ----------------------------------------------------
>
>                 Key: DBCP-360
>                 URL: https://issues.apache.org/jira/browse/DBCP-360
>             Project: Commons Dbcp
>          Issue Type: Bug
>    Affects Versions: 1.4
>            Reporter: Aaron Hamid
>
> Using the same JDBC url and settings as in non-XA (driverClassName) mode, the BasicManagedDataSource will fail when it attempts to obtain an Oracle connection when using the Oracle oracle.jdbc.xa.client.OracleXADataSource datasource class.
> It appears that BasicManagedDataSource.createConnectionFactory is never actually setting the URL (I can't tell where if at all it is set, the exception must occur before then).
> <bean id="riceDataSource" class="org.apache.commons.dbcp.managed.BasicManagedDataSource" destroy-method="close">
>     <property name="transactionManager" ref="jotm" />
>     <property name="url" value="${datasource.url}"/>
>     <property name="XADataSource" value="${xadatasource.class}"/>
>     <property name="maxActive" value="${datasource.pool.maxActive}"/>
>     <property name="minIdle" value="${datasource.minIdle}" />
>     <property name="initialSize" value="${datasource.initialSize}"/>
>     <property name="validationQuery" value="${datasource.pool.validationQuery}"/>
>     <property name="username" value="${datasource.username}" />
>     <property name="password" value="${datasource.password}" />
>     <property name="accessToUnderlyingConnectionAllowed" value="${datasource.accessToUnderlyingConnectionAllowed}"/>
>     <property name="connectionProperties"><value>driverType=thin;portNumber=1521</value></property> <!-- as rumored on the internets -->
> </bean>
> org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is java.sql.SQLException: Cannot create PoolableConnectionFactory (Invalid Oracle URL specified: OracleDataSource.makeURL)
> Caused by: java.sql.SQLException: Cannot create PoolableConnectionFactory (Invalid Oracle URL specified: OracleDataSource.makeURL)
> 	at org.apache.commons.dbcp.managed.BasicManagedDataSource.createPoolableConnectionFactory(BasicManagedDataSource.java:200)
> 	at org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1388)
> 	at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044)
> 	at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:113)
> 	at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:79)
> 	at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:276)
> 	at ConnectionTest$1.doInTransaction(ConnectionTest.java:79)
> 	at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:127)
> 	at ConnectionTest.testConnectionRecovery(ConnectionTest.java:76)
> 	at ConnectionTest.testOracleBMDSXARecovery(ConnectionTest.java:58)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> 	at java.lang.reflect.Method.invoke(Method.java:616)
> 	at org.junit.internal.runners.TestMethod.invoke(TestMethod.java:59)
> 	at org.junit.internal.runners.MethodRoadie.runTestMethod(MethodRoadie.java:98)
> 	at org.junit.internal.runners.MethodRoadie$2.run(MethodRoadie.java:79)
> 	at org.junit.internal.runners.MethodRoadie.runBeforesThenTestThenAfters(MethodRoadie.java:87)
> 	at org.junit.internal.runners.MethodRoadie.runTest(MethodRoadie.java:77)
> 	at org.junit.internal.runners.MethodRoadie.run(MethodRoadie.java:42)
> 	at org.junit.internal.runners.JUnit4ClassRunner.invokeTestMethod(JUnit4ClassRunner.java:88)
> 	at org.junit.internal.runners.JUnit4ClassRunner.runMethods(JUnit4ClassRunner.java:51)
> 	at org.junit.internal.runners.JUnit4ClassRunner$1.run(JUnit4ClassRunner.java:44)
> 	at org.junit.internal.runners.ClassRoadie.runUnprotected(ClassRoadie.java:27)
> 	at org.junit.internal.runners.ClassRoadie.runProtected(ClassRoadie.java:37)
> 	at org.junit.internal.runners.JUnit4ClassRunner.run(JUnit4ClassRunner.java:42)
> 	at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:49)
> 	at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
> 	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
> 	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
> 	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
> 	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
> Caused by: java.sql.SQLException: Invalid Oracle URL specified: OracleDataSource.makeURL
> 	at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
> 	at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:146)
> 	at oracle.jdbc.pool.OracleDataSource.makeURL(OracleDataSource.java:1353)
> 	at oracle.jdbc.pool.OracleDataSource.getURL(OracleDataSource.java:1064)
> 	at oracle.jdbc.xa.client.OracleXADataSource.getPooledConnection(OracleXADataSource.java:204)
> 	at oracle.jdbc.xa.client.OracleXADataSource.getXAConnection(OracleXADataSource.java:159)
> 	at oracle.jdbc.xa.client.OracleXADataSource.getXAConnection(OracleXADataSource.java:133)
> 	at org.apache.commons.dbcp.managed.DataSourceXAConnectionFactory.createConnection(DataSourceXAConnectionFactory.java:103)
> 	at org.apache.commons.dbcp.managed.PoolableManagedConnectionFactory.makeObject(PoolableManagedConnectionFactory.java:103)
> 	at org.apache.commons.dbcp.BasicDataSource.validateConnectionFactory(BasicDataSource.java:1556)
> 	at org.apache.commons.dbcp.managed.BasicManagedDataSource.createPoolableConnectionFactory(BasicManagedDataSource.java:196)
> 	... 31 more

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

[jira] [Resolved] (DBCP-360) BasicManagedDataSource fails with OracleXADataSource

Posted by "Aaron Hamid (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/jira/browse/DBCP-360?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Aaron Hamid resolved DBCP-360.
------------------------------

    Resolution: Invalid

invalid, the supported pattern is to inject a preconfigured XADataSource instance.  it might be worth making this a bit clearer in the docs: "NOTE: your XADataSource implementation may require implementation-specific properties to be set.  If so, you must inject a preconstructed XADataSource object via setXaDataSource.

> BasicManagedDataSource fails with OracleXADataSource
> ----------------------------------------------------
>
>                 Key: DBCP-360
>                 URL: https://issues.apache.org/jira/browse/DBCP-360
>             Project: Commons Dbcp
>          Issue Type: Bug
>    Affects Versions: 1.4
>            Reporter: Aaron Hamid
>
> Using the same JDBC url and settings as in non-XA (driverClassName) mode, the BasicManagedDataSource will fail when it attempts to obtain an Oracle connection when using the Oracle oracle.jdbc.xa.client.OracleXADataSource datasource class.
> It appears that BasicManagedDataSource.createConnectionFactory is never actually setting the URL (I can't tell where if at all it is set, the exception must occur before then).
> <bean id="riceDataSource" class="org.apache.commons.dbcp.managed.BasicManagedDataSource" destroy-method="close">
>     <property name="transactionManager" ref="jotm" />
>     <property name="url" value="${datasource.url}"/>
>     <property name="XADataSource" value="${xadatasource.class}"/>
>     <property name="maxActive" value="${datasource.pool.maxActive}"/>
>     <property name="minIdle" value="${datasource.minIdle}" />
>     <property name="initialSize" value="${datasource.initialSize}"/>
>     <property name="validationQuery" value="${datasource.pool.validationQuery}"/>
>     <property name="username" value="${datasource.username}" />
>     <property name="password" value="${datasource.password}" />
>     <property name="accessToUnderlyingConnectionAllowed" value="${datasource.accessToUnderlyingConnectionAllowed}"/>
>     <property name="connectionProperties"><value>driverType=thin;portNumber=1521</value></property> <!-- as rumored on the internets -->
> </bean>
> org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is java.sql.SQLException: Cannot create PoolableConnectionFactory (Invalid Oracle URL specified: OracleDataSource.makeURL)
> Caused by: java.sql.SQLException: Cannot create PoolableConnectionFactory (Invalid Oracle URL specified: OracleDataSource.makeURL)
> 	at org.apache.commons.dbcp.managed.BasicManagedDataSource.createPoolableConnectionFactory(BasicManagedDataSource.java:200)
> 	at org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1388)
> 	at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044)
> 	at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:113)
> 	at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:79)
> 	at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:276)
> 	at ConnectionTest$1.doInTransaction(ConnectionTest.java:79)
> 	at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:127)
> 	at ConnectionTest.testConnectionRecovery(ConnectionTest.java:76)
> 	at ConnectionTest.testOracleBMDSXARecovery(ConnectionTest.java:58)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> 	at java.lang.reflect.Method.invoke(Method.java:616)
> 	at org.junit.internal.runners.TestMethod.invoke(TestMethod.java:59)
> 	at org.junit.internal.runners.MethodRoadie.runTestMethod(MethodRoadie.java:98)
> 	at org.junit.internal.runners.MethodRoadie$2.run(MethodRoadie.java:79)
> 	at org.junit.internal.runners.MethodRoadie.runBeforesThenTestThenAfters(MethodRoadie.java:87)
> 	at org.junit.internal.runners.MethodRoadie.runTest(MethodRoadie.java:77)
> 	at org.junit.internal.runners.MethodRoadie.run(MethodRoadie.java:42)
> 	at org.junit.internal.runners.JUnit4ClassRunner.invokeTestMethod(JUnit4ClassRunner.java:88)
> 	at org.junit.internal.runners.JUnit4ClassRunner.runMethods(JUnit4ClassRunner.java:51)
> 	at org.junit.internal.runners.JUnit4ClassRunner$1.run(JUnit4ClassRunner.java:44)
> 	at org.junit.internal.runners.ClassRoadie.runUnprotected(ClassRoadie.java:27)
> 	at org.junit.internal.runners.ClassRoadie.runProtected(ClassRoadie.java:37)
> 	at org.junit.internal.runners.JUnit4ClassRunner.run(JUnit4ClassRunner.java:42)
> 	at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:49)
> 	at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
> 	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
> 	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
> 	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
> 	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
> Caused by: java.sql.SQLException: Invalid Oracle URL specified: OracleDataSource.makeURL
> 	at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
> 	at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:146)
> 	at oracle.jdbc.pool.OracleDataSource.makeURL(OracleDataSource.java:1353)
> 	at oracle.jdbc.pool.OracleDataSource.getURL(OracleDataSource.java:1064)
> 	at oracle.jdbc.xa.client.OracleXADataSource.getPooledConnection(OracleXADataSource.java:204)
> 	at oracle.jdbc.xa.client.OracleXADataSource.getXAConnection(OracleXADataSource.java:159)
> 	at oracle.jdbc.xa.client.OracleXADataSource.getXAConnection(OracleXADataSource.java:133)
> 	at org.apache.commons.dbcp.managed.DataSourceXAConnectionFactory.createConnection(DataSourceXAConnectionFactory.java:103)
> 	at org.apache.commons.dbcp.managed.PoolableManagedConnectionFactory.makeObject(PoolableManagedConnectionFactory.java:103)
> 	at org.apache.commons.dbcp.BasicDataSource.validateConnectionFactory(BasicDataSource.java:1556)
> 	at org.apache.commons.dbcp.managed.BasicManagedDataSource.createPoolableConnectionFactory(BasicManagedDataSource.java:196)
> 	... 31 more

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira