3 grails exception-handling grails-orm
我正在尝试为Hibernate抛出的乐观锁类型异常实现异常处理,但我遇到了一个奇怪的问题.看来我无法捕获任何Gorm异常.
例如,我在我的服务中有这个代码:
try {
User user = User.get(1);
Thread.sleep(10000);
user.viewedAt(new Date());
user.save(flush:true);
} catch (OptimisticLockingException ex) {
log.error("Optimistic lock exception");
} catch (StaleObjectStateException ex) {
log.error("Optimistic lock exception");
}
Run Code Online (Sandbox Code Playgroud)
当我用两个线程命中这个块时,它会爆炸并且异常传播到Grails的标准异常处理程序.即使报告的异常是,也永远不会调用catch块StaleObjectStateException.
我注意到我可以捕获异常,如果我让它传播到控制器并在那里捕获它,但似乎我无法在服务中实现奇怪的异常处理.
我错过了什么?
小智 6
我找到了这个的底部,我发布它以防其他任何人遇到这个.出现此问题是因为try/catch块处于事务性服务中.虽然grails报告在save()调用期间抛出了异常,但实际上它是在事务提交后整个方法之后调用的.
所以似乎:
flush: true 对交易服务没有影响我终于通过自己手动管理事务来解决这个问题
try {
User.withNewTransaction {
User user = User.get(id); // Must reload object
.. // do stuff
user.save(flush:true)
}
} catch (OptimisticLockingException ex) {
...
}
Run Code Online (Sandbox Code Playgroud)
我希望这对其他人有用!
| 归档时间: |
|
| 查看次数: |
3037 次 |
| 最近记录: |