2014-08-27 66 views
0

我想弄清楚結合使用純EJB EJB Web服務來處理httpsession的最佳方法。我創建了一個實用程序類,我有一個控制器類。哪裏是實例化控制器類中的實用程序類的最佳位置?該計劃是該訪問每個用戶/調用web服務,即使用本網站的第一次應該有一個分配給他們一個HttpSession對象:HttpSession與EJb的結合

public class Utility { 

@Resource 
private WebServiceContext wsContext; 

public MessageContext mc = wsContext.getMessageContext(); 

public HttpSession getSession(){ 
    return ((HttpServletRequest)mc.get(MessageContext.SERVLET_CONTEXT)).getSession(true); 
} 
} 

@Path("controller") 
@Stateless 
public class ControllerEJB { 

@POST 
public void registerUser(
     @QueryParam("fornamn") String fornamn, 
     @QueryParam("efternamn") String efternamn, 
     @QueryParam("epost") String epost, 
     @QueryParam("epost2") String epost2, 
     @QueryParam("password") String password 
){ 

    User user = new User(); 
    user.setEmail(epost); 
    user.setPassword(password); 
    user.setFornamn(fornamn); 
    user.setEfternamn(efternamn); 
} 

@GET 
@Produces(MediaType.APPLICATION_JSON) 
public String firstMethod(){ 
    User user = new User(); 
    user.setEmail("sam.gholizadeh"); 
    return "unfisnihedmethod"; 
} 
} 

我已經按照本教程http://docs.oracle.com/cd/E12839_01/web.1111/e13734/stateful.htm但正如前面所提及般,我不確定如果訪問者被分配了一個會話ID,那麼如何以及在哪裏實現保持跟蹤的邏輯。

編輯:控制器類應該是有狀態的還是無狀態的?

回答

1

由於您使用的JAX-RS,它直接將HttpServletRequest使用JAX-RS更簡單:

@Path("controller") 
@Stateless 
public class ControllerEJB { 


    @POST 
    public void registerUser(
      @QueryParam("fornamn") String fornamn, 
      @QueryParam("efternamn") String efternamn, 
      @QueryParam("epost") String epost, 
      @QueryParam("epost2") String epost2, 
      @QueryParam("password") String password, 
      @Context HttpServletRequest request){ 

      HttpSession session = request.getSession(true); 

      ... 

    } 
} 
+0

你知道什麼!謝謝。去嘗試一下。 – user2455558 2014-08-27 08:29:51