EJB Удаленная обработка исключений
У меня есть пульт SLSB
который развернут в OC4J
,
Этот сессионный компонент использует TopLink, который в некоторых случаях выдает oracle.toplink.essentials.exceptions.QueryException
исключение.
Я обрабатываю это исключение следующим образом:
public void slsbMethod()
{
try
{
// oracle.toplink.essentials.exceptions.QueryException throws here
}catch(Exception ex)
{
// do nothing
}
}
И я называю этот SLSB от клиента таким образом:
try
{
fooBarService.slsbMethod()
}catch(Exception ex)
{
System.out.println("Exception calling the EJB server");
}
Тем не менее, я обрабатываю это исключение на EJB, но все же я получил сообщение Exception calling the EJB server
напечатанный!
Как это происходит?
1 ответ
Если исключение исходит из кода транзакции, управляемой контейнером, то я бы предложил использовать транзакции, управляемые бином. При этом вы можете поместить обработку исключений в bean-компонент вокруг вызова UserTransaction.commit. В качестве альтернативы, вы можете написать перехватчик для начала транзакции, вызвать InvocationContext.proceed(), а затем зафиксировать транзакцию и обработать исключения, как вам нравится. Это в основном то, что контейнер делает для вас, но вы можете обрабатывать исключение коммитов так, как вам нравится, и вы можете повторно использовать логику в других bean-компонентах / методах.