[英]Session context is null JBOSS 7.1
更新問題:
我使用了基於jre 1.7的JBOSS Develper Studio 8,JBOS服務器7.1。我有一個帶有ejb和Web項目的J2EE項目。 在ejb項目中,我有兩個相同的ejb 3.1。在Web項目中,我只有一個servlet。 此servlet在第一個ejb中調用簡單的測試方法,然后在第二個ejb中調用。 測試方法中的第一件事是通過此代碼對資源會話上下文進行依賴注入
@Resource
private SessionContext context;
第一個ejb可以正常運行,但是第二個(以及隨后的任何一個)對會話上下文返回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";
}
}
誰能知道問題出在哪里。
使用注入的第一個規則是服務器(也稱為“容器”)創建要注入的對象。
在您的情況下,每個EJB實例的生命周期都在容器的完全控制之下。
在您的代碼中,您創建的第一個firstEJB
實例被容器創建的另一個實例替換。 第二個secondEJB
實例仍然是您創建的實例(它缺少@EJB
注釋),因此它沒有經過適當的生命周期管理,也沒有經過@Resource
注入處理而完全構建。
因此,對您的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());
}
}
應該給您想要的結果。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.