Ben bir Java programı aracılığıyla, bir javax.naming.ldap.LdapContext
oluşturmak ve üzerinde bir search()
işlemi yapmak bir durum var. Daha sonra, uyumak için Java uygulama iş parçacığı koydum, bu sırada LDAP sunucusunu yeniden başlatın (OpenLDAP, sadece not etmek için). App iş parçacığı uyanır ve daha önce oluşturulan LdapContext
herhangi bir işlem yapmaya çalıştığında, "CommunicationException: Connection is closed
" atar. Benim istediğimLDAP sunucusu yeniden başlatıldığında nasıl yeniden bağlanır? altta yatan bir bağlantı yapar -
bağlantıyı yeniden kurmak mümkün olmaktır.
LdapContext
'un reconnect()
yöntemine sahip olduğunu görüyorum; burada denetimleri null
olarak geçiriyorum. Ancak, bunun hiçbir etkisi yoktur. Sun LDAP uygulamasında, LDAP sunucusunun yeniden başlatıldığı sırada gördüğüm, Sun uygulamasının sürdürdüğü ConnectionPool, com.sun.jndi.ldap.LdapClient
örneğini "kullanabilmeniz = false" olarak işaretledi. reconnect()
çağrı üzerine - sadece usable
bayrak false
olup olmadığını tekrar kontrol eder ki, ensureOpen()
çağırır - bu false
ise; daha sonra CommunicationException
atar - böylelikle bire dönüş.
Sorum şu: bir Java uygulaması harici LDAP sunucusu yeniden kurtulursa nasıl? Yeni LdapContext
'un yeniden oluşturulması tek çıkış yolu mu? Herhangi bir anlayış için teşekkür ederiz. Bu otomatik yeniden işlem istemciye görünmez olup, burada otomatik-bağlantıya
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
Herhangi bir Bind kullanıcısını değiştirmediyseniz, sunucuyu yeniden başlattıktan sonra sorunun gelmesi gerektiğini düşünmüyorum. –
Merhaba İmza, ne yazık ki - LDAP sunucusu yeniden başlatıldıktan sonra LdapContext'deki tüm işlemler CommunicationException ile başarısız. – Anand
Bazı kodları paylaşır mısınız, nasıl bağlantı oluşturuyorsunuz ve aramak için kullanıyor musunuz? –