创建了一个插件,该插件将拦截对 grails-services 方法的所有方法调用,该方法将在原始方法完成后调用另一个方法(不在同一服务中)。
我在 doWithDynamicMethods 中添加了以下代码。
for (serviceClass in application.serviceClasses){
serviceClass.metaClass.invokeMethod = { String name, args ->
//execute the original method
def metaMethod = delegate.metaClass.getMetaMethod(name, args)
def result = metaMethod.invoke(delegate, args)
//execute additional method on other bean
def otherbean.doSomething(Object object)
return result
}
}
一切正常,每次都调用 otherbean.doSomething(),但后来我意识到,如果 otherbean.doSomething() 抛出任何异常,则在原始方法中完成的数据库更改不会回滚。
似乎事务的范围仅涵盖原始方法,并在原始方法调用完成后立即提交。
有没有办法在同一个事务中执行原始方法和附加方法?
注意:otherbean 不是 grails 服务