在实体Bean中使用无状态EJB bean

时间:2010-09-13 11:13:40

标签: java jpa ejb-3.0

显然在实体bean中使用无状态EJB bean会有异味,但请考虑以下情况并告诉我您是否知道更好的解决方案:

  1. 我有一个InvoiceTemplate实体Bean,其字段为NextInvoiceDate
  2. 生成NextInvoiceDate是一个复杂的过程,应该在InvoiceTemplate类之外执行
  3. 每次NextInvoiceDate存储到db 时,都应更新
  4. InvoiceTemplate

    目前我对NextInvoiceDate实体bean中@PrePersist @PreUpdate方法中InvoiceTemplate的生成有逻辑。逻辑变得越来越复杂,我想将它移到InvoiceTemplate实体bean之外。在我看来应该有一个服务来计算NextInvoiceDate。但是,从InvoiceTemplate内部调用此服务是否正确?

2 个答案:

答案 0 :(得分:3)

这不是一种气味 - 它是一种倾向于领域驱动的设计。

我不知道有任何办法自动执行此操作,但您可以:

  • 在您处理Invoicetemplate的会话bean中,注入具有计算下一个日期的逻辑的帮助bean
  • 在实体上创建一个包含setter的私有字段,在开始使用之前,请致电entity.setNextDateHelper(..)

您还可以检查AspectJ是否不提供某些EJB选项,以便您可以在创建给定类型(InvoiceTemplate)的实体时注入EJB。 AspectJ就像使用spring bean一样工作,我不知道EJB是否有这样的选项。

答案 1 :(得分:0)

您是否需要像服务或EJB那样复杂的东西?你能写一个静态方法(可能在实用程序类中)来保存逻辑吗?通常我对这种事情有很大的偏见,但如果你所拥有的是一些复杂的逻辑,不需要任何数据库交互或大量的对象协作,那么它可能是最干净的方法。