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?

War es hilfreich?

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top