2017-09-19 5 views
0

J'utilise JBoss AS 7 et Java EE 6. J'ai un beans.xml videJava EE 6 Producteur ne fonctionne pas

J'ai un enregistreur producteur comme ça ..

@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); 
    } 

}

dans ma classe, j'Injecter comme suit ...

@Inject 
Logger logger; 

I importer enregistreur java util dans chaque cas

import java.util.logging.Logger; 

Tout se déploie correctement mais l'injection de l'enregistreur échoue et je reçois un moteur d'exécution NullPointer si je tente d'utiliser l'enregistreur injecté

+0

..vous devez modifier le fichier log4j.xml .. selon vos besoins – idiotduffer

+0

salut @idiotduffer, je vous remercie de votre réponse. Je n'utilise pas log4j mais j'utilise java util logging. Cela utilise le fichier logging.properties généré automatiquement dans /standalone/configuration/logging.properties –

+0

Avez-vous votre beans.xml au bon endroit? Avez-vous un fichier WAR ou EAR? Injectez-vous aussi d'autres objets qui fonctionnent? – awagenhoffer

Répondre

1

Merci à tous pour les réponses.

J'ai beans.xml au bon endroit (WEB-INF). Il est emballé comme un .war.

Le problème était mon propre défaut de codage dans la classe (bean) dans lequel j'injectais l'enregistreur. J'avais utilisé par erreur un constructor pour initialiser la classe qui essayait ainsi d'utiliser le logger avant que CDI n'ait une chance de l'injecter

La correction consistait à remplacer le constructeur par une méthode @PostConstruct et tout a bien fonctionné.

@MyAnnotation 
@Singleton 
public class MtHammer implements Hammer { 

    ..... 

    @Inject 
    Logger logger2; 


    @PostConstruct 
    private void startup() { 

     initialise(); 

    } 

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

..placez votre bean.xml dans le dossier META-INF, pour le fichier de guerre, il devrait être dans META-INF et pour le fichier EAR, il devrait être dans WEB-INF. – idiotduffer