Question

Alors, voici mon problème:
J'ai un bean géré par message X et que vous souhaitez utiliser l'enregistreur dans la méthode onMessage () de X. Lets suppose que j'ai une seule instance de la fève en cours d'exécution dans mon serveur d'application, donc, j'initialiser log4j dans ejbCreate (). Cela signifierait que je devrais faire quelque chose comme ceci:

public void ejbCreate() {
    PropertyConfigurator.configure(Classloader.getResourceAsStream("xyz_log4j.properties"));
}

Cependant, cela ne suffit pas. Peu importe ce que je fais je reçois toujours mon flux comme nulle, j'ai essayé d'autres versions: this.getClass () getStream () et ResourceBundle..

Je jar'ed mes fichier de propriétés pour test.jar et ajouté sous les bibliothèques EAR (j'utilise RAD7) et ai réfléchi dans mon manifest.mf.

Quelqu'un at-il face à ce problème avant? Si oui, comment avez-vous le résoudre? Appréciez votre aide ...

Était-ce utile?

La solution

Je ne recommanderais pas la configuration log4j dans l'EJB créer méthode. EJBeans multiples peuvent être activées / passivé aux conteneurs par coup de tête de la spécification J2EE. Donc, il y a une possibilité que vous finissez par la configuration log4j plusieurs fois. Recommandons d'utiliser des haricots de démarrage qui sont garantis pour être invoqué seulement 1 fois.

Autres conseils

Si vous obtenez ce à l'intérieur d'un fichier JAR, alors vous manque un iniitial /:

Classloader.getResourceAsStream("/xyz_log4j.properties")

Et en fonction de ce répertoire contient le fichier de propriétés, vous devez spécifier un chemin vers ce répertoire par rapport au sommet de la hiérarchie des classes. Par exemple, si ce fichier de propriétés est dans le même répertoire que net.mine.Program, alors vous feriez ceci:

Classloader.getResourceAsStream("/net/mine/xyz_log4j.properties")

Je ne crois pas que vous pouvez lire à partir du répertoire META-INF utilisant getResourceAsStream(), mais je ne l'ai jamais essayé donc peut-être il y a une façon de le faire.

Vous pouvez essayer de coder en dur le nom de classe dans la charge.

<name of your class>.class.getResourceAsStream(fileName);

Sinon, vous pouvez regarder dans SLF4J . Ce qui est une façade qui peut asseoir sur LOG4J. L'API est essentiellement le même (même créateur, je crois), et SLF4J ne nécessite pas un appel d'initialisation de explicitent, ce qui simplifie les choses un peu.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top