2011-06-27 59 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操作前加上方法名称的前缀。所以你必须创建一个“虚拟”实体..这是更简单的方法。