4
我正在使用Spring LdapTemplate類訪問ldap。我正在使用一個ldap連接池(PoolingContextSource類)來避免在運行時一直創建連接。不過,我有時會得到這個例外在我的應用程序:春天LDAP:連接重置由對端
javax.servlet.ServletException: org.springframework.ldap.CommunicationException: Connection reset;
nested exception is javax.naming.CommunicationException: Connection reset [Root exception is java.net.SocketException: Connection reset];
Remaining name: 'ou=memberlist,ou=mygroups,o=mycompany.com'
(...)
我的LDAP類是在下面的XML定義
<bean id="contextSource" class="com.ibm.tp4.spring.ldap.CustomPoolingContextSource">
<property name="contextSource" ref="contextSourceTarget" />
<property name="testWhileIdle" value="true" />
<property name="minEvictableIdleTimeMillis" value="300000" />
<property name="timeBetweenEvictionRunsMillis" value="10000"/>
<property name="dirContextValidator">
<bean class="org.springframework.ldap.pool.validation.DefaultDirContextValidator" />
</property>
</bean>
<bean id="contextSourceTarget" class="org.springframework.ldap.core.support.LdapContextSource">
<property name="url" value="${ldap.url}" />
<property name="pooled" value="false" />
<property name="anonymousReadOnly" value="true" />
</bean>
<bean id="ldapTemplate" class="org.springframework.ldap.core.LdapTemplate">
<constructor-arg ref="contextSource" />
</bean>
<bean id="myLdapResolver" class="com.ibm.tp4.model.service.user.MyLdapResolver">
<constructor-arg ref="ldapTemplate" />
<property name="ldapUserSearchBase" value="${ldap.user.search_base}" />
<property name="ldapUserEmailAddressField" value="${ldap.user.email_address}" />
<property name="ldapAttributes" value="${ldap.user.attributes}" />
</bean>
有沒有人遇到過這個問題,可以建議解決方案?
我想過在池屬性中使用testOnReturn參數,而不是現在使用的連接排除器。當我這樣做,我得到以下警告當我運行在瀏覽器中我的web應用程序:
WARN [org.springframework.ldap.pool.validation.DefaultDirContextValidator] -
DirContext '[email protected]' failed validation with an
exception.javax.naming.OperationNotSupportedException: [LDAP: error code 53 - Unwilling To Perform];
Remaining name: ''
不久之後,我得到這個異常:
org.springframework.dao.DataAccessResourceFailureException: Failed to borrow DirContext from pool.; nested exception is java.util.NoSuchElementException: Could not create a validated object, cause: ValidateObject failed
org.springframework.ldap.pool.factory.PoolingContextSource.getContext(PoolingContextSource.java:425)
在此先感謝。
1)我使用了Spring LDAP,它是圍繞Java(JNDI)LDAP的包裝。我不知道如何使用Spring庫設置這個超時。 2)我添加了一個警告,顯示在我的問題的異常之前,問題似乎是一個無效的操作,而不是超時。 –
你想要執行什麼操作? –
我只是設置了Sprint LDAP屬性,用於測試在使用LDAP連接池時從LDAP連接池獲得的每個LDAP連接是否有效。可能Spring會向LDAP服務器發送一個簡單的虛擬請求來驗證連接,但我不知道該請求執行的是哪個ldap操作。我不得不閱讀框架代碼來弄清楚。 –