2011-06-27 103 views
2

我從Liferay論壇複製 - 在2周內沒有得到答案。 http://www.liferay.com/community/forums/-/message_boards/message/9384663Liferay交易方式

我在尋找文檔/博客如何進行Liferay交易。

的Liferay 6.0.6 PostgreSQL的

我有JAX-WS Web服務掛鉤。 我只使用Liferay服務。

例如插入文檔並對其進行標記

fileEntry = DLFileEntryServiceUtil.addFileEntry(groupId, folderId, filename, filename, description, changeLog, "extraSettings", buffer, serviceContext); 
AssetEntry assetEntry = AssetEntryLocalServiceUtil.getEntry(DLFileEntry.class.getName(), fileEntry.getFolderId()); 
AssetTagUtil.addAssetEntry(assetTagObj.getPrimaryKey(), assetEntry.getPrimaryKey()); 

我需要設置事務。

我的類註釋

@MTOM 
@WebService(targetNamespace="http://services.portal.xyz/",serviceName="AuditResultService",name = "AuditResult", endpointInterface = "xyz.portal.services.AuditResultWS") 
@Transactional(isolation = Isolation.DEFAULT, readOnly = false, rollbackFor = {PortalException.class, SystemException.class, InvalidParameterException.class, NoSuchEntryException.class}) 

@Transactional是Liferay的一個

方法是用

@WebMethod 

WS只有註釋的偉大工程,但沒有交易 - 創建和NoSuchEntryException文件後,文件留在Liferay。

下面試圖根據論壇主題: http://www.liferay.com/community/forums/-/message_boards/message/9019161

portal-ext.properties 
transaction.manager.impl=org.springframework.transaction.jta.JtaTransactionManager 
transaction.manager.property.allowCustomIsolationLevels=true 
transaction.manager.property.globalRollbackOnParticipationFailure=true 

我沒有在我的鉤彈簧的配置做任何事情。

我試圖改變隔離等沒有成功。

請有任何指導?

非常感謝您

回答

0

如果你不一定需要調用在一個事務中的所有3個方法調用,而不是AssetTagUtil AssetTagServiceUtil。 addFileEntry調用在文件系統上創建一個不是事務性的文件。

如果你真的堅持讓所有事務都在一個事務中創建一個自定義的服務,它將從Web服務中調用。

原因是Liferay中的trasaction管理器僅在服務上掃描@Transactional註釋。

0

如果您在事務部分內引發異常,則任何事情都可能是事務性的。在liferay中,交易僅在服務實體的方法內處理,即... ServiceUtil類。您必須在CRUD操作前加上方法名稱的前綴。所以你必須創建一個「虛擬」實體..這是更簡單的方法。