EJB 3.0,是线程安全的吗?

时间:2014-10-07 20:00:16

标签: thread-safety ejb ejb-3.0

HY,

我是EJB的新手。现在我正在研究EJB 3.0规范。如果我有两个不同的JSF托管bean,如下一个:

 @ManagedBean
 public class CocheBean {   
      @EJB 
      private ICochesService cochesService = null;
 }

 @ManagedBean
 public class UsuarioBean {     
      @EJB 
      private ICochesService cochesService = null;
 }
  1. cochesService的注入实现在两种情况下是相同的吗?我的意思是,对于每个注释,ejb容器都会获取一个新对象或者是同一个对象吗?

  2. 为什么他们将EJB称为会话bean?它们的会话范围是什么?它们是否存在直到用户会话到期?

  3. 它说你不必担心无状态EJB是否是线程安全的,因为容器为每个请求都有一个不同实例的池,但是如果它们是无状态的,并且没有多个线程只能访问一个线程的危险ejb,为什么容器会创建一个池而不仅仅是一个?

  4. 使用JSF托管bean,如果这个bean是请求或会话作用域,并且因为我们在这个bean中注入了ejbs,它们不能同时为每个用户或每个请求调用一次,对吧?

  5. 如何使用JPA注释指定EJB bean方法的事务属性?

  6. 由于

1 个答案:

答案 0 :(得分:1)

  1. 这取决于 - 如果ICochesService是无状态的,那么每个人都会有不同的对象。如果它是有状态的或单个的,则两个bean都会注入相同的对象

  2. 对这两个问题的回答是否:)请参阅Oracle docs

  3. 完全

  4. 您可以根据需要为每个请求调用尽可能多的bean。

  5. 请参阅Oracle tutorial了解Java Transaction API。