2014-10-07 159 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