2

我正在从 Liferay 论坛复制 - 两周内没有得到答复。 http://www.liferay.com/community/forums/-/message_boards/message/9384663

我正在寻找文档/博客如何进行 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 是生命线之一

方法仅用

@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

我没有在我的挂钩弹簧配置中做任何事情。

我试图改变隔离等没有成功。

请问有攻略吗?

非常感谢

4

3 回答 3

1

如果您在事务部分中抛出异常,则任何事情都可能是事务性的。在 liferay 中,事务仅在服务实体的方法内处理,即 ...ServiceUtil 类。您必须在方法名称前加上 CRUD 操作。所以你必须创建一个“虚拟”实体..这是更简单的方法。

于 2015-02-26T23:10:01.547 回答
1

你可以试试这个

必须在 *impl 类中添加方法,然后默认为事务。

https://liferay.dev/forums/-/message_boards/message/4928729

于 2020-04-09T05:38:15.550 回答
0

如果您不一定需要在一个事务中调用所有 3 个方法,请调用 AssetTagServiceUtil 而不是 AssetTagUtil。addFileEntry 调用在文件系统上创建一个无论如何都不是事务性的文件。

如果您真的坚持要在一个事务中进行所有操作,请创建一个将从 Web 服务调用的自定义服务。

原因是 Liferay 中的事务管理器仅在服务上扫描 @Transactional 注释。

于 2012-10-27T11:02:08.220 回答