我试图使用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服务器。 该应用程序非常简单,我有一个企业应用程序项目,其中我链接了一个EJB模块(称为ContenedorEJB)和一个客户端(它是一个Servlet)。
这是项目结构:
ClienteWeb
源包
-servlets
-ServletEJB.java
ContenedorEJB
- 源包
beanssesion
BeanStateful.java
BeanStatefulLocal.java
DemoEJB
-Java EE模块
ContenedorEJB.jar
ClienteEJB.war
servlet代码如下所示。我这样做的唯一的事情就是抬头看一个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);
}
}
}
任何人都可以帮忙吗?
是的,我是一个例子,并尝试有状态和无状态会话bean。我尝试了你的建议,但仍无法找到ejb bean:StandardWrapperValve [ServletEJB]:Servlet.service()for servlet ServletEJB抛出异常 java.lang.NoClassDefFoundError:beanssesion/BeanStatefulLocal – nanonymous