2012-04-13 12 views
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; 
    } 

答えて

0

はありますか?

以下のコードは私になりやすいエラーを見て、especialy、私は「プロトコル」のいずれかの使用状況を見ることができません

String url = (String) environment.get("java.naming.provider.url"); 
... 
StringTokenizer st = new StringTokenizer(url, "://"); 
String protocol = st.nextToken(); 
String host = st.nextToken(); 
String port = st.nextToken(); 
ctx = ConnectionUtil.getDefaultDirCtx(host, port, userDn, password);