当前位置: 技术问答>java相关
ejb的线程模式????
来源: 互联网 发布时间:2015-01-16
本文导语: 假如有多个ejb :a1,a2,a3......都要访问另一个ejb :b ,那么a1,a2,a3....对b的访问是否是独立的,也就是说a1改变了b的某个属性的值p,a2查询b的p属性的值的时候,是否也会改变? 那么如何实现对b的分享和共享? ...
假如有多个ejb :a1,a2,a3......都要访问另一个ejb :b ,那么a1,a2,a3....对b的访问是否是独立的,也就是说a1改变了b的某个属性的值p,a2查询b的p属性的值的时候,是否也会改变? 那么如何实现对b的分享和共享?
|
共享是对应于EJB Object来说的,而不是Bean的实例。一个Bean的实例某一时刻只能为一个EJB Object服务。当然除了Stateful,Bean的实例可能在EJB Object之间交换。但这不是共享,Container负责Bean的实例的正确状态,这也就是说Bean实例的交换是不交换状态的。
除了Entity Bean,无论客户端,还是一个EJB使用另一个EJB的唯一方法是用home.create()创建一个,同时这会在Contianer中创建一个对应的EJB Object。这是因为Stateful整个生命中期只为一个客户服务,而Stateless和Message-Driven是无状态的,不需要共享。
只有Entity Bean代表持续性数据,是需要共享的,那它的EJB Object是怎样被共享的呢?a1通过create(id)创建了一个Entity Bean,得到一个EJB Object的引用,a2执行findByPrimaryKey(id),Container会返回同一个EJB Object的引用,这样a1,a2共享同一个EJB Object。而共享的效果是和Container实现的事务隔离层有关的。默认是独占访问的。
除了Entity Bean,无论客户端,还是一个EJB使用另一个EJB的唯一方法是用home.create()创建一个,同时这会在Contianer中创建一个对应的EJB Object。这是因为Stateful整个生命中期只为一个客户服务,而Stateless和Message-Driven是无状态的,不需要共享。
只有Entity Bean代表持续性数据,是需要共享的,那它的EJB Object是怎样被共享的呢?a1通过create(id)创建了一个Entity Bean,得到一个EJB Object的引用,a2执行findByPrimaryKey(id),Container会返回同一个EJB Object的引用,这样a1,a2共享同一个EJB Object。而共享的效果是和Container实现的事务隔离层有关的。默认是独占访问的。