Java EE服务依赖项

时间:2012-07-19 09:57:18

标签: java-ee ejb-3.0

我希望这个问题不是太抽象。这是关于Java EE体系结构或服务设计。 我有两个业务逻辑(这里为了便于阅读而简化):

@Stateless
@LocalBean
public class EmailService {

  @EJB
  private SomeBean someBean;
  // ... some other EJBs to acces the DB layer (and using JPA)

  public void sendEmail(String recipient /* some parameters */) {
     // ... some email sending logic here

  }
}

@Stateless
@LocalBean
public class ExecutePaymentService {

  @EJB
  private UserBean userBean;
  // ... some other EJBs to acces the DB layer (and using JPA)

  public void executePayment(int amount, int userId) {
     // ... some payment logic here
     // NEED TO SEND EMAIL HERE
  }
}

我的设计是JSF Managed Beans正在调用上述服务。我的问题是Managed Beans包含一些逻辑:
- 执行付款
- 如果付款成功发送电子邮件
- 如果不做别的事情

我想在服务EJB中使用这个逻辑,因此托管Bean只收集输入并返回结果。

其他选项是ExecutePaymentService扩展EmailService然后调用sendEmail。这可以导致巨大的继承树能够从任何服务提供任何服务,更难以长期维护和大应用程序....由于大多数服务需要注入EJB来访问数据库我不能使用非EJB服务......

什么是允许service to call another service的更好方法?

1 个答案:

答案 0 :(得分:0)

你应该问自己,ExecutePaymentService是一个电子邮件服务。
也许电子邮件服务只是您需要的功能主义者之一?
为什么不将电子邮件服务注入ExecutePaymentService?
我的回答可以应用于其他方法,例如WebSerivces(可以使用EJB实现),这更像是经典的面向对象设计,而不是真正的Java技术设计问题,并且一旦你理解了ExecutePaymentService是在它的基础上一个EmailService(我感觉答案是否定的) -
你会明白如何更好地模拟豆类。