首先让我指出,虽然我已经使用 Java SE 有一段时间了,但这是我第一次涉足 Java EE 领域。我正在使用 Netbeans 6.9 和 Netbeans 代码生成器来完成大部分繁重的工作(更多关于这方面的内容)。GlassFish 的版本是 3 - 下载 Netbeans 时附带的标准版本。
我创建了一个无状态会话 Bean 来返回一个简单的字符串,如下所示:
@Stateless
public class SDBSStatelessSessionBean implements SDBSStatelessSessionBeanRemote {
@Override
public String sayHello() {
return "This seems to be working just fine.";
}
}
接口定义为:
@Remote
public interface SDBSStatelessSessionBeanRemote {
String sayHello();
}
类和接口都是使用 Netbeans 提供的“插入代码”功能创建的。我认为这样可以避免犯任何愚蠢的新手错误(哦,具有讽刺意味)。
我的问题是,当我尝试从 servlet 调用 Enterprise bean 时(调用是使用 Netbeans 代码生成器中的“Call Enterprise Bean”选项添加的),我收到以下错误:
javax.ejb.EJBException: javax.ejb.CreateException: Could not create stateless EJB
异常是由以下原因引起的: NoClassDefFoundError
这是 servlet 进行调用的方式:
@EJB
private SDBSStatelessSessionBeanRemote sDBSStatelessSessionBean;
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
try {
out.println("<html>");
out.println("<head>");
out.println("<title>Test Servlet</title>");
out.println("</head>");
out.println("<body>");
out.println("<p>" + sDBSStatelessSessionBean.sayHello() +"</p>");
out.println("</body>");
out.println("</html>");
} catch (Exception e) {
out.println("<p>" + e.getMessage() + "</p>");
out.println("</body>");
out.println("</html>");
} finally {
out.close();
}
}
恐怕在广泛的谷歌搜索之后我无法找到这个问题的解决方案(主要是因为似乎接近这个问题的少数论坛帖子包含太多行话,我无法遵循解决方案)。
我非常感谢任何建议/帮助指出我正确的方向。