0

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

Antwort

0

Das Problem ist gelöst.

Ich habe einfach die Ausnahme als throw new ConcreteException() verwendet, wie ich es seit Ewigkeiten gewohnt bin. Genau das war das Problem. Jetzt injiziere ich die ConcreteException in mein EJB und wirf das Container-Feld. So funktionieren @Inject und @Postconstruct!