0

@ApplicationException annoted 클래스에서 @Inject 및 @PostConstruct 메서드가 호출되지 않는 문제가 있습니다. 저는 Glassfish 3.0.1을 JPA, CDI 및 서비스 (= ejb) -layer의 EJB와 함께 사용하고 있으며 sessionlanguage에 텍스트가 포함 된 errorMessage를 던집니다. JEE6 - @ApplicationException - @Inject 및 @PostConstruct가 호출되지 않았습니다.

는 I 추상적 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에 삽입하고 containercreated 필드를 던집니다. @Inject와 @Postconstruct가 작동하는이 방법!

관련 문제