首先我要指出,虽然我已经使用Java SE一段时间了,但这是我第一次涉足Java EE领域。我正在使用Netbeans 6.9和Netbeans代码生成器来完成大部分繁重的工作(更多关于这一点)。 GlassFish的版本是3 - 当您下载Netbeans时出现的沼泽标准版本。
我创建了一个无状态会话Bean,以返回一个简单的String,如下所示:
@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();
}
}
我担心在广泛的谷歌搜索之后我找不到解决这个问题的方法(主要是因为这个问题似乎附近的一些论坛帖子包含了太多的术语,让我无法遵循解决方案)。< / p>
我非常感谢任何建议/帮助指出我正确的方向。
答案 0 :(得分:3)
如果这是一个本地EJB(在与servlet相同的JVM / EE容器中),您可以尝试将EJB声明为@LocalBean
(在@Stateless
注释下)。您还可以删除@Remote
接口(并使您的EJB无法实现它)。
所以你的EJB将成为
@Stateless
@LocalBean
public class SDBSStatelessSessionBean
{
public String sayHello()
{
return "This seems to be working just fine.";
}
}