在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;
}
}
任何人都可以用新鲜的眼睛帮助我吗?
答案 0 :(得分:0)
最好的方法是在自定义服务(即ServiceBuilder)方法中执行此操作。像MyCustomServiceUtil.addRoles()
这样的东西。在这种情况下,交易由Liferay管理,您将获得预期的结果。
答案 1 :(得分:0)
这应由服务构建器默认处理。
为此你应该使用LocalServiceImpl
类而不是* Util
类
Liferay中的事务入口点是* LocalServiceImpl类。 DML操作在一个实体上更新,插入和删除不使用对LocalServiceUtil或LocalService的调用,因为这将导致两个事务边界。
您可以参考以下链接获取更多信息。