У меня есть POJO, созданный из сервлета. Мне нужно выполнить поиск EJB в этом POJO, либо CDI, либо JNDI. Мой контейнер JEE — TomEE 1.6.0.
Мой вопрос таков: нужен ли EJB удаленный интерфейс? Потому что, если я создам экземпляр непосредственно из сервлета с помощью @EJB, удаленный интерфейс не понадобится...
Просто посмотрите на этот простой пример, который всегда генерирует исключение NameNotFoundException.
@Stateless
public class MyEJB
{
public String sayHello()
{
return "Hello";
}
}
Следующий сервлет пытается найти MyEJB:
@WebServlet("/myServlet")
public class MyServlet extends HttpServlet
{
private static final long serialVersionUID=1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException,IOException
{
try
{
Context ctx = new InitialContext();
MyEJB ejb = (MyEJB) ctx.lookup("MyEJB");
System.out.println(ejb.sayHello());
}
catch(Exception ex)
{
ex.printStackTrace();
throw new RuntimeException(ex);
}
}
}
Строка: MyEJB ejb = (MyEJB) ctx.lookup("MyEJB");
всегда выдает исключение NameNotFoundException. Но если я использую @EJB, все работает нормально. Но мне нужно выполнить поиск в режиме JNDI, потому что, наконец, я создам экземпляр этого EJB в POJO.
Итак, почему этот поиск не работает?