无状态并不是不保存状态,而是无法在多个实例之间保持状态,因为无状态会话BEAN是共享内存的,所以他是一直保持着你的类变量的,
如果你用状态会话BEAN,结果应该是123 ,123 而不是123,456

解决方案 »

  1.   

    stateless:123,123
    stateful:123,456
      

  2.   

    那末当客户端分别调用count的三个方法时,就一定是用的同一个实例吗?再次运行就一定是另外一个实例吗?还是不太清楚,而且我的确实是stateless bean,客户端运行: 1 2 3,再次运行(服务器未关)4 5 6.
      

  3.   

    无状态的意思并不是每次都初始化一个新的对象而是指服务器上面会存在多个这样的Bean来同时给客户端操作,服务器会随机的找一个空闲的Bean给客户端使用,客户端也不会关心这个Bean是不是和上次调用的Bean是同一个,这样就是指无状态在只有一个客户端的情况下面,服务器只有一个Bean,服务器每次都只分配这个Bean给客户端使用
    所以你的count每次都增加了记住,无状态并不是指这个Bean本来不保存状态属性(就像这个Count值),而是指客户端并不会与会话相关的信息到这个Bean中,客户端不关心使用的是中服务器中的哪一个Bean
      

  4.   

    谢谢楼上两位的讲解,明白些了,我还想知道的就是,客户在调用count1和count2时是不是一个实例呢,如果池里不只一个实例可用。
      

  5.   

    调用 count1 count2 时是一个实例 你通过 Home.create 获得对 remote 接口的ref 通过这个ref 其实引用了一个容器生成的 bean的实例有状态无状态 是在ejb-jar中定义的
    是不是楼主在那里面写错了 出现这个情况?
      

  6.   

    那就是这样了:有状态和无状态bean在第一次被访问的时候结果是一样的,正如那个购物车如果做成无状态的bean第一次也是可以计算出所购商品的价钱的,但是第二次就不一定正确了(有可能把第一个客户的商品也放到购物车里),而有状态的bean则每次都可以正常使用。不知道理解的对不对啊?谢谢指点。
      

  7.   

    我这有 masterEJB2 的电子版
    楼主看一下就明白了
      

  8.   

    to reene2008()
    错误!!!客户端在home.create()后返回一个对象remote,但是你每次调用这个remote的方法,实际上在服务器上面仍然可能使用了不同的Bean对象进行处理,即使这个Remote对象没有发生任何改变!!!无状态表示是remote对应了服务器上面的哪一个Bean是客户端所不关心的,无论服务器使用哪一个对于客户端来说可以正常使用的
      

  9.   

    我感觉也应该是 ChDw(米) 所说的那样,针对我的程序客户调用count1,count2时不一定是一个实例吧。再次谢谢大家的讨论。
      

  10.   

    你声明了一个无状态bean
    但是写了一个有状态bean
    不太好
    至于实现一般来讲是容器相关。
    我们公司出的垃圾容器大概会每次new一个,下次试一下。。
      

  11.   

    你声明了一个无状态bean
    但是写了一个有状态bean
    什么意思阿?有没有状态不是靠程序来定的吧?