Я изучаю J2EE и EJB и столкнулся со странной проблемой.Это настройка моего проекта:
Я использую Glassfish 3.1 и Eclipse 3.7.У меня есть два проекта в Eclipse:
- EJB 3.0-совместимый проект,
myEjbProject
- Динамический веб-проект,
myWebProject
I 'm вставка сессионного компонента EJB mySessionBeanPackage.mySessionBean
из myEjbProject
в сервлет myServletPackage.myServlet
в myWebProject
и затем (в сервлете) вызов простого метода, определенного в сессионном компоненте.
Я предоставилmyWebProject
со ссылкой на myEjbProject
(используя диалог Свойства -> Ссылки на проект).Однако по какой-то причине сервер не может найти сессионный компонент.Точная ошибка, которую я получаю:
SEVERE: класс [LmySessionBeanPackage / mySessionBean] не найден.Ошибка при загрузке [class myServletPackage.myServlet]
Обратите внимание, что и EJB-проект и веб-проект были опубликованы на сервере, и я дважды проверил, что классфайл, сгенерированный для компонента, фактически присутствует на сервере (поэтому я не могу придумать причину, по которой сервер не может их найти).
Может кто-нибудь сказать мне, что ячто-то не так?
Я также пытался
явно добавить папку классов myEjbProject
в список путей сборки Java -> Библиотеки myWebProject
.Это в дополнение к ссылке на проект (хотя я думаю, что добавления ссылки на проект было бы достаточно в первую очередь).В любом случае, это не имеет значения (то же сообщение об ошибке, что и раньше).
создание JAR-файла из myEjbProject
с использованием опции Export -> EJB Jar File (я не хочуначать писать сценарий Ant).Затем я поместил этот JAR-файл в раздел «Путь сборки Java -> библиотеки» myWebProject
.Этот подход также не решает проблему (то же сообщение об ошибке, что и раньше).
изменение сессионного компонента для получения
- без интерфейса
- локальный интерфейс
- удаленный интерфейс
и изменение впрыска соответственно.Например, для компонента с только локальным интерфейсом я использовал:
@EJB mySessionBeanPackage.mySessionBeanLocal myBean
Этот подход также не решил проблему (то же сообщение об ошибке, что и раньше).
полностью исключил myEjbProject
и добавил сессионный компонент в myWebProject
как myServletPackage.mySessionBean
(тот же пакет, что и сервлет).В этом случае я могу успешно внедрить сессионный компонент в сервлет, используя
@EJB mySessionBeanPackage.mySessionBean myBean
, полностью исключив myEjbProject
идобавление сессионного компонента в myWebProject
как mySessionBeanPackage.mySessionBean
(новый пакет).В этом случае я также могу успешно внедрить сессионный компонент в сервлет, используя
@EJB mySessionBeanPackage.mySessionBean myBean