JEE6 - @ApplicationException - @Inject и @PostConstruct не вызваны - PullRequest
0 голосов
/ 22 декабря 2010

У меня проблема с методами @Inject и @PostConstruct, не вызванными в аннотированном классе @ApplicationException.Я использую Glassfish 3.0.1 с JPA, CDI и EJB в слое service (= ejb) и хотел бы выдать errorMessage, содержащий текст на языке сессий.

У меня есть абстрактный ExceptionClass

 public abstract class LocalizedException extends Exception {
        private static final long serialVersionUID = 1L;


 String localizedMessage;

 //This method should be called as @PostConstruct from the concrete classe
protected void setLocalizedMessage(LocaleHandler localeHandler, String key){
    this.setLocalizedMessage(localeHandler, key, new Object());
}

protected void setLocalizedMessage(LocaleHandler localeHandler, String key, Object... args){
    localizedMessage = ErrorMessages.getErrorMessage(key,localeHandler.getAktuelleLokale(),args);
}

 @Override
 public String getMessage() {
  return localizedMessage;
 }

 @Override
 public String getLocalizedMessage() {
  return localizedMessage;
 }}

И конкретный класс:

 @ApplicationException
        public class ConcreteException extends LocalizedException {
        private static final long serialVersionUID = 2615388267911318734L;
 private int userId;

 public ConcreteException(int userId) {
     this.userId=userId;
 }

 public int getUserId() {
  return userId;
 }

 @PostConstruct
 @Inject  
 public void initText(LocaleHandler localeHandler){
         setLocalizedMessage(localeHandler, "msgKey");
 }

}

LocaleHandler (= Sessionscoped) должен быть введенпредоставить currentLocale, который используется для получения сообщения об ошибке из пакета.Проблема в том, что @PostConstruct никогда не вызывается, что бы я ни пытался.Я даже аннотировал конкретный класс с помощью @Named, использовал @Inject в конкретном классе вместо абстрактного, но ничего не работает.Когда я вызываю initText () напрямую, я вижу (в отладчике), что LocaleHandler не вводится.

Теперь я спрашиваю себя, есть ли ограничения в отношении классов исключений и CDI, или я просто не нашел источник проблемы!

Знаете ли вы ответ?

спасибо заранее

Томас

1 Ответ

0 голосов
/ 24 декабря 2010

Проблема решена.

Я просто использовал Исключение как throw new ConcreteException(), как я привык с давних времен.Именно в этом и была проблема.Теперь я вставляю ConcreteException в мой EJB и выбрасываю поле оператораТаким образом, @Inject и @Postconstruct работают!

...