JEE6 - @ApplicationException - @Inject и @PostConstruct не вызываются

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

У меня есть абстрактный 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 не внедряется.

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

Ты знаешь ответ ?

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

Томас


person Thomas Kernstock    schedule 22.12.2010    source источник


Ответы (1)


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

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

person Thomas Kernstock    schedule 24.12.2010