2011-07-21 9 views
0

私はLDAPを使用してOracleデータベースを持っている、とのようになめらかに書くことによって接続することができます。LDAPと2つのLDAPサーバーでOracleにJDBC URLを書き込む方法を教えてください。

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

しかし、これは(私たちは、Oracle LDAPとの別のサーバーを持っている - oid1.wow.com:666)フェイルオーバーされていない

両方のサーバーを使用してフェールオーバーを実現するにはどうすればよいですか? 私はこのsolutionを見つけたが、それは動作しません:

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) 

答えて

3

それはドライバーでした!

投げデバッグ私はString.concatでantother問題を発見した()NPE 当社のドライバ(com.oracle ojdbc14 10.2.0.4.0 - MVNレポで見つかったが)2 O以上のURLをsupporしません。

Oracleサイト(10.1.0.5 'ojdbc14_g')からドライバをダウンロードすると、すべて正常に動作します。

10.1.0.5はオフィシャルサイト(Oracle 10の場合)のOracle JDBCドライバの最終バージョンと思われるため、これはすべて奇妙に見えます。

ここにあります!フェイルオーバーデータソース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

はい。また、11gのドライバを使用してLDAPS経由でOIDに接続する場合は、少なくともバージョン11.2.0.3が必要です。そうしないと、NullPointer例外が発生します。 –