Как мне написать URL JDBC для Oracle с LDAP и двумя серверами LDAP? - PullRequest
0 голосов
/ 21 июля 2011

У меня есть база данных Oracle с LDAP, и я могу подключиться, написав что-то вроде:

jdbc:oracle:thin:@ldap://oid0.wow.com:666/chost,cn=OracleContext,dc=wow,dc=com

Но это не отказоустойчивость (у нас есть другой сервер с Oracle LDAP - oid1.wow.com:666)

Как я могу использовать оба сервера для перехода на другой ресурс? Я нашел это решение , но оно не работает:

java.sql.SQLException: Io exception: Invalid LDAP URL specified
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:113)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:147)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:257)
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:389)
at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:454)
at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:165)
at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:35)
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:802)
at com.mchange.v2.c3p0.DriverManagerDataSource.getConnection(DriverManagerDataSource.java:134)
at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:182)
at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:171)
at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$1PooledConnectionResourcePoolManager.acquireResource(C3P0PooledConnectionPool.java:137)
at com.mchange.v2.resourcepool.BasicResourcePool.doAcquire(BasicResourcePool.java:1014)
at com.mchange.v2.resourcepool.BasicResourcePool.access$800(BasicResourcePool.java:32)
at com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask.run(BasicResourcePool.java:1810)
at com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:547)

1 Ответ

3 голосов
/ 22 июля 2011

Это был драйвер!

Сбросить отладку Я обнаружил еще одну проблему с String.concat () NPE Наш драйвер (com.oracle ojdbc14 10.2.0.4.0 - найден в репозитории MVN) неПоддержка двух или более URL.

Когда я скачал драйвер с сайта Oracle (10.1.0.5 'ojdbc14_g'), все начали работать нормально.

Все это выглядит странно, потому что 10.1.0.5 кажетсяпоследняя версия драйверов Oracle JDBC на официальном сайте (для Oracle 10, конечно).

Вот!Компонент Failover dataSource:

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
    <!--common dataSource props -->
    <property name="driverClass" value="oracle.jdbc.driver.OracleDriver"/>
    <property name="jdbcUrl" value="jdbc:oracle:thin:@ldaps://oid0.wow.com:666/chost,cn=OracleContext,dc=wow,dc=com ldaps://oid1.wow.com:666/chost,cn=OracleContext,dc=wow,dc=com"/>
    <property name="overrideDefaultUser" value="useruser"/>
    <property name="overrideDefaultPassword" value="strongpassword"/>
    <!-- special c3p0 props -->
    <property name="minPoolSize" value="1"/>
    <property name="maxPoolSize" value="10"/>
    <property name="maxStatements" value="10"/>
    <property name="breakAfterAcquireFailure" value="false"/>
    <property name="acquireRetryAttempts" value="5"/>
    <property name="testConnectionOnCheckin" value="true"/>
    <property name="properties">
        <props>
            <prop key="oracle.net.ldap_loadbalance">OFF</prop>
        </props>
    </property>
</bean>
...