将HttpSession与EJb结合使用

时间:2014-08-27 08:21:16

标签: java java-ee servlets

我正在尝试找出与纯EJB Web服务结合使用httpsession的最佳方法。我创建了一个实用程序类,我有一个控制器类。在控制器类中实例化实用程序类的最佳位置在哪里?计划是访问/调用网络服务的每个用户,即第一次使用网站,应该分配一个httpsession对象:

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 个答案:

答案 0 :(得分:1)

由于您使用的是JAX-RS,使用JAX-RS直接获取HttpServletRequest更容易:

@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);

           ...

    }
}