实用程序 class:EJB 会话还是简单对象?
Utility class : EJB Session or Simple Object?
我正在开发一个基于 EJB 的应用程序,其中我有 JpaUtility 实用程序 class。要实现它,我有两个选择:
- 创建一个简单的对象JpaUtility,我在里面放了getAll方法
静态,启用从 class 名称 (JpaUtility.getAll)
的访问
/* 简单对象实用程序 */
public class JpaUtility
{
public static List<T> getAll(EntityManager manager, Class<T> clazz) {
return manager.createQuery("...."); }
}
- 创建一个包含getAll方法的EJB-Session,然后注入并使用
需要的时候。
/* EJB 实用程序 */
@Stateless
public class JpaUtility
{
@PersistentContext
private EntityManager manager;
public static List<T> findAll(Class<T> clazz) {
return manager.createQuery("...."); }
}
问题是:哪一个提供最好的性能?简单对象还是 EJB 无状态?换句话说,与简单对象相比,EJB 提供了什么?
您想要完成的事情看起来像 'Generic Pattern DAO',AdamBien there.One 有很多 "ready" 实现:"Generic CRUD Service"
更详尽,消除了对自定义解决方案的需求并接近 Apache DeltaSpike 的 Spring 模板的简单性:DeltaSpike Data module
现在回到你原来的问题,EJB 或 POJO,在你的情况下,当在 EE 容器中工作时使用实体管理器,必须 "container managed",所以你的 "correct" 选项是 EJB或 CDI 但不是普通的非托管 POJO。
我正在开发一个基于 EJB 的应用程序,其中我有 JpaUtility 实用程序 class。要实现它,我有两个选择:
- 创建一个简单的对象JpaUtility,我在里面放了getAll方法 静态,启用从 class 名称 (JpaUtility.getAll) 的访问
/* 简单对象实用程序 */
public class JpaUtility
{
public static List<T> getAll(EntityManager manager, Class<T> clazz) {
return manager.createQuery("...."); }
}
- 创建一个包含getAll方法的EJB-Session,然后注入并使用 需要的时候。
/* EJB 实用程序 */
@Stateless
public class JpaUtility
{
@PersistentContext
private EntityManager manager;
public static List<T> findAll(Class<T> clazz) {
return manager.createQuery("...."); }
}
问题是:哪一个提供最好的性能?简单对象还是 EJB 无状态?换句话说,与简单对象相比,EJB 提供了什么?
您想要完成的事情看起来像 'Generic Pattern DAO',AdamBien there.One 有很多 "ready" 实现:"Generic CRUD Service" 更详尽,消除了对自定义解决方案的需求并接近 Apache DeltaSpike 的 Spring 模板的简单性:DeltaSpike Data module
现在回到你原来的问题,EJB 或 POJO,在你的情况下,当在 EE 容器中工作时使用实体管理器,必须 "container managed",所以你的 "correct" 选项是 EJB或 CDI 但不是普通的非托管 POJO。