创建了一个插件,它将拦截对原始方法完成后调用另一个方法(不在同一服务中)的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服务