2010-09-29 1 views
4

Хорошо, поэтому я переношу приложение из SSL-соединений с SSL на мой LDAP-сервер. При запуске приложения в не-SSL соединение пула работает нормально. Однако, когда я переключаюсь на SSL-соединения, пулы больше не работают.Как включить объединение пула по протоколу LDAP SSL?

При исследовании here я понял, что никогда не устанавливал свойство «com.sun.jndi.ldap.connect.pool.protocol» в «plain ssl», поскольку по умолчанию он установлен равным. Я думал, что это проблема.

Когда я внедрил это изменение, включив «plain ssl», он не устранил проблему, и пулы соединений все еще не использовались.

Есть ли другие настройки, которые мне не хватает?

Соответствующий код:

Hashtable LDAPEnvironment = new Hashtable(); 
    LDAPEnvironment.put(Context.SECURITY_AUTHENTICATION, SECURITY_AUTHENTICATION); 
    LDAPEnvironment.put(Context.SECURITY_PRINCIPAL, SECURITY_PRINCIPAL); 
    LDAPEnvironment.put(Context.SECURITY_CREDENTIALS, SECURITY_CREDENTIALS); 
    LDAPEnvironment.put(Context.INITIAL_CONTEXT_FACTORY, INITIAL_CONTEXT_FACTORY); 
    LDAPEnvironment.put(Context.PROVIDER_URL, PROVIDER_URL); 
    LDAPEnvironment.put(Context.SECURITY_AUTHENTICATION, "simple"); 
    LDAPEnvironment.put("java.naming.ldap.version", versionOfLDAP); 

    if (ldapProtocol != null && ldapProtocol.equalsIgnoreCase("SSL")){ 
     LDAPEnvironment.put(Context.SECURITY_PROTOCOL,"ssl"); 
     LDAPEnvironment.put("com.sun.jndi.ldap.connect.pool.protocol","plain ssl"); 
    } 

    LDAPEnvironment.put("com.sun.jndi.ldap.connect.pool", "true"); 
+1

@ Парень, который проголосовал за закрытие: это не относится к serverfault.com, потому что это проблема Java. –

ответ

1

Я нашел проблему. В документации конкретно указано, что эти свойства: Свойства системы и не Свойства среды. Я устанавливал их как свойства среды. :-)

0

Если вы прокрутите немного вниз, по ссылке вы предоставили (выделите «Как Соединения Объединенными»), вы увидите объяснение того, как аккумулирования работ ,

Когда вы запрашиваете объединенное соединение, вы получите его, только если ВСЕ указанные свойства идентичны. И это длинный список свойств ...

Я ваш случай это:

  • соединение управляет
  • имя хоста, номер порта, как указано в свойстве «java.naming.provider.url» , направление или URL-адрес подается в исходный контекст
  • java.naming.security.protocol свойство
  • java.naming.ldap.version недвижимость
  • java.naming.security.principal недвижимость
  • java.naming.security.credentials недвижимость

Если вы всегда использовать одни и те же константы, когда запрос на соединение из пула подключений, я думаю, вы должны получить тот же пул подключения. То есть , если вы правильно установили свойства com.sun.jndi.ldap.connect.pool. * - но я не видел этого в коде, который вы указали.

Если вы установили свойства com.sun.jndi.ldap.connect.pool. * На разумные значения, попробуйте установить com.sun.jndi.ldap.connect.pool.debug в порядке. Это поможет вам отладить.

Другой вариант - использовать инфраструктуру или поставщика, который поддерживает объединение пулов. Обратите внимание, что объединение, предоставленное вам Java, довольно ограничено. Раньше я использовал Spring-Ldap, и у него очень хорошая поддержка.

Надеюсь, это поможет.

+0

Не могли бы вы уточнить? Я включил фрагмент кода в edit выше. –

+0

Кроме того, мы используем только «простой» метод, поэтому это всего лишь несколько свойств ... и все эти свойства, как представляется, установлены. –

+0

Я отредактировал свой ответ. Я надеюсь, что это помогает. –