0
Oracle Internet Directory APIを使用して接続するためのSpring-ldap接続プーリングとカスタム実装をcontextSourceに使用しています。これは、eclipseでスタンドアロンをテストするときに機能します。しかし、Tomcatにデプロイされたときには、 "DirContextのインスタンスではありません"と失敗します。 SpringからLdapContextSourceを使用するとうまく動作しますが、一部の操作が失敗し、OID APIのコンテキストで動作します。 これについての助けをお待ちしています。 以下に設定して、ログファイルに「プロトコル」、「ホスト」、「ポート」の値をトレースできるコードtomcatのカスタムLdapContextSource実装のjavax.naming.NotContextException
<!-- LDAP Connection pool configuration -->
<bean id="contextSource"
class="org.springframework.ldap.pool.factory.PoolingContextSource">
<property name="contextSource" ref="contextSourceTarget" />
<property name="dirContextValidator" ref="dirContextValidator" />
<property name="testOnBorrow" value="false" />
<property name="testOnReturn" value="false" />
<property name="testWhileIdle" value="true" />
<property name="timeBetweenEvictionRunsMillis" value="900000" />
<property name="minEvictableIdleTimeMillis" value="1800000" />
<property name="maxActive" value="8" />
<property name="minIdle" value="3" />
<property name="maxIdle" value="8" />
<property name="maxWait" value="30000" />
<property name="maxTotal" value="-1" />
<property name="whenExhaustedAction" value="0" />
</bean>
<bean id="dirContextValidator"
class="org.springframework.ldap.pool.validation.DefaultDirContextValidator" />
<bean id="contextSourceTarget" class="com.ticketmaster.platform.identity.core.dao.ldap.CustomLdapContextSource">
<property name="url" value="${ldap.url}" />
<property name="userDn" value="${ldap.username}" />
<property name="password" value="${ldap.password}" />
<property name="dirObjectFactory"
value="org.springframework.ldap.core.support.DefaultDirObjectFactory" />
<property name="pooled" value="false" />
</bean>
<bean id="ldapTemplate" class="org.springframework.ldap.core.LdapTemplate">
<constructor-arg ref="contextSource" /> <!-- connection pool reference -->
</bean>
public class CustomLdapContextSource extends LdapContextSource {
@Override
protected DirContext getDirContextInstance(Hashtable environment) throws NamingException {
String url = (String) environment.get("java.naming.provider.url");
URL aURL = null;
InitialLdapContext ctx = null;
StringTokenizer st = new StringTokenizer(url, "://");
String protocol = st.nextToken();
String host = st.nextToken();
String port = st.nextToken();
ctx = ConnectionUtil.getDefaultDirCtx(host, port, userDn, password);
return ctx;
}