stateless session bean不能保存状态,但不意味着不能有属性,比如你用session bean保持一个数据库连接,每个方法可能都会用到,那么将他作为属性有什么不对吗?而且大多数情况下,statless session bean都会有属性的,不然就不符合面向对象了。

解决方案 »

  1.   

    我觉他这种写法也不能说他就不规范,stateless  bean中也是可以定义变量的,这种变量可以在一个方法被调用的过程中维持状态,但这是同stateful session bean 是有很大不同的,当另一个客户端调用这个stateless  bean的方法时,使用的并不能确定就是刚才的那个stateless  bean,兴许是另外一个,何来状态的保存呢?后来一个问题,这在开发中也很常见,对于大批量的数据查询,直接使用sessionbean 效率要高,规范中也没有说不能这样用,相反是被推荐的做法!
      

  2.   

    想怎么写就怎么写,其实EJB你就当成它是普通的类就可以了,普通的类难道不可以定义变量,不可以将变量保存将句柄进行传递吗?当然可以,不过这是不是Sun的初衷就很难说了。不过无所谓,只要用起来方便,能够实现就可以了,当然可能可一直性和扩展性,维护性较差,但是并不是每一个客户都有这样的要求。
      

  3.   

    规则是有的,但是也可以不完全局限于规则的。下面一段话出自《精通EJB》,我觉得是对这个情况的说明。EJB设计策略:如何选择状态会话Bean和无状态会话Bean如果抽象的商务过程确实需要状态会话Bean,那么状态会话Bean一定是理想的选择。但是当使用状态会话Bean的时候,它固有的需要对象的特性会降低容错性。当发生系统级异常或者故障的时候,客户当时的状态会随着状态会话Bean一同丢失。为了提高容错能力,可以在EJB容器中不断备份状态会话Bean。也可以采用下面的方法:使用无状态会话Bean,然后在方法调用的过程中,将客户的状态作为参数传
          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    递。这样做通常会导致服务器性能下降,尤其是客户在进行远程调用和在网上传递
    ~~
    的客户状态非常大的情况。同时,网络性能也会有所牺牲。
      

  4.   

    这是我的理解:所谓无状态会话Bean是指他对于每一个调用它的用户都保持一致的状态,但不等于个别用户的操作不对它有影响.