Usando o CDI em um padrão singleton
Estou tentando injetar um objeto logger em uma classe que é implementada após uma abordagem singleton.
O código quase se parece com isso:
Logger
classe:
public class LoggerFactory {
@Produces
public Logger getLogger(InjectionPoint caller){
return Logger.getLogger(caller.getMember().getDeclaringClass().getName());
}
}
Então eu crio uma classe que precisa de logger e implementa o Singleton Pattern:
public class MySingleton{
@Inject
private Logger logger;
private MySingleton instance;
/*
* Private constructor for singleton implementation
*/
private MySingleton(){
logger.info("Creating one and only one instance here!");
}
public MySingleton getInstance(){
if(instance == null) {
instance = new MySingleton();
}
return instance;
}
}
Se eu executar o código (no Glassfish 3.1.2.2), recebo um NPE assim que tento usar o logger. O que estou fazendo errado (beans.xml
arquivo está no lugar)? Eu também tentei usar@Inject
com um método setter para oLogger
objeto, mas sem sorte.