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-компонентах / методах.

Другие вопросы по тегам