我知道有状态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;
}
}
Run Code Online (Sandbox Code Playgroud)
我有我的bean客户端(一个servlet),它启动bean调用,如下所示
@EJB(mappedName="E/ValueEJB /remote")
ValueEJBInterface value;
....
value.setValue(250);
System.out.println(value.getValue());//This statement prints the value 250
....
Run Code Online (Sandbox Code Playgroud)
根据我的理解,因为我的bean是无状态bean,它不应该以250的值显示.
私有int值; 是一个即时变量,如果一个无状态方法设置其值,则该值将在方法exit上过期.但是在这里,即使通过我的第二个方法调用,我也能得到值'250'.这是违反无国籍概念的吗?我缺少什么吗?
小智 5
调用不同方法时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**
Run Code Online (Sandbox Code Playgroud)
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**
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14269 次 |
| 最近记录: |