2012-03-08 6 views
0

私はJBoss 4.2.3、EJB2、XDocletを使用しており、EJBを含む1つのEARと、その中にさまざまなWebサイトを持つ他のEARをデプロイしています。NoClassDefFoundError for EJBホームクラス

Webサイトの1つからEJBにアクセスしようとすると、NoClassDefFoundErrorが返されます。 検索が成功したようです。たとえば、getContext().lookup(SecurityServiceRemoteHome.JNDI_NAME)が "$ Proxy266"というクラスを返すことがわかります。どこ誤りである、右のルックアップの後、私はこれを呼ぶ "リモートEJB/IFactoryです/ SecurityService /"

remote (proxy: $Proxy266 implements interface com.icumed.ifactory.service.session.SecurityServiceRemoteHome,interface javax.ejb.Handle) 

FYI、SecurityServiceRemoteHome.JNDI_NAME =

を:私はまた、この結合のJBossのJNDIビューで見ますスローされます。

home = (SecurityServiceRemoteHome)PortableRemoteObject.narrow(obj, 
    SecurityServiceRemoteHome.class); 

私は、これは不要かもしれないと私はちょうどここにストレート型変換を行うことができますが、私はそれが問題だとは思わないと聞きました。今まで私がWebで読んだことから、SecurityServiceRemoteHomeが完全にロードされないように思えるかもしれません。おそらく、いくつかの補助的なクラスがありません?私はこれを示すどんなエラーも見ません。これをデバッグする最良の方法は何ですか?

+0

Ok、* that *は問題ありませんでした。私はいくつかのデバッグを追加し、スーパークラス、インタフェース、メソッドの戻り値の型、およびメソッドのパラメータについて、すべての単一クラス定義を記録することができました。だから、どのようにファーストクラスのdef SecurityServiceRemoteHomeが見つからないのですか? –

+0

ああ、あなたが私を助けてくれるかもしれない何かがあります。例外の拡張メッセージは次のとおりです。 java.lang.ClassNotFoundException:ClassLoaderが見つかりません:... SecurityServiceRemoteHome –

+0

およびSecurityServiceRemoteHomeおよびそれに依存するすべてのクラスは、同じクラスローダーを持つようです:org.jboss.mx.loading.UnifiedClassLoader3 –

答えて

0

さらに掘り下げた後、私は答えを見つけました。これはjboss-app.xmlファイルとloader-repository要素と関係があります。背景には、以前はすべてのWARとEJBが入った完全なEARファイルが1つありました。私はそれらを分割することに決めました。そうしたとき、jboss-app.xmlファイルを変更して、アーカイブ名がそれぞれ異なるようにしました。それは間違っていた。 EJBのEARとWARのEARの間で同じでなければなりません(はい、OC4J以外のWARの場合はEARファイルは必要ありません)。さらに、loader-repository要素にアーカイブ名を付ける必要があります。それを残すことは他の問題を引き起こす。