Вопрос
Теперь у меня есть
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>
Есть ли что-то, чего мне не хватает в рабочем приложении ear, и какова цель этих файлов конфигурации?Как мне получить доступ к службам моего ejb из сервлета?
Решение
Вам понадобится дескриптор развертывания 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>
В <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.В этой версии многие вещи стали проще в использовании!
Другие советы
Ваш EJB не кажется хорошо упакованным:это должно быть в его собственном модуле EJB, и я не вижу дескриптор развертывания EJB (файл ejb-jar.xml).Взгляните на Применение в упаковке и Структура каталогов в JAR-файле модуля EJB