在几个EJB中不干扰相同私有方法的最佳方法是什么?

时间:2014-03-30 12:54:18

标签: java ejb dry

我有一些无状态的EJB,它们都有一个相同的私有方法:

private User getLoggedinUser() {
  String username = sessionContext.getCallerPrincipal().getName();
  return entityManager.createNamedQuery(User.findByUsername, User.class)
        .setParameter("username", username).getSingleResult();
}

避免此代码重复的最佳方法是什么?将getLoggedinUser()外包到另一个bean并将其注入我现有的EJB中?

1 个答案:

答案 0 :(得分:0)

作为一项规则,EJB应该高度具有凝聚力,而SOA体系结构往往像Facades(Service Facades)一样工作。因此,这取决于EJB职责。如果是具有大量辅助方法的EJB,则可以将它们提取到专用服务(请记住,CDI支持继承模型,对于对某些帮助程序进行分组可能很有用)。我更倾向于避免在方法之间传递entityManager,主要是因为使用参数加载方法(越来越好),最后在同一事务中工作的所有EJB和服务共享持久化上下文。

另一种方法是使用Interceptor,这个想法是基于Decorator模式,但Interceptors暗示了一点 magic ,所以,只有当你想要完成前提条件或交叉关注时才使用它