Ich habe eine einfache Spring MVC-Anwendung, die einige Benutzerdetails von einem LDAP-Server nachschaut und eine einfache HTML-Seite mit einer JSP ausgibt. Die Anwendung funktioniert auf Tomcat 6. Sie verwendet Spring LDAP 1.3.1 und LDAPTemplate, um die LDAP-Suchen durchzuführen.NoClassDefFoundError in Websphere - JARs sind vorhanden
Wenn ich jedoch diese Anwendung WAR auf Websphere 7 bereitstellen, wird die Anwendung nicht ausgeführt - Websphere gibt einen internen Serverfehler 500 zurück. Mit Blick auf Websphere Protokolldatei, ich sehe
[14/12/10 14:50:09:169 GMT] 00000022 DispatcherSer E org.springframework.web.servlet.FrameworkServlet initServletBean Context initialization failed
org.springframework.beans.factory.CannotLoadBeanClassException: Error loading class [org.springframework.ldap.core.support.LdapContextSource] for bean with name 'contextSource' defined in ServletContext resource [/WEB-INF/spring-servlet.xml]: problem with class file or dependent class; nested exception is java.lang.NoClassDefFoundError: org.springframework.beans.factory.InitializingBean
at org.springframework.beans.factory.support.AbstractBeanFactory.resolveBeanClass(AbstractBeanFactory.java:1253)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.predictBeanType(AbstractAutowireCapableBeanFactory.java:576)
at org.springframework.beans.factory.support.AbstractBeanFactory.isFactoryBean(AbstractBeanFactory.java:1319)
at org.springframework.beans.factory.support.AbstractBeanFactory.isFactoryBean(AbstractBeanFactory.java:885)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:562)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:895)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:425)
Meine Web-inf \ lib alle JAR-Dateien, darunter org.springframework.beans-3.0.5.RELEASE.jar
, die InitializingBean
enthält. Ich bin daher nicht sicher, warum Websphere die Klasse als fehlend meldet.
Inhalt meiner Web-inf \ lib:
aopalliance.jar
com.springsource.org.apache.commons.logging-1.1.1.jar
com.springsource.org.apache.log4j-1.2.15.jar
commons-lang-2.5.jar
commons-logging-1.1.1.jar
commons-pool-1.5.4.jar
jstl-api-1.2.jar
jstl-impl-1.2.jar
ldapbp-1.0.jar
org.springframework.aop-3.0.5.RELEASE.jar
org.springframework.asm-3.0.5.RELEASE.jar
org.springframework.beans-3.0.5.RELEASE.jar
org.springframework.context-3.0.5.RELEASE.jar
org.springframework.core-3.0.5.RELEASE.jar
org.springframework.expression-3.0.5.RELEASE.jar
org.springframework.jdbc-3.0.5.RELEASE.jar
org.springframework.oxm-3.0.5.RELEASE.jar
org.springframework.transaction-3.0.5.RELEASE.jar
org.springframework.web-3.0.5.RELEASE.jar
org.springframework.web.servlet-3.0.5.RELEASE.jar
spring-ldap-1.3.1.RELEASE-all.jar
Und hier ist die Definition der contextSource
Bohne, die Websphere Schwierigkeiten hat, Laden (der Benutzername/Passwort gültig ist, und arbeitet mit Tomcat):
<bean id="contextSource" class="org.springframework.ldap.core.support.LdapContextSource">
<property name="url" value="ldaps://moo.example.com:1300/" />
<property name="userDn" value="CN=foo,OU=baz,DC=bar,DC=blat,DC=org" />
<property name="password" value="*******" />
</bean>
Ich wäre sehr froh, wenn jemand darauf hinweisen könnte, warum dies auf Websphere nicht funktioniert. Ich bin nicht sicher über Klassenlade-Regeln in Websphere und würde mich über jeden Hinweis diesbezüglich freuen.
Vielen Dank Manglu. Wenn ich das Protokoll mit aktiviertem Klassenladevorgang durchblätterte, fand ich, dass eine andere Version des Spring LDAP-Jars von einem anderen Speicherort geladen wurde, da der Administrator eine Spring LDAP-Kontextquelle in JNDI gespeichert hatte. Das Festlegen des Classloaders für die Verwendung von "Parent Leisten" durch meine App hat das Problem behoben. – sigint