2

首先让我指出,虽然我已经使用 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();
    }
}

恐怕在广泛的谷歌搜索之后我无法找到这个问题的解决方案(主要是因为似乎接近这个问题的少数论坛帖子包含太多行话,我无法遵循解决方案)。

非常感谢任何建议/帮助指出我正确的方向。

4

1 回答 1

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.";
    }     
}
于 2011-05-01T13:51:55.953 回答