0

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

Знаете ли вы, что ответ?

спасибо заранее

Томас

ответ

0

Проблема решена.

Я просто использовал Исключение как throw new ConcreteException(), так как я привык с возрастом. Это была проблема. Теперь я ввожу исключение ConcreteException в свой EJB и бросаю поле с защитой. Таким образом, @Inject и @Postconstruct работают!