Spring Roo:触发更新动作 - 最佳实践

时间:2011-02-14 16:07:38

标签: java spring architecture spring-roo

我已经玩过 Spring Roo 了,现在我问自己Roo建议的方式或在对象更新后触发动作的最佳实践方式。

让我用一个例子解释一下: 假设我想实现一个基于Web的Bug Tracker(我不想这样做,它只是一个例子)。错误跟踪器,是关于问题。每个问题都有一个州(新的,已确认的,已分配的,正在进行的,已解决的),一个标题和一些其他领域。

用户有一个Web表单,可以输入和更新所有字段(状态,标题,...)。当问题的状态从“进行中”切换到“已解决”时,系统应该向所有对该错误感兴趣的人发送电子邮件(如何维护此感兴趣的人员列表,超出此问题的范围)

我遇到的问题是:如果在状态发生变化时(在Roo应用程序中)如何触发电子邮件发送过程?因为有几个问题:

  • 如何确定问题状态是否已更改?
  • 我们需要确保在问题完成更新后发送的消息(例如它不起作用,将触发器放在Issue的setState()方法中,因为它不能保证其他值在状态发生变化之前更新表格(标题......)。
  • 只有在表格有效并且可能保存问题时才能发送邮件(我不会面临无法提交交易的问题 - 这将是另一个问题)

有没有人有一个好的,可测试的(单元测试)和可维护的解决方案?可维护的意味着特别是处理这个的代码不应该放在控制器中,因为它将被用在几个控制器中有一天,有人会实施一个新的控制器,他可能会忘记处理这个电子邮件问题。

1 个答案:

答案 0 :(得分:2)

您可以使用@PostUpdate注释,JPA生命周期回调侦听器。

class Issue{

  @PostUpdate
  protected void onPostUpdate(){
    //This method wil run after the update
    if(this.state == Resolved){
         //...
    }
  }

Here is more information about the available callbacks.