tomcat上的自定义LdapContextSource实现的javax.naming.NotContextException

时间:2012-04-13 12:12:24

标签: spring-ldap

我正在使用Spring-ldap连接池和contextSource的自定义实现来使用Oracle Internet Directory API进行连接。这在Eclipse上独立测试时有效。但是,当在tomcat上部署时,它会失败,并且“不是DirContext的实例”。如果我使用Spring的LdapContextSource [但我的一些操作失败并使用OID API的上下文]它工作正常 感谢任何帮助。 下面是配置和代码

<!-- 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;
    }

1 个答案:

答案 0 :(得分:0)

您可以在日志文件中跟踪“protocol”,“host”,“port”的值吗?

下面的代码看起来容易出错,特别是我看不到“协议”的任何用法

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);
相关问题