Pergunta

Eu tenho agora

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>

Existe algo que eu estou sentindo falta de um aplicativo de ouvido trabalhando e qual é o propósito destes arquivos de configuração? Como faço para acessar os serviços de minha ejb do servlet?

Foi útil?

Solução

Você vai precisar de um descritor de implementação EJB em test.jar/META-INF/ejb-jar.xml e o descritor de implementação EAR tem que ir para your.ear/META-INF/application.xml ( não dentro do frasco EJB!).

O ejb-jar.xml irá conter algo como o seguinte fragmento XML para seus EJBs:

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

Eu trabalhei com EJB3 mim, onde as coisas são um pouco diferente e você não tem as interfaces casa por mais tempo. Portanto, tome o meu exemplo com um grão de sal.

Dentro do web.xml você vai ter que ter uma referência correspondente ao 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>

Os <ejb-link/> aponta para a <ejb-name/> correspondente de seu EJB, se sua referência está no mesmo JAR como seu EJB. Caso contrário, você vai ter que preprend o nome do JAR, como <ejb-link>test.jar#MyCoolEJB</ejb-link>.

Então, em seu servlet você pode fazer uma pesquisa JNDI para "java: comp / env / TheJNDINameOfYourEJB" para acessar a interface inicial do EJB. Espero, que lhe deu algumas sugestões para aprofundar-se.

BTW: Se EJB 2.x não é um requisito fixo, em seguida, ter um olhar para EJB 3.x. Um monte de coisas ficaram mais fáceis de usar nessa versão!

Outras dicas

Seu EJB não parece bem embalado: deve ser em sua própria módulo EJB e eu não posso ver o descritor de implementação EJB (um arquivo ejb-jar.xml). Ter um olhar para Packaging Applications e Estrutura de Diretórios em um JAR arquivo de módulo EJB

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top