2014-05-09 84 views
0

在liferay中,我有一個要求,如果我更新多個用戶的角色,如果其中一個更新用戶角色失敗,那麼我想回滾用戶的所有更新角色。我已經申請如下。如何在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

要做到這一點的最佳方法是在自定義服務(即ServiceBuilder)方法中執行此操作。類似於MyCustomServiceUtil.addRoles()。在這種情況下,Liferay管理交易,您將獲得預期的結果。

0

這應該由服務構建器默認處理。

爲你應該使用LocalServiceImpl類而不是* Util

的入口點的交易在Liferay的是* LocalServiceImpl類。 DML操作在另一個實體上更新,插入和刪除時不使用對LocalServiceUtil或LocalService的調用,因爲這會導致兩個事務邊界。

您可以參考下面的鏈接獲取更多信息。

Transaction Management with liferay service