2014-10-07 45 views
0

Hy,EJB 3.0,是线程安全的吗?

我是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的injecteds实现在两种情况下相同的?我的意思是,对于每个注释,EJB容器回来一个新的对象还是同一个对象?

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

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

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

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

感谢

回答

1
  1. 这取决于 - 如果ICochesService是无状态比他们每个人都会有不同的对象。如果它是有状态的单身比两个bean将具有相同的对象注入

  2. 回答这两个问题是没有:)参阅Oracle docs

  3. 究竟

  4. 你可以叫许多豆你希望每个请求。

  5. 有关Java事务API的信息,请参阅Oracle tutorial

+0

好的,但如果ejb是无状态的,并且没有多线程访问只有一个无状态ejb的危险,为什么容器创建它们的池而不仅仅是一个? – user3254515 2014-10-07 21:52:37

+0

因为在那种情况下它将是一个单身人士。无状态bean应该有一个明确的目的,所以你可以调用它,它会为你完成它的工作,并且可以被丢弃(例如,考虑DAO)。 – 2014-10-08 08:47:50