2011-07-21 3 views
0

j'ai une base de données Oracle avec LDAP et peut se connecter en écrivant smth comme:Comment écrire une URL JDBC pour Oracle avec LDAP et deux serveurs LDAP?

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

Mais cela est failover pas (nous avons un autre serveur LDAP avec Oracle - oid1.wow.com:666)

Comment puis-je utiliser les deux serveurs pour atteindre le basculement? J'ai trouvé ce solution, mais il ne fonctionne pas:

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) 

Répondre

3

Il était un pilote! String de débogage J'ai trouvé un autre problème avec String.concat() NPE Notre pilote (com.oracle ojdbc14 10.2.0.4.0 - trouvé dans MVN repo) ne supporte pas deux ou plusieurs URLs. Lorsque j'ai téléchargé le pilote à partir du site Oracle (10.1.0.5 'ojdbc14_g'), tous les démarrages fonctionnent correctement. Tout cela semble étrange, car 10.1.0.5 semble être la dernière version des pilotes Oracle JDBC sur le site officiel (pour Oracle 10 bien sûr).

Voici! Failover dataSource Bean:

<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> 
+0

Oui. De plus, si vous utilisez des pilotes 11g et que vous vous connectez à OID via LDAPS, vous avez besoin d'au moins la version 11.2.0.3 sinon vous obtiendrez une exception NullPointer. –