1

创建了一个插件,该插件将拦截对 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 服务

4

0 回答 0