Ich habe ein Problem mit @Inject und @PostConstruct -Methode nicht in einer @ ApplicationException annotierten Klasse aufgerufen. Ich benutze Glassfish 3.0.1 mit JPA, CDI und EJBs im Service (= ejb) -layer und möchte eine errorMessage, die einen Text in der Session-Sprache enthält, werfen.JEE6 - @ApplicationException - @Inject und @PostConstruct nicht aufgerufen
Ich habe eine abstrakte Exception
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;
}}
Und eine konkrete Klasse:
@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");
}
}
Die LocaleHandler (= Sessionscoped) sollte die current bereitzustellen injiziert werden, die verwendet wird, Abrufen einer Fehlermeldung aus einem Bundle. Das Problem ist, dass @PostConstruct nie aufgerufen wird, egal was ich versuche. Ich habe sogar die konkrete Klasse mit @Named, @Inject in der konkreten Klasse statt der Zusammenfassung annotiert, aber nichts funktioniert. Wenn ich initText() direkt aufruft, kann ich (im Debugger) sehen, dass der LocaleHandler nicht injiziert wird.
Jetzt frage ich mich, ob es eine Einschränkung bezüglich Exception-Klassen und CDI gibt oder habe ich einfach nicht die Ursache des Problems gefunden!
Kennen Sie die Antwort?
Danke im Voraus
Thomas