因为stateless session bean 的instance是共享的
而stateful session bean 并不是共享的。
也就是说,stateless session bean都每个client都一样,而stateless session bean是不一样的,所以维护成本和创建成本都比较高。

解决方案 »

  1.   

    会话bean的部署描述符必须声明该bean是有状态或无状态的。一个无状态bean是在方法调用间不维护任何状态信息的bean。通常,会话bean的优点是代替客户端维护状态。然而,让会话bean无状态也有一个好处。无状态bean不能被钝化。因为它不维护状态,所以没有需要保存的信息。容器可以删除bean的实例。客户端永远不会知道无状态bean的删除过程。客户端的引用是EJBObject.如果客户端稍后又调用了一个商业方法,则EJBObject通知容器在实例化一个新的会话bean.因为没有状态,因此也没有信息需要恢复。无状态bean可以在客户端间共享,只是在某一时刻只能有一个客户端执行一个方法。因为在方法调用间没有需要维护的状态,所以客户端可使用任何无状态bean的实例。这使得容器可以维护一个较小的可服用bean的缓冲池,节省主存。因为无状态bean在方法调 用间不能维护状态,因此从技术上讲在home interface的create()方法不应有参数。
      

  2.   

    这么说如果我在create的时候用lookup到datasouce并把连接打开,那么只要在这个session有效期内的话,都不用担心跟数据库方面的问题?通常是这样做法吗?然后在remove中把datasource释放掉?那其实我们显示的调用create啊,remove啊都是白费劲,这些东西都是continer自己在那管理,对吧?
      

  3.   

    你好啊,study_body(珍惜每一天)
      

  4.   

    我认为还是应该“我们显示的调用create,remove”,客户在使用的时候create(),从缓冲池中申请到一个无状态的会话bean,不用时remove(),交还给缓冲池管理。如果我们用完后没有remove(),估计容器就需要对处于连接的会话bean做超时判断了(销毁?还是回收?)。
      

  5.   

    恩,那可能又是一种开销,奇怪,我在发布的时候没设置缓冲池可维护的instance数啊,发布之后最大就10个,在那设置呢
      

  6.   

    在WebLogic的http:\localhost\console下面设置
      

  7.   

    我用oracle 9ias的oc4j呢
      

  8.   

    我认为会话bean一般不需要remove,因为只要取消会话(关闭ie),容器会自动remove