2017-09-19 97 views
0

我使用JBoss AS 7和Java EE 6,我有一個空的beans.xmlJava EE 6的製片人不工作

我有一個記錄器製作這樣的..

@Singleton 
@Startup 
public class LoggerProducer { 

    private static Logger logger = Logger.getLogger(LoggerProducer.class.getName()); 

    @Produces 
    public Logger produceLogger(final InjectionPoint injectionPoint) { 
     final String injectingClass = injectionPoint.getMember().getDeclaringClass().getName(); 
     return Logger.getLogger(injectingClass); 
    } 

}

在我的課堂我注入如下...

@Inject 
Logger logger; 

我導入的Java util的記錄器在每種情況下

import java.util.logging.Logger; 

一切正確部署然而記錄器的注射失敗,我得到一個運行NullPointer如果我嘗試用注射記錄

+0

..你必須修改log4j.xml文件..根據你的要求 – idiotduffer

+0

嗨@idiotduffer,謝謝你的回覆。我沒有使用log4j,但我正在使用java util日誌記錄。這會使用 /standalone/configuration/logging.properties –

+0

中的自動生成的logging.properties文件您的beans.xml是否在正確的位置?你有WAR還是EAR文件?你還注入了其他可以工作的物體嗎? – awagenhoffer

回答

1

感謝所有答覆。

我在正確的位置(WEB-INF)中有beans.xml。它被打包成一個.war。

這個問題是我在注入記錄器的類(bean)中自己的編碼錯誤。我錯誤地使用了constructor來初始化那個在CDI有機會注入之前嘗試使用記錄器的類。

修復方法是用@PostConstruct方法替換構造函數,並且都運行良好。

@MyAnnotation 
@Singleton 
public class MtHammer implements Hammer { 

    ..... 

    @Inject 
    Logger logger2; 


    @PostConstruct 
    private void startup() { 

     initialise(); 

    } 

    private void initialise() { 
      logger.info("logger...Initialising ..."); 
     .... 
     } 
+0

..將您的bean.xml放置在META-INF文件夾中,對於war文件,它應該在META-INF中,對於EAR文件,它應該放在WEB-INF中。 – idiotduffer