java - session 上下文为空 JBOSS 7.1

标签 java jboss ejb jboss7.x sessioncontext

更新问题:

我使用了 JBOSS Develper Studio 8、基于 jre 1.7 的 JBOS 服务器 7.1 我有一个带有 ejb 和 web 项目的 J2EE 项目。在 ejb 项目中,我有两个相同的 ejb 3.1 在 web 项目中,我只有一个 servlet。该servlet 在第一个ejb 中调用简单的测试方法,然后在第二个ejb 中调用。测试方法中的第一件事是通过此代码对资源 session 上下文进行依赖注入(inject)

@Resource
private SessionContext context;

第一个 ejb 工作正常,但第二个(以及任何后续)为 session 上下文返回 null。这是完整的代码:

FirstServlet.java

@WebServlet("/FirstServlet")
public class FirstServlet extends HttpServlet {
private static final long serialVersionUID = 1L;

@EJB
FirstEJB firstEJB = new FirstEJB();
SecondEJB secondEJB = new SecondEJB();
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    PrintWriter out = response.getWriter();
    out.println(firstEJB.helloFirst());
    out.println(secondEJB.helloSecond());   
}
}

FirstEJB.java

@Stateless
public class FirstEJB {

@Resource
private SessionContext contextFirst;

public String helloFirst(){

    System.err.println(contextFirst.toString());

    return "Hello from FirstEJB";    

 }
}

SecondEJB.java

@Stateless
public class SecondEJB {

@Resource
private SessionContext contextSecond;

public String helloSecond(){

   System.err.println(contextSecond.toString());    

   return "Hello from SecondEJB";    

 }
}

有谁知道问题出在哪里吗?

最佳答案

使用注入(inject)的第一条规则是您的服务器(也称为“容器”)创建您注入(inject)的对象。

在您的情况下,每个 EJB 实例的生命周期都在容器的完全控制之下。

在您的代码中,您创建的 firstEJB 实例将替换为容器创建的另一个实例。 secondEJB 实例仍然是您创建的实例(它缺少 @EJB 注释),因此它没有受到适当的生命周期管理,也没有完全用它的@Resource 注入(inject)已处理。

因此,对您的 servlet 代码进行简单的更改:

@WebServlet("/FirstServlet")
public class FirstServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    @EJB
    private FirstEJB firstEJB;

    @EJB
    private SecondEJB secondEJB;

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        PrintWriter out = response.getWriter();
        out.println(firstEJB.helloFirst());
        out.println(secondEJB.helloSecond());   
    }
}

应该会给你想要的结果。

关于java - session 上下文为空 JBOSS 7.1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32761318/

相关文章:

没有 gc 的 Java - io

java - 如何在 Eclipse Kepler 中合成图像?

java - 如何通过两个字段加入(CriteriaBuilder)

java - MySQL 驱动程序 JBoss AS 7 的 ClassNotFoundException

用于垃圾收集的java命令行

java - 如何将radius添加到jboss ldap认证?

java - JBoss EAP 7 和 Ifinispan

java - 违反 EJB 规范

java - 在 j2ee 应用程序中的站点之间复制数据

java - 如何更改 TomEE/OpenEJB 中的 EJB 计时器线程池大小?