2010-12-15 7 views
1

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.

Antwort

3

Schalten Klasse Laden Spur die gleiche Klasse nicht haben. Dies würde Ihnen sagen, welche Klassen geladen sind und von welchem ​​Jar. Wie Sajan erwähnte, gibt es wahrscheinlich, dass es doppelte Klassen im Klassenpfad gibt und dass der Klassenlader, den Sie erwarten, diese Klasse nicht geladen hat (und ein Elternklassenlader hat wahrscheinlich eine Klasse geladen).

NoClassDefFoundError (NCDFE) bedeutet, dass es die gesuchte Klasse nicht finden konnte. Fehler bei der statischen Initialisierung würde von Linkage Fehler explizit herausstellen als „java.lang.ExceptionInInitializerError“ (EIIE) "

Beide NCDFE und EIIE erweitern.

Im Allgemeinen all diese Fehler leicht können behoben werden, indem auf die das Laden von Klassen für den Server. auch zur Unterstützung des Class Loader-Viewer in Ihren Fehlerbehebungsaktivitäten in der Admin-Konsole zur Verfügung verwenden.

HTH Manglu

+0

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

3

Dies ist eine klebrige und häufige Ausnahme. Denken Sie daran, dass NoClassDefFoundError nicht die Klasse bedeutet nicht gefunden wurde, sondern es bedeutet:

NoClassDefFoundError: The given class could be found, but something went wrong when initializing it (an interface it implemented could not be found, something went wrong in a static initializer etc.).

Von here.

1

Bitte überprüfen Sie, dass Sie in jeder anderen möglichen jar

1

Bitte überprüfen Sie, ob Sie die Abhängigkeiten in pom.xml-Datei hinzugefügt haben,

+0

Ich schätze, er würde dann ClassNotFound bekommen – kboom

Verwandte Themen