Прочитав об этом так долго, у меня теперь есть шанс испачкать мою руку с 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 настраивает и использует эти компоненты.
Большое спасибо за любую помощь.