У меня проблема с методами @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, или я просто не нашел источник проблемы!
Знаете ли вы ответ?
спасибо заранее
Томас