2009-09-16 9 views
0

J'ai maintenantDe quoi d'autre ai-je besoin dans l'oreille ejb 2.x?

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> 

Y at-il quelque chose que je manque d'une application de l'oreille de travail et quel est le but de ces fichiers de configuration Comment puis-je accéder aux services de mon ejb à partir du servlet?

Répondre

1

Vous aurez besoin d'un descripteur de déploiement d'EJB dans test.jar/META-INF/ejb-jar.xml et le descripteur de déploiement EAR doit aller à your.ear/META-INF/application.xml (pas à l'intérieur du pot EJB!).

Le ejb-jar.xml contiendra quelque chose comme le fragment XML suivant pour votre EJB:

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

J'ai travaillé avec EJB3 moi-même, où les choses sont un peu différentes et vous n'avez pas la maison interfaces plus longtemps. Alors prenez mon exemple avec un grain de sel.

A l'intérieur du web.xml vous devez avoir une référence correspondant à l'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> 

Les <ejb-link/> points du <ejb-name/> correspondant de votre EJB, si votre référence est dans le même JAR que votre EJB. Sinon, vous devrez préprendre le nom du fichier JAR, par exemple <ejb-link>test.jar#MyCoolEJB</ejb-link>. Puis, dans votre servlet, vous pouvez faire une recherche JNDI pour "java: comp/env/TheJNDINameOfYourEJB" pour accéder à l'interface home de votre EJB. J'espère que cela vous a donné quelques conseils pour approfondir vous-même. BTW: Si EJB 2.x n'est pas une exigence fixe, alors jetez un oeil à EJB 3.x. Beaucoup de choses sont devenues plus faciles à utiliser dans cette version!

+0

Y a-t-il aussi en plus de et quelle est la différence? Est-ce que je ne peux pas simplement inclure la partie EJBHome dans mon application et appeler le create directement sans utiliser refs et jndi? – JtR

+0

Le premier est pour les références à l'interface distante d'un EJB, le second pour les références à l'interface locale. Voir, par exemple, http://www.jguru.com/faq/view.jsp?EID=1166568 pour une explication des différences entre toutes les interfaces. – janko

+0

JNDI: Dans EJB 2.x, vous utilisez la méthode create() de l'interface home pour obtenir une référence à votre EJB. Cependant, vous devez d'abord avoir une référence à l'interface home et pour cela vous avez besoin de refs et de JNDI. – janko

Questions connexes