質問
今
ear
|----test.jar
|-------META-INF
|-------application.xml
|-------test
|-------Test.class
|-------TestEJB.class
|-------TestHome.class
|----test.war
|-------WEB-INF
|-------web.xml
|-------test
|-------TestServlet.class
application.xml
<application>
<display-name>Ejb Test</display-name>
<module>
<ejb>test.jar</ejb>
</module>
<module>
<web>
<web-uri>test.war</web-uri>
<context-root>/test</context-root>
</web>
</module>
</application>
web.xml
<web-app>
<servlet>
<servlet-name>Test</servlet-name>
<servlet-class>test.TestServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Test</servlet-name>
<url-pattern>/test</url-pattern>
</servlet-mapping>
</web-app>
動作中のearアプリケーションに不足しているものはありますか?これらの構成ファイルの目的は何ですか?サーブレットからejbのサービスにアクセスするにはどうすればよいですか?
解決
test.jar/META-INF/ejb-jar.xml
にEJBデプロイメント記述子が必要であり、EARデプロイメント記述子はyour.ear/META-INF/application.xml
に移動する必要があります(EJB jar内では NOT !)。
ejb-jar.xmlには、EJB用の次のXMLフラグメントのようなものが含まれます。
<enterprise-beans>
<session>
<ejb-name>MyCoolEJB</ejb-name>
<local-home>test.TestHome</local-home>
<local>test.Test</local>
<ejb-class>test.TestEJB</ejb-class>
</session>
<!-- ... more <session/> or <entity/> entries ... -->
</enterprise-beans>
EJB3を使用して作業しましたが、状況は少し異なり、ホームインターフェースはもうありません。塩の粒で私の例を見てください。
web.xml内には、EJBへの対応する参照が必要です。
<ejb-local-ref>
<ejb-ref-name>TheJNDINameOfYourEJB</ejb-ref-name>
<ejb-ref-type>Session</ejb-ref-type>
<ejb-link>MyCoolEJB</ejb-link> <!-- the value from <ejb-name/> above -->
</ejb-local-ref>
<ejb-link/>
は、参照がEJBと同じJARにある場合、EJBの対応する<ejb-name/>
を指します。そうでない場合は、<ejb-link>test.jar#MyCoolEJB</ejb-link>
などのJARの名前を前に付ける必要があります。
次に、サーブレットで<!> quot; java:comp / env / TheJNDINameOfYourEJB <!> quot;のJNDIルックアップを実行できます。 EJBのホームインターフェイスにアクセスします。それがあなた自身をより深く掘り下げるためのいくつかの指針を与えてくれたことを願っています。
BTW:EJB 2.xが固定要件でない場合は、EJB 3.xをご覧ください。そのバージョンでは、多くのことが使いやすくなりました!
他のヒント
あなたのEJBはうまくパッケージされていないようです。それはそれ自身のEJBモジュールにあるはずで、EJBデプロイメント記述子(ejb-jar.xmlファイル)を見ることができません。 パッケージアプリケーションおよび EJBモジュールJARファイルのディレクトリ構造