刚刚学习ejb,想测试看一下stateful和stateless的区别,在服务器端定义了一个接口:
public interface User { 
     public  int getNo();
}
一个实现的接口:
@Remote
@Stateless
public class StatelessUser implements User {
private int i;
public int getNo() {
return i++;
}
}在客户端想调用这个接口:
public class StatelessTest { public static void main(String[] args) throws Exception{
InitialContext ctx = new InitialContext();

//注意这里用到的是接口
User user = (User)ctx.lookup("StatelessUser/remote");
System.out.println(user.getNo());
System.out.println(user.getNo());
System.out.println(user.getNo());
System.out.println(user.getNo());
System.out.println(user.getNo());
System.out.println(user.getNo());
System.out.println(user.getNo());

}
}
结果打印出来的接过是
0
0
1
1
2
2
3
十分困惑为什么会有重复的数字,而当才用stateful的时候就不会出现这种问题,求解。谢谢

解决方案 »

  1.   

    既然是stateless,那就不要定义有state的成员变量i。
      

  2.   

    我明白有状态无状态的区别,这个程序本来我想观察一下执行两次
    User user = (User)ctx.lookup("StatelessUser/remote"); 
    System.out.println(user.getNo()); 
    System.out.println(user.getNo()); 
    System.out.println(user.getNo()); 
    System.out.println(user.getNo()); 
    System.out.println(user.getNo()); 
    System.out.println(user.getNo()); 
    System.out.println(user.getNo()); User user = (User)ctx.lookup("StatelessUser/remote"); 
    System.out.println(user.getNo()); 
    System.out.println(user.getNo()); 
    System.out.println(user.getNo()); 
    System.out.println(user.getNo()); 
    System.out.println(user.getNo()); 
    System.out.println(user.getNo()); 
    System.out.println(user.getNo()); i值的变化,看看在无状态的中的i值的情况,看一看下在有状态和无状态下i值的变化,但是出现了这种问题,不知道是什么原因,继续求解
      

  3.   

    不知道这个帖子是否对您有帮助?http://topic.csdn.net/u/20091026/15/d2705875-147c-4945-870a-f57b1115b608.html