2011-09-22 79 views
3

com.sun.jndi.ldap.connect.timeoutプロパティを設定して接続タイムアウトを制御したいと考えています。 1000ミリ秒未満の値ではうまく動作しますが、1000より大きい値を設定した場合、タイムアウトは増加しません(1000のままです)。ここでjava jndi ldap接続タイムアウト

は、私は(サーバーがダウンしている)とそれをテストしようとしたコードは次のとおりです。

long start = System.currentTimeMillis(); 

try 
{ 
    Hashtable env = new Hashtable(); 

    env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory"); 
    env.put(Context.PROVIDER_URL, "ldap://localhost:10389"); 
    env.put(Context.SECURITY_PRINCIPAL, "uid=admin,ou=system"); 
    env.put(Context.SECURITY_CREDENTIALS, "secret"); 
    env.put("com.sun.jndi.ldap.connect.timeout", "10000"); 

    InitialLdapContext context = new InitialLdapContext(env, null); 

} catch (NamingException e) 
{ 
    System.out.println("Failed because " + e.getRootCause() 
      .getMessage() + ". Timeout: " + ((System.currentTimeMillis() - start)) + " ms."); 
} 

これを引き起こす可能性がありますか?

+0

私は、PROVIDER_URLをlocalhostに設定していることと関係があるようです。私はjava.netクラスでいくつかのデバッグを行い、タイムアウトがネイティブメソッドに正しく渡されたことを発見しました。プロバイダをlocalhost以外のものに変更すると、指定された時間だけ待機します。 – calin014

答えて

2

ターゲットホストが接続要求にエラーコードで応答すると、エラーコードを受信するとすぐに接続が失敗します。ターゲットホストが起動していて、ターゲットLDAPサービスがポート10389をリッスンしていないようです。そのため、ターゲットホストはRSTを使用して着信接続要求に応答したため、クライアントですぐに例外がスローされました。これは予想される動作です。 の遅延に間違いがありますか?接続タイムアウトは、ターゲットホストに一時的に到達できない場合、またはターゲットサービスがの場合、実際にはがビジーの場合です。