2009-09-16 3 views
0

я сейчасЧто еще мне нужно в 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> 

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

ответ

1

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

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

Я работал с 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> 

The <ejb-link/> указывает на соответствующий <ejb-name/> вашего EJB, если ваша ссылка находится в том же JAR, как ваш EJB. В противном случае вам придется предварительно указать имя JAR, например <ejb-link>test.jar#MyCoolEJB</ejb-link>.

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

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

+0

Есть ли также в дополнение к и в чем разница? Не могу ли я включить часть EJBHome в мое приложение и вызвать создание напрямую, не используя ссылки и jndi? – JtR

+0

Первый для ссылок на удаленный интерфейс EJB, последний для ссылок на локальный интерфейс. См., Например, http://www.jguru.com/faq/view.jsp?EID=1166568 для объяснения различий между всеми интерфейсами. – janko

+0

JNDI: В EJB 2.x вы используете метод create() домашнего интерфейса, чтобы получить ссылку на ваш EJB. Однако сначала вам нужно иметь ссылку на домашний интерфейс, для этого вам нужны ссылки и JNDI. – janko

Смежные вопросы