У меня проблема с методом @Inject и @PostConstruct, который не вызывается в классе аннотированных @ApplicationException. Я использую Glassfish 3.0.1 с JPA, CDI и EJB в слове service (= ejb) и хотел бы выдать сообщение errorMessage, содержащее текст в сеансе.JEE6 - @ApplicationException - @Inject и @PostConstruct не вызваны
У меня есть абстрактный 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 или я просто не нашел источник проблемы!
Знаете ли вы, что ответ?
спасибо заранее
Томас