微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 Liferay 7.3 中执行事务方法?

如何解决如何在 Liferay 7.3 中执行事务方法?

我创建了一个 scheduler,它在同一个事务中删除 DB 中的行并在删除后插入新行。 但是如果添加行失败,我会丢失数据,因为删除是正确的。 如何删除添加相同的事务以避免在出现错误时丢失数据? 我想在同一个表中进行删除和两个不同的添加

解决方法

分三种情况:

  1. 如果你的代码一切都在一个方法中,一个由服务构建器生成的 LocalServiceImpl 类:

    • Liferay 自动创建一个事务,该事务从第一个 LocalServiceImpl 中调用的第一个方法开始,并在该方法对其他 LocalServiceImpl 类的方法执行的内部调用中传播。
    • 因此,我们的想法是在 LocalServiceImpl 方法中设置一个入口点,Liferay 将在该方法中自动启动事务,并从该方法调用必须在同一事务中执行的其他 LocalServiceImpl 方法。
    • 注意:默认情况下,只有更改数据的方法(添加、更新、删除)才会创建新事务。
  2. 如果您的代码在 MVCActionCommand 中,您可以使用 BaseTransactionalMVCActionCommand 作为父类并在 doTransactionalCommand 方法中实现您的代码。

  3. 如果您的代码在 LocalServiceImpl 类之外,您始终可以使用 TransactionInvokerUtil 手动创建一个事务:

     import com.liferay.portal.kernel.transaction.*;
     import com.liferay.portal.kernel.service.*;
     import java.util.concurrent.*;
    
     private _invokeTransactionally(Callable callable)
         throws Throwable {
    
         Class<?>[] rollbackForClasses = new Class<?>[1];
    
         rollbackForClasses[0]=Exception.class;
    
         try {
             TransactionInvokerUtil.invoke(
                 TransactionConfig.Factory.create(
                     Propagation.REQUIRED,rollbackForClasses),callable);
         }
         catch(Exception e) {
              // handle the exception
         }
     }
    
     Callable callable = new Callable<Void>() {
         Void call() throws Exception {
              // here insert your code
    
              return null;
         }
     }
    
    • 您的代码应该放在 Callable 类中。
    • 执行:_invokeTransactionally(callable);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?