У меня есть веб-сервис (созданный с использованием jaxb / jaxws), который вызывает EJB без сохранения состояния для хранения некоторых данных в базе данных.Данные хранятся как объектный компонент.Компонент-сущность имеет уникальное ограничение, примененное к нему посредством аннотации @Column(unique = true)
.
Когда веб-служба пытается сохранить данные, транзакция завершается неудачно, и это справедливо.Проблема заключается в том, что, поскольку я использую CMP, транзакция не фиксируется до тех пор, пока не будет выполнен вызов EJB без сохранения состояния.Конечный результат заключается в том, что я не могу перехватить исключение, и оно направляется в стек WS, что приводит к неоднозначной ошибке, содержащей строку: Error committing transaction:;nested exception is: weblogic.transaction.internal.AppSetRollbackOnlyException
.
Есть ли способ перехватитьисключение выдается, чтобы я мог предоставить звонящему больше информации?Спасибо.
Информация о версии:
- Сервер приложений: Oracle Weblogic 10.3
- Поставщик постоянства: Hibernate 3.2.5.ga (JPA 1.0)
- JDK / JRE: 1.6_0_05 (предоставляется установкой Weblogic)
Обновление: я попытался внедрить перехватчик EJB 3 вокруг вызова метода, но это не работает.
public class TestInterceptor {
@AroundInvoke
public Object logCall(InvocationContext context) throws Exception {
System.out.println("Invoking method: " + context.getMethod().getName());
try {
return context.proceed();
} catch (Throwable t) {
System.out.println("I caught an exception: " + t.getMessage());
throw new Exception(t);
}
}
Причина, по которой я думаю, что это не работает, заключается в том, что цепочка обработки такова, что фактическое постоянство происходит вне метода (конечно).