LDAPにアクセスするためにSpring LdapTemplateクラスを使用しています。実行時に常に接続を作成しないように、ldap 接続のプール (PoolingContextSource クラス) を使用しています。ただし、アプリケーションで時々この例外が発生します。
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>
誰かがこの問題を経験し、解決策を提案できますか?
現在使用されている接続 evictor の代わりに、プールのプロパティで testOnReturn パラメーターを使用することを考えました。ブラウザで Web アプリケーションを実行すると、次の警告が表示されます。
WARN [org.springframework.ldap.pool.validation.DefaultDirContextValidator] -
DirContext 'javax.naming.ldap.InitialLdapContext@d150d15' 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)
前もって感謝します。