@ApplicationException アノテーション付きクラスで呼び出されない @Inject および @PostConstruct メソッドに問題があります。サービス (=ejb) レイヤーで JPA、CDI、および EJB を使用して Glassfish 3.0.1 を使用しており、セッション言語のテキストを含む 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 が挿入されていないことがわかります。
今、私は Exception クラスと CDI に関する制限があるのか、それとも単に問題の原因が見つからなかったのかを自問しています!
あなたは答えを知っていますか ?
事前に感謝
トーマス