Emply EJB и сервлет - PullRequest
       23

Emply EJB и сервлет

1 голос
/ 18 апреля 2011

Прочитав об этом так долго, у меня теперь есть шанс испачкать мою руку с EJB. Я использую Glassfish + Eclipse 3.7 в Ubuntu.

Сначала я создал EJB, который просто возвращает приветственное сообщение. Затем я создаю клиент приложения для доступа к этому EJB с использованием InitialContext. Это работает точно так, как ожидалось.

Затем я создал сервлет для доступа к этому EJB. Ни доступ с @EJB, ни InitialContext не работают.

Когда я использую @EJB, появляется страница 404 с таким описанием: «Запрошенный ресурс () недоступен».

Когда я использую InitialContent, выдается исключение ClassNotFoundException. По-видимому, загрузчик классов сервлета не может получить доступ к классу EJB. Я попытался добавить файл JJ EJB в папку lib сервлета и получил сообщение об ошибке, что имя JNDI уже существует. Очевидно, Glass Fish пытается опубликовать EJB-файл в папке lib сервлета.

Единственный способ заставить это работать - это опубликовать EJB с сервлетом. Таким образом, я могу получить сервлет и автономное приложение для доступа к этому EJB. Проблема в том, что мне нужно всегда использовать сервлет с EJB, что нежелательно, так как мой клиент может не захотеть использовать веб-интерфейс.

В любом случае, мой вопрос заключается в том, как правильно использовать сервлет для доступа к EJB-компоненту вне его загрузчика классов без повторной публикации EJB-компонента.

P.S. Также возможно, что проблема заключается в том, как Eclipse настраивает и использует эти компоненты.

Большое спасибо за любую помощь.

Ответы [ 3 ]

1 голос
/ 03 мая 2011

Несколько указателей:

  • вам может понадобиться поместить веб-приложение и ejb-jar в .ear (корпоративное приложение) и развернуть его на glassfish
  • вам могут понадобиться удаленные интерфейсы на пути к классам веб-приложения (если они недоступны во время выполнения, но были во время компиляции, вы не можете ожидать, что он будет работать)
  • NetBeans, как правило, лучше для корпоративных приложений и мастеров для создания и развертывания приложений. Попробуйте.
1 голос
/ 01 мая 2011

Возможно, вам нужно рассматривать компонент EJB как удаленный.И, возможно, это действительно так, поскольку вы не даете много подробностей о том, как вы развертываете.Попробуйте направления в http://glassfish.java.net/javaee5/ejb/EJB_FAQ.html#nonJavaEEwebcontainerRemoteEJB.

0 голосов
/ 04 мая 2011

Через некоторое время я обнаружил, что могу сделать это, обозначив его как "/". Это даже работает с инъекцией.

...