2016-10-23 28 views
0

我正在開發一個基於EJB的應用程序,其中我有實用程序類。爲了實現它,我有兩個選擇:工具類:EJB Session還是Simple Object?

  • 創建一個簡單的對象JpaUtility,在我把GETALL方法 靜態的,以便能夠從類名訪問(JpaUtility.getAll)

/*簡單對象效用*/

public class JpaUtility 
{ 
public static List<T> getAll(EntityManager manager, Class<T> clazz) { 
     return manager.createQuery("...."); } 
} 
  • 創建EJB會話包含GETALL方法,然後注入並在需要時使用 。

/* EJB程序*/

@Stateless 
public class JpaUtility 
{ 
@PersistentContext 
private EntityManager manager; 
public static List<T> findAll(Class<T> clazz) { 
     return manager.createQuery("...."); } 
} 

的問題是:哪一個提供最佳性能?簡單對象還是EJB無狀態?換句話說,與簡單對象相比,EJB提供了什麼?

+1

你測試過嗎?您需要考慮您將以這種或那種方式將PersistenceContext注入到您的代碼中,因此您需要確定幫助器類是否僅從設計角度或性能角度來看有幫助。測試出來並看到 – kolossus

回答

2

你要完成的樣子「通用模式DAO」,有許多是「準備」實現了從there.One什麼AdamBien:"Generic CRUD Service" 更精細,省去了定製解決方案的需求,並接近簡單來自Apache DeltaSpike的Spring模板:DeltaSpike Data module

現在回到你原來的問題,EJB或POJO,在你的情況下,當在EE容器中使用實體管理器時,必須使用「容器管理」,因此你的「正確「選項是EJB或CDI,但不是普通的非託管POJO。

+0

謝謝你的回答。爲什麼你說「正確」的選擇? (我同意你的看法,但是如何爭辯這個選擇?) – Riadh

+1

如果你使用了一個非託管的POJO,那麼你應該通過一個實體管理器工廠來獲得實體管理器,如果你需要將它與一個事務上下文相關聯,那麼額外的工作應該被需要。 EJB和CDI bean可以讓你免受這種痛苦,編寫額外的代碼,這可能會導致更多的錯誤。 – garfield

+0

使用EJB/CDI的主要優點是容器給定的事務上下文。那沒問題? – Riadh