Я пытаюсь использовать JavaBeans или в первый раз, и я получаю следующую ошибку :EJB не может быть найден
javax.naming.NameNotFoundException: DemoEJB
javax.naming.NamingException: Lookup failed for 'java:global/DemoEJB/ContenedorEJB/BeanStateful!beanssesion.BeanStatefulLocal' in SerialContext[myEnv={java.naming.factory
Я использую NetBeans с GlassFish 4.1 сервера. Приложение действительно просто, у меня есть проект приложения Enterprise, где я связываю модуль EJB (называемый ContenedorEJB) и клиент (который является сервлетом).
Это структура проектов:
ClienteWeb
Источник Пакеты
-servlets
-ServletEJB.java
ContenedorEJB
-source Пакеты
beanssesion
BeanStateful.java
BeanStatefulLocal.java
DemoEJB модули
-java EE
ContenedorEJB.jar
ClienteEJB.war
Код сервлета приведен ниже. Единственное, что я могу сделать, это посмотреть на SessionBean,
c.lookup("java:global/DemoEJB/ContenedorEJB/BeanStateful!beanssesion.BeanStatefulLocal");
сохранить его, а затем использовать реализованные методы getValor и setValor только чтобы увидеть, если значения я посылаю к модулю EJB сохраняются. Но он теряется, потому что он не может найти BeanStateful, даже если он есть.
package servlets;
import beanssesion.BeanStatefulLocal;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ServletEJB extends HttpServlet {
BeanStatefulLocal beanStateful = lookupBeanStatefulLocal();
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
try (PrintWriter out = response.getWriter()) {
out.println("<!DOCTYPE html>");
out.println("<html>");
out.println("<head>");
out.println("<title>Servlet ServletEJB</title>");
out.println("</head>");
out.println("<body>");
out.println("Enviamos un valor al EJB Stateful: ");
beanStateful.setValor("Valor desde Servlet");
out.println("Valor devuelto " + beanStateful.getValor());
out.println("</body>");
out.println("</html>");
}
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
@Override
public String getServletInfo() {
return "Short description";
}// </editor-fold>
private BeanStatefulLocal lookupBeanStatefulLocal() {
try {
Context c = new InitialContext();
return (BeanStatefulLocal) c.lookup("java:global/DemoEJB/ContenedorEJB/BeanStateful!beanssesion.BeanStatefulLocal");
} catch (NamingException ne) {
Logger.getLogger(getClass().getName()).log(Level.SEVERE, "exception caught", ne);
throw new RuntimeException(ne);
}
}
}
Любой может помочь?
Да, я следовал примеру и пытался использовать как сессионные компоненты Stateful, так и Stateless. Я попробовал то, что вы предложили, но он все еще не может найти компонент ejb: StandardWrapperValve [ServletEJB]: Servlet.service() для сервлета ServletEJB выбрал исключение java.lang.NoClassDefFoundError: beanssesion/BeanStatefulLocal – nanonymous