Ana*_*and 8 java ldap exception reconnect
我有一种情况,通过Java程序,我创建一个javax.naming.ldap.LdapContext
并对其进行search()
操作 - 这是一个底层连接.然后我将Java应用程序线程置于休眠状态,在此期间我重新启动LDAP服务器(OpenLDAP,只需注意).当App线程唤醒并尝试对LdapContext
之前创建的任何操作进行操作时,它会抛出" CommunicationException: Connection is closed
".
我想要的是能够重新建立连接.
我看到LdapContext
有一个reconnect()
方法 - 我将控件传递给null
.但是,这没有任何效果.我在Sun LDAP实现中看到,在重新启动LDAP服务器期间,Sun实现维护的ConnectionPool com.sun.jndi.ldap.LdapClient
使用"useful = false" 标记了基础实例.在reconnect()
通话时 - 它只是呼叫ensureOpen()
,再次检查usable
标志是否false
- 如果是false
; 然后它抛出CommunicationException
- 所以回到原点.
我的问题是:Java应用程序如何在外部LDAP服务器重启后继续存在?是新的创造LdapContext
又是唯一出路?欣赏任何见解.
这是异常的堆栈跟踪:
javax.naming.CommunicationException: connection closed [Root exception is java.io.IOException: connection closed]; remaining name 'uid=foo,ou=People,dc=example,dc=com'
at com.sun.jndi.ldap.LdapCtx.doSearch(LdapCtx.java:1979)
at com.sun.jndi.ldap.LdapCtx.searchAux(LdapCtx.java:1824)
at com.sun.jndi.ldap.LdapCtx.c_search(LdapCtx.java:1749)
at com.sun.jndi.toolkit.ctx.ComponentDirContext.p_search(ComponentDirContext.java:368)
at com.sun.jndi.toolkit.ctx.PartialCompositeDirContext.search(PartialCompositeDirContext.java:338)
at com.sun.jndi.toolkit.ctx.PartialCompositeDirContext.search(PartialCompositeDirContext.java:321)
at javax.naming.directory.InitialDirContext.search(InitialDirContext.java:248)
Caused by: java.io.IOException: connection closed
at com.sun.jndi.ldap.LdapClient.ensureOpen(LdapClient.java:1558)
at com.sun.jndi.ldap.LdapClient.search(LdapClient.java:504)
at com.sun.jndi.ldap.LdapCtx.doSearch(LdapCtx.java:1962)
... 26 more
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
7071 次 |
最近记录: |