鑑於:簡單的JSF webapp(無Seam),讓JSF bean調用幾個EJB,然後加載並保留JPA實體。我想是使用@Singleton
註解爲EJB的和注入的EntityManager
代替EntityManagerFactory
:EJB 3.1 Singleton + JPA + JSF需要的設計建議
@Singleton
public class MyEJB {
@PersistenceContext(unitName = PERSISTENCE_UNIT_NAME)
protected EntityManager em; // not EntityManagerFactory
}
規範說@Singleton
是線程安全的,支持併發性和事務屬性,這些屬性(從我的POV)使得它的安全從JSF bean中調用。我期望還有性能優勢,因爲每次調用都不會重新創建EntityManager
,這是內部緩存功能。
我的主要關注點是在我有幾個單身人士的情況下對JPA實體進行創建/更新操作,結果導致長壽命的EntityManagers數量相同。
- 如果一個單身人士更新JPA實例以及這些 更改如何填充到其他單身人士會發生什麼情況?
- 由於我無法關閉實體管理器,我是否需要在每個實體更新時沖洗它 ?
- 如果這幾個單身人士會共用同一個實體 經理,會更好嗎?
- 我只看到了這樣的設計的幾個例子。爲什麼?有沒有嚴重的 缺點?
非常感謝提前!
這個答案很好,但如果您提到注入的EM實際上是每個事務EM的代理,它可能會清除混淆。請參閱http://stackoverflow.com/questions/7010470/ejb-3-1-transaction-entitymanager/7017915#7017915 –
@bkail,Behrang感謝您的回答和評論。 – Osw
@Osw:不客氣。 :) – Behrang