无状态和有状态bean的EJB示例差异 [英] EJB example for stateless and stateful beans difference

查看:165
本文介绍了无状态和有状态bean的EJB示例差异的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我很熟悉EJB,而我正在努力了解无状态和有状态bean之间的区别,所以我做了一个简单的例子来测试它们。

  @Stateless 
public class Service {

private int num;

public Service(){
}

public int getNum(){
return num;
}

public void setNum(){
this.num ++;
}
}






  @WebServlet(/ Controller1)
public class Controller1 extends HttpServlet {
@EJB
private Service serv;

public Controller1(){
super();
}

protected void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException {
// TODO自动生成的方法stub
serv.setNum();
response.getWriter()。println(serv.getNum());
}

protected void doPost(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException {

}

}

而有状态的等价物:

  @Stateful 
public class ServiceStateful implements Serializable {
/ **
*
* /
private static final long serialVersionUID = 1L;
private int num;

public ServiceStateful(){
}

public int getNum(){
return num;
}

public void setNum(){
this.num ++;
}
}






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

@EJB
private ServiceStateful serv;

public Controller(){
super();
}

protected void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException {
// TODO自动生成的方法stub
serv.setNum();
response.getWriter()。println(serv.getNum());
}

protected void doPost(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException {

}

}

这两个例子都是完全一样的,这对我来说是令人惊讶的。有人可以在这里解释什么交易?

解决方案

您可以使用无状态会话bean的实例变量,但它们不保证在方法调用之间保留。如果这两种方法都相同,那么这意味着您可能会在同一会话内的方法调用中获得相同的无状态会话Bean实例。


I'm new to EJB, and I'm trying to understand the diference between Stateless and Stateful bean, so I made a simple example to test them.

@Stateless
public class Service {

private int num;

    public Service(){
    }

    public int getNum() {
        return num;
    }

    public void setNum() {
        this.num++;
    }
}


@WebServlet("/Controller1")
public class Controller1 extends HttpServlet {
    @EJB
    private Service serv;

    public Controller1() {
        super();
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        serv.setNum();
        response.getWriter().println(serv.getNum());
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }

}

And the Stateful equivalent:

@Stateful
public class ServiceStateful implements Serializable{
    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    private int num;

    public ServiceStateful(){
    }

    public int getNum() {
        return num;
    }

    public void setNum() {
        this.num++;
    }
}


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

    @EJB
    private ServiceStateful serv;

    public Controller() {
        super();
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        serv.setNum();
        response.getWriter().println(serv.getNum());
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }

}

Both examples act exactly the same, which is surprising for me. Can someone please explain what is the deal here?

解决方案

You can use instance variables of a stateless session bean, but they're not guaranteed to be preserved across method calls. If both approaches behave the same, it simply means you're probably getting the same stateless session bean instance across method calls within the same session.

这篇关于无状态和有状态bean的EJB示例差异的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆