EJB3.0的无状态session bean的困惑?

来源:百度知道 编辑:UC知道 时间:2024/06/14 07:25:15
首先贴出我的代码:
(这里为了节省空间,我省略了引入包)
●详细代码:
接口:
public interface StatelessEjb {
public void compute(int i);
public int getResult();
}
实现类:
@Stateless
@Remote
public class StatelessEjbBean implements StatelessEjb {
private int state;
@Override
public void compute(int i) {
state = state + i;
}
@Override
public int getResult() {
return state;
}
}
客户端:
public class StatelessEjbClient {
public static void main(String[] args) {
try {
InitialContext ctx = new InitialContext();
//第一次会话
StatelessEjb ejb1 = (StatelessEjb) ctx.lookup("StatelessEjbBean/remote");
System.out.println(ejb1.getResult());
ejb1.compute(1);
System.out.println(ejb1.getResult());
ejb1.compute(1);
System.out.println(ejb1.getResult());
ejb1.compute(1);
System.out.println(ejb1.getResult());
//第二次会话

ejb容器存储stateless session bean,这些bean可能是pre-created的,正由于stateless,每次函数调用容器会认为与上下文无关所以是动态reassign一个bean的实体给客户端使用,换句话说stateless里面request的level是per-method
至于debug为什么是有规律的,可能和JPDA的结构和机制有关,我就不太清楚了

初学乍练请多指教

我想应该是共享的时机不对吧,你试试把那个bean搞成同步的试试。这样就有先后了。

你把@Stateless 改成@Stateful 试试

无状态session bean 不共享
有状态的共享

专业啊