J'utilise LOWBBack / SLF4J pour gérer la journalisation de mon application. Tout fonctionne parfaitement jusqu'à ce que je commençais à utiliser des éjbs. Une fois que j'ai ajouté une EJB apatride à mon application, l'enregistreur a commencé à ignorer mon logback.xml et à avoir arrêté d'utiliser mes annexes. Je suis passé à une configuration de l'enregistreur programmatique pour voir ce qui n'allait pas et que je reçois maintenant l'erreur suivante lorsque j'essaie d'utiliser mon enregistreur dans l'EJB: P>
stemming de la ligne: p>
Y a-t-il une configuration spéciale nécessaire pour obtenir un journal pour travailler avec les EJBS? Si cela importe, je déploie sur Glassfish V3. P>
org.slf4j.impl.jdk14loggerFactory ne peut pas être jeté sur ch.qos.logback.classic.loggerContext
code> p>
LoggerContext LC = (LoggerContext) LoggerFactory.GettiloggerFactory ();
code> p>
4 Réponses :
Ceci semble très proche du problème décrit dans Ce fil et Je soupçonne un problème de chargement de classe similaire. En raison de la façon dont LOWBACK CHARGES Vous ne savez pas comment vous emballez votre code, mais la solution de contournement suggérée consiste à inclure le à la fin, cela pourrait être un problème dans la connexion. N'avez-ce pas vérifié leur problème de suivi. P> p> update: J'ai fait un petit test de mon côté et ... je ne peux pas reproduire votre problème. J'ai créé un projet pour un WebApp Java EE 6 qui a la structure suivante: p> mon pom.xml ressemble à: p> Le code pour LODBBACT.XML CODE> (plus précisément de la manière dont il récupère un chargeur de classes code> pour le faire), il peut échouer pour ramasser son fichier de configuration et tomber sur Un
BasicConfiguration par défaut code>.
logback.xml code> dans une oreille LIB. Si vous n'utilisez pas d'emballage d'oreille, essayez d'identifier le chargeur de classe utilisé pour voir où placer le fichier
logback.xml code>. P>
Sun-web.xml code>: Strike> p>
SIMPLETEJB.JAVA CODE> est: P>
10913 [http-thread-pool-8080-(1)] DEBUG com.stackoverflow.q2418355.SimpleServlet - >> doGet()
10928 [http-thread-pool-8080-(1)] DEBUG com.stackoverflow.q2418355.SimpleEJB - >> sayHello()
10928 [http-thread-pool-8080-(1)] DEBUG com.stackoverflow.q2418355.SimpleEJB - << sayHello()
10932 [http-thread-pool-8080-(1)] DEBUG com.stackoverflow.q2418355.SimpleServlet - << doGet()
J'ai un déploiement d'application Web Maven avec logback.xml dans mon répertoire SRC / Main / Ressources. Je vais jouer avec quelques trucs de classement tels que votre suggestion, merci pour l'aide!
@kgrad oh je vois. Je me demande vraiment comment gfv3 gère Ejbs (c'est-à-dire les charges) emballées dans une guerre. N'a pas vérifié cela.
Si vous êtes intéressé, mes dépendances sont: Logback-Core 0.9.18, Logback-Classic 0.9.18 et SLF4J-API 1.5.11
Merci beaucoup pour le travail que vous faites, je vais simplifier mon application et le télécharger demain, où dois-je le poster? Comme une autre réponse dans ce fil? J'appelle en fait mon enregistreur dans un intercepteur, peut-être que cela contribue également à l'erreur, je ne sais pas pourquoi je ne pensais pas à ça avant ...
Publié le code concerné, une partie de la mise en forme est un peu désactivée mais je ne savais pas comment le réparer.
Confirmez: le contournement fonctionne pour Glassfish 3.1.1. Mais le pot contenant le logback.xml code> ne doit pas être un jar EJB, un pot normal, référencé dans
application.xml code>:
Le On dirait que GFV3 exporte SLF4J-JDK14.jar dans votre application et remplace ainsi votre choix du back-end de journalisation, de connecter dans ce cas. C'est l'un de ces scénarios où le serveur d'applications impose par inadvertance ses choix sur l'utilisateur. P>
Si en effet GFV3 impose sa liaison SLF4J sur l'utilisateur final, c'est une question GFV3 qui doit être résolue par les développeurs GFV3. Je me tromperais peut-être, mais je pense qu'ils supposent que l'utilisateur final ne voudra aucune autre fonctionnalité de journalisation au-delà de ce qui est fourni par Java.Util.logging et Just Bundle SLF4J-JDK14 dans GFV3. Les utilisateurs doivent les contacter et se plaindre que leur hypothèse est incorrecte. Il est également possible qu'ils soient au courant de ce problème et offrent déjà une solution de contournement ... P> org.slf4j.impl.jdk14loggerFactory ne peut pas être distribué sur ch.qos.logback.classic.loggerContext CODE> Exception montre que SLF4J n'est pas lié à LOWBACK-Classic mais à SLF4J-JDK14. En bref, le code de connexion n'est pas à blâmer car il n'est pas exercé ni appelé. p>
Salut Ceki. Merci beaucoup pour les commentaires. Pourriez-vous commenter forums.java.net/jive/message.jspa?messageid= 379334 ?
Y a-t-il une façon de remplacer cela? Ou dois-je changer ma stratégie de journalisation?
Vous devez obtenir GFV3 les personnes impliquées dans cela ou le font au moins les faire conscienter que Bundling SLF4J-JDK14 dans GFV3 a ses inconvénients.
Fondamentalement, le problème est que le serveur d'applications utilise Strike> fournit à SLF4J et que vos tentatives de l'utiliser vont à la liaison SLF4J du serveur d'applications au lieu de celle que vous voulez vous-même. P>
Vous ne pouvez pas simplement utiliser la liaison SLF4J dans Glassfish? P>
En fait, Glassfish V3 comprend des liaisons statiques pour slf4j dans le bean-validation.jar et weld-osgi-bundle.jar i> mais gfv3 elle-même n'utilise pas slf4j (gfv3 utilise java.util.logging). Mais ça ne résout pas le problème :)
Réponse modifiée. Mais est un problème fascinant - apparemment, il est si difficile de comprendre exactement que même 10 ans de travail, ne l'ont pas résolu. Java Commons Logging Utilisez Classloader Magic, SLF4J utilise des liaisons de classier normales.
Voici à peu près le code pertinent exacte:
Le login EJB: P>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.test</groupId> <artifactId>tester</artifactId> <version>1.0/version> <name>Code</name> <packaging>war</packaging> <repositories> <repository> <id>maven2-repository.dev.java.net</id> <name>Java.net Repository for Maven</name> <url>http://download.java.net/maven/2/</url> </repository> <repository> <snapshots /> <id>codecaus</id> <name>codehaus</name> <url>http://repository.codehaus.org</url> </repository> <repository> <snapshots /> <id>ibiblio</id> <url>http://www.ibiblio.org/maven2/</url> </repository> <repository> <id>jboss</id> <url>http://repository.jboss.com/maven2</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>false</enabled> </snapshots> </repository> <repository> <id>jboss-snapshot</id> <url>http://snapshots.jboss.org/maven2</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </repository> <repository> <id>java.net.glassfish</id> <name>Repository hosting the jee6 artifacts</name> <url>http://download.java.net/maven/glassfish</url> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>jboss-plugins</id> <url>http://repository.jboss.com/maven2</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>false</enabled> </snapshots> </pluginRepository> <pluginRepository> <id>jboss-snapshot-plugins</id> <url>http://snapshots.jboss.org/maven2</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </pluginRepository> </pluginRepositories> <dependencies> <dependency> <groupId>javax.faces</groupId> <artifactId>jsf-api</artifactId> <version>2.0</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.el</groupId> <artifactId>el-api</artifactId> <version>1.0</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.validation</groupId> <artifactId>validation-api</artifactId> <version>1.0.0.GA</version> </dependency> <dependency> <groupId>org.glassfish</groupId> <artifactId>bean-validator</artifactId> <version>3.0-JBoss-4.0.0.Beta3</version> </dependency> <dependency> <groupId>org.glassfish.extras</groupId> <artifactId>glassfish-embedded-all</artifactId> <version>3.0</version> <scope>test</scope> </dependency> <dependency> <groupId>javax</groupId> <artifactId>javaee-api</artifactId> <version>6.0-SNAPSHOT</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.7</version> </dependency> <dependency> <groupId>javax.faces</groupId> <artifactId>jsf-api</artifactId> <version>2.0</version> <scope>provided</scope> </dependency> <!-- JPA --> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>3.5.0-CR-2</version> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-annotations</artifactId> <version>3.5.0-CR-2</version> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-commons-annotations</artifactId> <version>3.2.0.Beta1</version> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-entitymanager</artifactId> <version>3.5.0-CR-2</version> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-c3p0</artifactId> <version>3.5.0-CR-2</version> </dependency> <dependency> <groupId>postgresql</groupId> <artifactId>postgresql</artifactId> <version>8.4-701.jdbc4</version> </dependency> <!-- logging --> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-core</artifactId> <version>0.9.18</version> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>0.9.18</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.5.11</version> </dependency> <dependency> <groupId>org.eclipse.persistence</groupId> <artifactId>javax.persistence</artifactId> <version>2.0.0</version> </dependency> </dependencies> <properties> <netbeans.hint.deploy.server>gfv3ee6</netbeans.hint.deploy.server> </properties> <build> <pluginManagement> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.6</source> <target>1.6</target> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>2.0</version> </plugin> </plugins> </pluginManagement> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>2.0</version> </plugin> </plugins> </build> </project>
J'ai ajouté votre intercepteur à mon exemple d'application et cela fonctionne simplement. Je vais examiner de plus près plus tard, mais je pense b> que le problème peut provenir de Bean-validator-3.0-JBoss-4.0.0.beta3.jar (ou validation-api-1.0.0.ga .pot). Vous ne doit pas b> Bushle de ces dépendances, un conteneur Java EE 6 leur fournit. Marquez-les comme fourni code> et réessayez. BTW, votre POM est un peu désordonnée, il y a beaucoup de dépendances redondantes, utilisez simplement Javaee-Api-6.0.0.jar et supprimer le servlet 2.5 (!), Validation 1.0, JSF 2.0, EL 1.0, JPA 2.0 Dépendances. Marquez également Junit en tant que dépendance code> code>.
Vous étiez absolument correct! C'était le validateur de haricot. Cela fonctionne comme prévu maintenant. Je marquais vos réponses comme acceptées. Merci beaucoup pour l'aide. Le problème avec NetBeans a également été mis à jour et fermé.
@Pascal thivent: Oui, je le crois, j'utilise ainsi la méthode de LoggerFactory statique de SLF4J et de connecter comme ma mise en œuvre. La chose étrange est que ce code exact fonctionnait parfaitement avant que je commence à utiliser EJBS
Oui, c'est bizarre. Mais peut-être que le problème a été caché jusqu'à présent et l'ajout d'une EJB a déclenché des trucs de classement particuliers qui l'ont révélé.
Les modules EJB doivent tirer dans un SLF4J "en amont" dans le chargeur de classe pour une raison quelconque, et que i> slf4j puis configure dans son contexte. Ensuite, c'est ce qui est utilisé lorsque votre code a besoin de son enregistreur.
Pouvez-vous reproduire ce comportement avec 3.0.1?