Was muss ich sonst noch in ejb 2.x Ohr?
Frage
Ich habe jetzt
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>
Gibt es etwas, das ich von einer Arbeits Ohr Anwendung fehle und was ist der Zweck dieser Konfigurationsdateien? Wie greife ich auf die Dienste von meiner ejb aus dem Servlet?
Lösung
Sie erhalten eine EJB Deployment Descriptor in test.jar/META-INF/ejb-jar.xml
benötigen und den EAR-Deployment Descriptor your.ear/META-INF/application.xml
zu gehen haben ( nicht in der EJB jar!).
Die ejb-jar.xml wird so etwas wie das folgende XML-Fragment für Ihre EJBs enthält:
<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>
Ich arbeitete mit EJB3 mich, wo die Dinge ein wenig anders sind, und Sie haben nicht die Home-Schnittstellen nicht mehr. So nehmen Sie mein Beispiel mit einem Körnchen Salz.
Im Inneren des web.xml Sie einen entsprechenden Hinweis auf die EJB haben müssen:
<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>
Die <ejb-link/>
verweist auf die entsprechende <ejb-name/>
Ihrer EJB, wenn Ihre Referenz in der gleichen JAR wie EJB ist. Andernfalls werden Sie den Namen der JAR wie <ejb-link>test.jar#MyCoolEJB</ejb-link>
preprend haben.
Dann in Ihrem Servlet können Sie für einen JNDI-Lookup "java: comp / env / TheJNDINameOfYourEJB", um die Home-Schnittstelle Ihres EJB zugreifen. Ich hoffe, dass Sie ein paar Hinweise gab, sich tiefer zu gehen.
BTW: Wenn EJB 2.x keine feste Voraussetzung ist, haben dann einen Blick auf EJB 3.x. Viele Dinge noch einfacher in dieser Version zu verwenden!
Andere Tipps
Ihr EJB scheint nicht gut verpackt: es in einem eigenen EJB-Modul sein sollte, und ich kann nicht den EJB-Deployment Descriptor (eine ejb-jar.xml-Datei) sehen. Hier finden Sie aktuelle Verpackungsanwendungen und Verzeichnisstruktur in einer EJB-Modul JAR Datei