2014-11-21 2 views
2

Я реализовал пул соединений LDAP в моем проекте и заметил странное поведение, которое каждый раз, когда приходит новый запрос на соединение, настроенный пул соединений LDAP возвращает новое соединение вместо повторного использования существующих соединение возвращается в пул.Каждый раз, когда новое соединение возвращается из пула соединений Ldap

LDAP JNDI журналы:

00:07:10,824 ERROR [stderr] (IPAdminGlobalDataReloader) Create and use [email protected][eun2p3-be.stp-qa.st.com:636] 
00:07:12,222 ERROR [stderr] (IPAdminGlobalDataReloader) Release [email protected] 
00:07:46,704 ERROR [stderr] (Thread-65) Expired [email protected] expired 
00:08:46,707 ERROR [stderr] (Thread-65) Expired [email protected] expired 
00:22:26,329 ERROR [stderr] (IPAdminGlobalDataReloader) Create [email protected][eun2p3-be.stp-qa.st.com:636] 
00:22:26,333 ERROR [stderr] (IPAdminGlobalDataReloader) Create and use [email protected][eun2p3-be.stp-qa.st.com:636] 
00:22:27,748 ERROR [stderr] (IPAdminGlobalDataReloader) Release [email protected] 
00:22:46,730 ERROR [stderr] (Thread-65) Expired [email protected] expired 
00:23:46,734 ERROR [stderr] (Thread-65) Expired [email protected] expired 
00:37:45,242 ERROR [stderr] (IPAdminGlobalDataReloader) Create [email protected][eun2p3-be.stp-qa.st.com:636] 
00:37:45,244 ERROR [stderr] (IPAdminGlobalDataReloader) Create and use [email protected][eun2p3-be.stp-qa.st.com:636] 
00:37:46,759 ERROR [stderr] (Thread-65) Expired [email protected] expired 
00:37:46,823 ERROR [stderr] (IPAdminGlobalDataReloader) Release [email protected] 
00:39:46,764 ERROR [stderr] (Thread-65) Expired [email protected] expired 
00:53:00,864 ERROR [stderr] (IPAdminGlobalDataReloader) Create [email protected][eun2p3-be.stp-qa.st.com:636] 
00:53:00,865 ERROR [stderr] (IPAdminGlobalDataReloader) Create and use [email protected][eun2p3-be.stp-qa.st.com:636] 
00:53:02,392 ERROR [stderr] (IPAdminGlobalDataReloader) Release [email protected] 
00:53:46,787 ERROR [stderr] (Thread-65) Expired [email protected] expired 
00:54:46,791 ERROR [stderr] (Thread-65) Expired com.sun.jndi.[email protected] expired 

Мои настройки подключения:

Hashtable<String, String> env = new Hashtable<String, String>(); 

    env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory"); 
    env.put(Context.PROVIDER_URL, "ldaps://" + server + ":" + serverPort); 
    env.put(Context.SECURITY_AUTHENTICATION, "simple"); 
    env.put(Context.SECURITY_PRINCIPAL, pUserName); 
    env.put(Context.SECURITY_CREDENTIALS, pPassword); 
    env.put(LdapContext.CONTROL_FACTORIES, "com.sun.jndi.ldap.ControlFactory"); 
    env.put(Context.SECURITY_PROTOCOL, "ssl"); 
    env.put("com.sun.jndi.ldap.read.timeout", "300000"); 

    Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider()); 

    // load the location of keystore that holds trusted root certificates from web.xml 
    ServletContext context = ApplicationServlet.getApplication().getServlet().getServletContext(); 
    String certificatePath = context.getInitParameter("AD_CERTIFICATE_PATH"); 

    System.setProperty("javax.net.ssl.trustStore", certificatePath); 
    //   System.setProperty("javax.net.debug", "all"); 

    // For connection pooling 
    env.put("com.sun.jndi.ldap.connect.pool", "true"); 
    System.setProperty("com.sun.jndi.ldap.connect.pool.protocol", "plain ssl"); 
    System.setProperty("com.sun.jndi.ldap.connect.pool.maxsize", poolMaxSize); 
    System.setProperty("com.sun.jndi.ldap.connect.pool.prefsize", poolPrefSize); 
    System.setProperty("com.sun.jndi.ldap.connect.pool.timeout", poolTimeOut); 
    System.setProperty("com.sun.jndi.ldap.connect.pool.debug", "fine"); 

    ctx = new InitialDirContext(env); 
    return (DirContext) ctx; 

спасибо в определении, где является основной причиной, почему каждый раз, когда новое соединение создается вместо повторного использования.

+0

Ясно, что истечет время ожидания вашего пула. NB Вам не нужно было добавлять поставщика SSL в течение десяти лет. – EJP

+0

Тайм-аут соединения устанавливается в течение 5 минут, и в соответствии с протоколами соединение становится истекшим немедленно. –

+0

Идеально бездействующее соединение должно ждать 5 минут до истечения срока действия, так как свойство timeout устанавливается на 5 минут. –

ответ

-2

У вас не было никакого пула соединений, вы используете разбитый пул соединений DirContext от Sun. Это не рекомендуется. Взгляните на бассейн Spring LDAP ContextSource. Он работает очень хорошо.

+0

Решите. Либо он использует пул соединений SuN, либо не использует его. Объединение соединений Sun JNDI работает для меня, – EJP

+0

Мы используем объединение соединений Sun JNDI ... –

+0

И «это обескуражено» кем? – EJP

Смежные вопросы