2

LDAPサーバーからユーザーの詳細を検索し、JSPを使用して単純なHTMLページを出力する単純なSpringMVCアプリケーションがあります。このアプリケーションはTomcat6で正常に動作します。SpringLDAP1.3.1とLDAPTemplateを使用してLDAPルックアップを実行します。

ただし、このアプリケーションWARをWebsphere 7にデプロイすると、アプリは実行されません。Websphereは500内部サーバーエラーを返します。Websphereのログファイルを見ると、

[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)

私のweb-inf\libディレクトリには、を含むすべてのJARファイルがorg.springframework.beans-3.0.5.RELEASE.jarありますInitializingBean。したがって、Websphereがクラスが欠落していると報告している理由がわかりません。

私の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

そして、Websphereがロードに問題を抱えているBeanの定義は次のcontextSourceとおりです(ユーザー名/パスワードは有効であり、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>

これがWebsphereで機能しない理由を誰かが指摘できれば、とてもうれしく思います。Websphereでのクラスのロード規則についてはよくわかりません。これについて、アドバイスをいただければ幸いです。

4

4 に答える 4

3

クラスローディングトレースをオンにします。これにより、どのクラスがどのJarからロードされるかがわかります。Sajanが述べたように、クラスパスに重複するjarがあり、予想されるクラスローダーがこのクラスをロードしていない(そして親クラスローダーがクラスをロードしている可能性が高い)可能性があります。

NoClassDefFoundError(NCDFE)は、探しているクラスを見つけることができなかったことを意味します。静的初期化のエラーは、明示的に「java.lang.ExceptionInInitializerError」(EIIE)」として判明します。

NCDFEとEIIEの両方がリンケージエラーから拡張されます。

一般に、これらのエラーはすべて、サーバーのクラスの読み込みをオンにすることで簡単にトラブルシューティングできます。また、トラブルシューティングアクティビティを支援するために、管理コンソールで使用可能なクラスローダービューアを使用してください。

HTHマングル

于 2010-12-15T23:00:49.220 に答える
3

これは厄介で一般的な例外です。NoClassDefFoundErrorこれは、クラスが見つからなかったことを意味するのではなく、次のことを意味することを忘れないでください。

NoClassDefFoundError:指定されたクラスは見つかりましたが、初期化時に問題が発生しました(実装されたインターフェイスが見つからなかった、静的初期化子で問題が発生したなど)。

ここから。

于 2010-12-15T02:27:16.440 に答える
1

他の可能なjarファイルに同じクラスがないことを確認してください

于 2010-12-15T02:39:19.450 に答える
1

pom.xmlファイルに依存関係を追加したかどうかを確認してください。

于 2011-02-04T07:12:36.743 に答える