如何在liferay中实现交易?

时间:2014-05-09 14:43:30

标签: liferay portlet liferay-6

在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;
        }

    }

任何人都可以用新鲜的眼睛帮助我吗?

2 个答案:

答案 0 :(得分:0)

最好的方法是在自定义服务(即ServiceBuilder)方法中执行此操作。像MyCustomServiceUtil.addRoles()这样的东西。在这种情况下,交易由Liferay管理,您将获得预期的结果。

答案 1 :(得分:0)

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

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

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

您可以参考以下链接获取更多信息。

Transaction Management with liferay service