2010-08-10 47 views
0

早上好/下午没有找到,com.sun.jndi.ldap.LdapCtxFactory:类的servlet

我有LDAP连接器的问题,当我在我的单元测试没有问题,使用它,但是当它是在应用程序服务器环境中调用,它似乎有类路径问题,但该类使用java 1.6.17(我使用的版本)提供。

我使用spring-ldap来启动我的连接。

public static LdapContextSource getLdapContextSource(final String url, final String base) throws Exception { 
    LdapContextSource ldapContextSource = new LdapContextSource(); 

    ldapContextSource.setUrl(url); 
    ldapContextSource.setBase(base); 
    ldapContextSource.setPooled(true); 
    //ldapContextSource.setContextFactory(LdapCtxFactory.class); 

    ldapContextSource.afterPropertiesSet(); 

    return ldapContextSource; 
} 

这里是日志:

2010-08-10 09:46:38,183 : StandardWrapperValve.invoke : Servlet.service() for servlet default threw exception 
java.lang.ClassNotFoundException: com.sun.jndi.ldap.LdapCtxFactory 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:200) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:188) 
    at org.ow2.easybeans.loader.EasyBeansClassLoader.findClass(EasyBeansClassLoader.java:134) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:303) 
    at org.ow2.easybeans.loader.EasyBeansClassLoader.loadClass(EasyBeansClassLoader.java:238) 
    at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:316) 
    at java.lang.Class.forName0(Native Method) 
    at java.lang.Class.forName(Class.java:169) 
    at org.springframework.ldap.core.support.AbstractContextSource.class$(AbstractContextSource.java:67) 
    at org.springframework.ldap.core.support.AbstractContextSource.<clinit>(AbstractContextSource.java:67) 
    at org.zenithar.security.connectors.impl.ldap.LdapContextFactory.getLdapContextSource(LdapContextFactory.java:16) 

感谢所有。 此致敬礼。

回答

3

我找到了解决办法^^

正是有了乔纳斯5至极一个问题是OSGI平台上运行的应用程序服务器。 我的应用程序是一个共同的核心jar(包含与DAO春季上下文)共享3战争。看来用于托管通用核心的JVM与3次战争中使用的JVM不同。

我添加到我的felix-config.properties

org.osgi.framework.bootdelegation=.... 
    sun.util.calendar; \ 
    com.sun.jndi.ldap; \ 
    version="1.5.0" 

而且

org.osgi.framework.bootdelegation=com.sun.corba, \ 
.... 
com.sun.jndi.ldap.* 

所以,我可以在我的共同核心加载com.sun.jndi.ldap.LdapCtxFactory。

感谢您的帮助。

2

如果是这种情况,您的单元测试和应用服务器不得使用相同的JRE。检查一下你的应用服务器正在使用什么。

com.sun.jndi.ldap.LdapCtxFactory位于rt.jar中。你能证实吗?

你如何知道服务器使用相同的JVM?它在本地运行吗?你有什么JAVA_HOME设置?哪个应用服务器?

不要认为类加载器突然停止工作。当你得到的信息与你对世界如何运作的假设相矛盾时,请检查你的假设。

您的应用服务器配置错误的可能性远远超过类加载器,因为忘记了如何在成功的测试和不成功的部署之间完成工作。

+0

它是相同的VM(1.6.0u17),我试图更新到U21,但它是相同的错误。 – Zenithar 2010-08-10 09:56:21

+0

这似乎是一个类加载器的问题...任何建议? – Zenithar 2010-08-10 12:10:13

+0

也许是一个OSGi问题,我在Jonas 5.1上运行我的webapp。调查正在进行中... – Zenithar 2010-08-10 13:28:39