Мы увеличиваем Capm на Java. У нас есть действие в нашей службе компакт-дисков. В этом действии мы проверяем некоторые предварительные условия перед выполнением действия. Если одно из предварительных условий не выполняется, мы хотим сохранить детали в таблице в нашем Capm и вернуть ошибку, чтобы проинформировать пользователя. Проблема заключается в том, что когда мы возвращаем ошибку, поскольку действие находится внутри транзакции, транзакция откатывает данные, которые мы сохранили.
Код выглядит примерно так:
@Action(Name = "doAction", serviceName = "OurService")
public OperationResponse doAction(OperationRequest oRequest, ExtensionHelper extHelper) {
// Do some checks
...
// If some of the checks fails:
...
persistsCheckDetails(info);
return OperationResponse.setError(error);
// Everything is ok
doTheaction();
return OperationResponse.setSuccess().setEntityData(listResponse).response();
}
Мы играем с аннотацией CleanupTransaction, которая запускается после завершения транзакции, но не можем найти способ восстановить детали ошибки, возникающей в транзакции.
@CleanupTransaction()
public void test(boolean result, List<OperationRequest> requests, ExtensionHelper extHelper){
// We can recover the params of the action
OperationRequest oRequest = requests.get(0);
params = oRequest.getParameters();
// We can recover a MessageContainer
oRequest.getMessageContainer()
// But it seems that this MessageContainer only have methods to set messages, not for recovering
}
Как мы можем восстановить информацию о транзакции? Есть ли способ отправить данные из нашего Action в метод CleanupTransaction через заголовки или что-то еще?