бросать исключения из перехватчиков EJB - PullRequest
5 голосов
/ 07 декабря 2010

Допустим, у меня есть перехватчик, который выглядит как что-то вроде этого:

public class AuthorizationInterceptor {

  Logger log = Logger.getLogger(getClass().getName());

  @AroundInvoke
  private Object authorize(InvocationContext ic) throws Exception{
    // ... some other logic for authorization

    if (!allowedMethods.contains(ic.getMethod().getName())){
      log.info("Authorization failed. Preparing to throw exception");
      throw new AuthException("Authorization failed for method " +
                ic.getMethod().getName());
    }

    return ic.proceed();
  }
}

, который применяется к различным методам из моих EJB-компонентов.

Обычно я ожидаю, что исключение будет обработановызывающему клиенту, как и все обычные исключения EJB.

Очевидно, этого не произойдет, если я выброшу его из перехватчика ... Он даже не зарегистрирован на сервере;как будто он никогда не генерируется, хотя это так - оператор return никогда не выполняется.

Что я делаю не так?

Я использую GF 3.0.1

Ответы [ 2 ]

2 голосов
/ 07 декабря 2010

После небольшого поиска этой проблемы, я нашел это ТАК сообщение , на которое ответили несколько минут назад. Цитата:

Я не думаю, что есть правильный путь сделать это. Методы должны бросать только исключения, которые они объявили, и перехватчик не должен добавлять новый. Мой личный случай был исправлен путем добавления код ошибки для исключения по умолчанию который бросается всеми методами.

Автор вопроса - это тот же человек, который ответил и принял этот ответ, поэтому я думаю, что он пытался решить ту же проблему, что и вы, и пришел к выводу, что это невозможно.

1 голос
/ 07 декабря 2010

Вот пара вещей, которые нужно попробовать:

1. Check that the authorize(...) method is called.
2. Try making the authorize(...) method public instead of private.
3. Check that the EJB has an annotation like this:
      @Interceptors(AuthorizationInterceptor.class)
...