ejb-3.0 – 无状态和有状态会话bean之间的区别

我知道有状态bean在不同的实例方法调用之间保持对话会话,但是无状态不会.我的问题,假设我有一个无状态bean实现,如下所示

import javax.ejb.Stateful;
import javax.ejb.Stateless;

import com.tata.ejb3.data.HelloEJBInterface;

@Stateless
public class ValueEJB implements ValueEJBInterface{

    private int value;
    @Override
    public int getValue() {
        return this.value;
    }

    @Override
    public void setValue(int value) {
        this.value = value;
    }
}

我有我的bean客户端(一个servlet),它启动bean调用,如下所示

@EJB(mappedName="E/ValueEJB /remote")
ValueEJBInterface value;

....

value.setValue(250);
System.out.println(value.getValue());//This statement prints the value 250

....

根据我的理解,因为我的bean是无状态bean,它不应该以250的值显示.

私有int值;是一个即时变量,如果一个无状态方法设置其值,则该值将在方法exit上过期.但是在这里,即使通过我的第二个方法调用,我也能得到值’250′.这是违反无国籍概念的吗?我缺少什么吗?

最佳答案
调用不同方法时Stateful v Stateless bean行为之间的区别.

STATEFUL:在有状态Bean上调用不同的方法时,会创建不同的bean实例.

((MyStatefulBeanRemote) ctx.lookup("ejb/MyStatefulBean")).doingStatefulThing();

((MyStatefulBeanRemote) ctx.lookup("ejb/MyStatefulBean")).doingNothingStatefulThing();

***Output: Note the creation of separate objects.***

INFO: Calling doingStatefulThing...com.myeclipseide.ejb3.stateful.**MyStatefulBean@2fe395**

INFO: Calling doingNothingStatefulThing...com.myeclipseide.ejb3.stateful.**MyStatefulBean@81cfcb**

STATELESS:在无状态Bean上调用不同的方法时,会合并bean,因此不会创建bean的新实例.

((MyStatelessBeanRemote) ctx.lookup("ejb/MyStatelessBean")).doSomething(); 

((MyStatelessBeanRemote) ctx.lookup("ejb/MyStatelessBean")).doNothing();

***Output: Note the reuse of he bean object.***

INFO: Doing something ...com.myeclipseide.ejb3.stateless.**MyBean@213b61**

INFO: Doing Nothing ...com.myeclipseide.ejb3.stateless.**MyBean@213b61**

转载注明原文:ejb-3.0 – 无状态和有状态会话bean之间的区别 - 代码日志