У меня есть метод EJB с именем methodA (), вызывающий другой метод EJB с именем methodB (), который запускает новую транзакцию, управляемую контейнером. в methodB я принудительно устанавливаю тайм-аут транзакции, который правильно перехватывается catchB и не распространяется на methodA. Но я удивлен, что methodA получает исключение. Я что-то здесь упускаю?
methodA() {
try {
methodB();
System.out.println("print me!");
} catch(Exception e) {
System.out.println("shouldn't be here");
}
}
@TransactionTimeout(5) //5 sec timeout
methodB() {
try {
Thread.sleep(6000);
} catch(Throwable t) {
System.out.println("Eating all the Exception..");
}
}
Первый метод никогда не должен был перехватывать исключение (EJBTransactionTimeoutException), потому что метод B его съел. Я вижу результат «Не должно быть здесь» вместо «напиши мне!». Это заставляет меня задуматься, генерирует ли контейнер еще одно исключение EJBTransactionTimeoutException сразу после завершения methodB, хотя он уже выдал исключение Timeout?