Liferay транзакции с практическими рекомендациями - PullRequest
2 голосов
/ 27 июня 2011

Я копирую с форума Liferay - не получил ответ через 2 недели. http://www.liferay.com/community/forums/-/message_boards/message/9384663

Я ищу документ / блог, как Liferay Transaction.

Liferay 6.0.6 PostgreSQL

У меня есть хук с веб-сервисами jax-ws. Я пользуюсь только услугами 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})

@ Транзакционный - liferay one

Метод аннотируется только с

@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

Я ничего не делал в конфигурации пружины крюка.

Я пытался изменить изоляцию и т.д., но безуспешно.

Пожалуйста, есть руководство?

Большое спасибо

Ответы [ 2 ]

0 голосов
/ 27 февраля 2015

Если вы выбросите исключение в раздел транзакции, все может быть транзакционным. В liferay транзакции обрабатываются только внутри метода объекта службы, а именно класса ... ServiceUtil. Вы должны добавить префикс имени метода к операции CRUD. Таким образом, вы должны создать «фиктивную» сущность ... это более простой способ.

0 голосов
/ 27 октября 2012

Если вам не обязательно вызывать все 3 метода в одной транзакции, вызовите AssetTagServiceUtil вместо AssetTagUtil. Вызов addFileEntry создает файл в файловой системе, который в любом случае не является транзакционным.

Если вы действительно настаиваете на том, чтобы все в одной транзакции создавали пользовательский сервис, который будет вызываться из веб-сервиса.

Причина в том, что менеджер транзакций в Liferay сканирует аннотацию @Transactional только на сервисах.

...