Что еще мне нужно в ejb 2.x ear? - PullRequest
       3

Что еще мне нужно в ejb 2.x ear?

0 голосов
/ 16 сентября 2009

у меня сейчас

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>

Есть ли что-то, чего мне не хватает в работающем ушном приложении, и какова цель этих файлов конфигурации? Как мне получить доступ к сервисам моего ejb из сервлета?

Ответы [ 2 ]

1 голос
/ 16 сентября 2009

Ваш EJB не выглядит хорошо упакованным: он должен быть в своем собственном модуле EJB, и я не вижу дескриптор развертывания EJB (файл ejb-jar.xml). Взгляните на Приложения для упаковки и Структура каталогов в файле JAR модуля EJB

1 голос
/ 16 сентября 2009

Вам понадобится дескриптор развертывания EJB в test.jar/META-INF/ejb-jar.xml, а дескриптор развертывания EAR должен перейти на your.ear/META-INF/application.xml ( NOT внутри EJB jar!).

Файл ejb-jar.xml будет содержать что-то вроде следующего фрагмента XML для ваших 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>

Я сам работал с 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-name/> вашего EJB, если ваша ссылка находится в том же JAR, что и ваш EJB. В противном случае вам придется предварительно отрендерить имя JAR, например, <ejb-link>test.jar#MyCoolEJB</ejb-link>.

Затем в вашем сервлете вы можете выполнить поиск JNDI для "java: comp / env / TheJNDINameOfYourEJB", чтобы получить доступ к домашнему интерфейсу вашего EJB. Надеюсь, это дало вам несколько советов, чтобы глубже вникнуть в себя.

Кстати: если EJB 2.x не является фиксированным требованием, взгляните на EJB 3.x. В этой версии много чего стало проще!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...