【问题标题】:How to implement transactions in liferay?如何在liferay中实现事务?
【发布时间】:2023-06-26 02:13:01
【问题描述】:

在 liferay 中,我有一个要求,例如,如果我正在更新多个用户的角色,如果其中一个更新用户角色失败,那么我想回滚用户的所有更新角色。我已申请如下。

@Transactional(isolation = Isolation.SERIALIZABLE,
            propagation = Propagation.REQUIRES_NEW)
    public int updateUserRole(long userId,long groupId,long roleId) throws   SystemException{
        try{
            return UserTokenFinderUtil.updateUserRole(userId,groupId,roleId);
        }
        catch(Exception e){
            System.out.println("Exception occured UserTokenServiceImpl");
            e.printStackTrace();
            return -1;
        }

    }

谁能帮我换个思路?

【问题讨论】:

    标签: liferay portlet liferay-6


    【解决方案1】:

    最好的方法是使用自定义服务(即 ServiceBuilder)方法。像MyCustomServiceUtil.addRoles() 这样的东西。在这种情况下,事务由 Liferay 管理,您将获得预期的结果。

    【讨论】:

      【解决方案2】:

      这应该由服务构建器默认处理。

      为此,您应该使用 LocalServiceImpl 类而不是 *Util

      Liferay 中事务的入口点是 *LocalServiceImpl 类。 DML 操作在一个实体上从另一个实体更新、插入和删除不使用对 LocalServiceUtil 或 LocalService 的调用,因为这将导致两个事务边界。

      您可以参考下面的链接了解更多信息。

      Transaction Management with liferay service

      【讨论】:

        最近更新 更多