Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SpringRoo:在更新时触发操作–;最佳做法_Java_Spring_Architecture_Spring Roo - Fatal编程技术网

Java SpringRoo:在更新时触发操作–;最佳做法

Java SpringRoo:在更新时触发操作–;最佳做法,java,spring,architecture,spring-roo,Java,Spring,Architecture,Spring Roo,我已经玩了一点SpringRoo,现在我在问自己,在对象更新之后,Roo建议的方式或最佳实践方式是什么 让我用一个例子来解释: 假设我想实现一个基于web的Bug跟踪器(我不想这样做,这只是一个示例)。一个bug追踪器,是关于问题的。每个问题都有一个状态(新建、已确认、已分配、正在进行、已解决)、一个标题和一些其他字段 用户有一个web表单,可以在其中输入和更新所有字段(状态、标题等)。当问题的状态从“进行中”切换到“已解决”时,系统应向所有对错误感兴趣的人员发送电子邮件(如何维护此感兴趣人员列

我已经玩了一点SpringRoo,现在我在问自己,在对象更新之后,Roo建议的方式或最佳实践方式是什么

让我用一个例子来解释: 假设我想实现一个基于web的Bug跟踪器(我不想这样做,这只是一个示例)。一个bug追踪器,是关于问题的。每个问题都有一个状态(新建、已确认、已分配、正在进行、已解决)、一个标题和一些其他字段

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

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

  • 如何确定问题状态是否已更改
  • 我们需要确保在问题完成后发送的消息得到更新(例如,将触发器放在问题的setState()方法中不起作用,因为不能保证表单(title…)中的其他值在状态更改之前得到更新
  • 只有在表单有效且问题可能被保存的情况下才能发送邮件(我不面临无法提交事务的问题–这将是另一个问题)

是否有人拥有良好的、可测试的(单元测试)和可维护解决方案?可维护意味着处理此问题的代码不应放在控制器中,因为它将在多个控制器中使用,并且有一天有人将实现一个新的控制器,他可能会忘记处理此电子邮件问题。

您可以使用
@PostUpdate
注释在上,是一个JPA生命周期回调侦听器

class Issue{

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

@skaffman:为什么要删除spring标签:这是一个与spring相关的问题?