mvc example ejemplo conectar con application java hibernate maven-2 log4j slf4j

java - example - Hibernate 3.4 con slf4j y log4j



spring mvc example in java (6)

Después de verificar la versión 1.5.6 POM para slf4j-log4j (y luego slf4j-parent) debe usar log4j-1.2.14. El POM slf4j-log4j usa administración de dependencias para heredar la versión apropiada de log4j del POM slf4j-parent.

Sin embargo, no debe incluir log4j como una dependencia específica ya que es una dependencia de slf4j-log4j. Es posible que haya sido donde causó su problema.

Estoy intentando actualizar de Hibernate 3.2 a 3.4, que aparentemente usa slf4j. Nuestro proyecto actualmente usa log4j. Entonces mi suposición es que debería estar usando la implementación envuelta slf4j-log4j12.

La dependencia de Maven slf4j es:

<dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.5.6</version> </dependency>

Si bien la dependencia de log4j es:

<dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.15</version> </dependency>

Tanto slf4j-log4j12 como log4j hacen referencia a la última versión (que pude encontrar en el repositorio de Maven). Cuando ejecuto mi aplicación, Hibernate falla en su registro:

java.lang.NoSuchFieldError: name at org.slf4j.impl.Log4jLoggerAdapter.<init>(Log4jLoggerAdapter.java:75) at org.slf4j.impl.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:75) at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:103) at org.hibernate.cfg.Configuration.<clinit>(Configuration.java:163) ...

¿Qué me estoy perdiendo?

Editar 1: si elimino la dependencia log4j de mi pom.xml, obtengo el error:

java.lang.IllegalAccessError: tried to access field org.slf4j.impl.StaticLoggerBinder.SINGLETON from class org.slf4j.LoggerFactory at org.slf4j.LoggerFactory.<clinit>(LoggerFactory.java:60) at org.hibernate.cfg.Configuration.<clinit>(Configuration.java:163) ...

Editar 2: este blog afirma que el problema se debe a que las anotaciones de hibernación se envían con la versión incorrecta de slf4j-api.jar.



no tengo problemas con

<dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>3.3.1.GA</version> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-annotations</artifactId> <version>3.4.0.GA</version> </dependency>

y

<dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.5.6</version> </dependency> <!-- concrete Log4J Implementation for SLF4J API--> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.5.6</version> </dependency>



Creo que debe excluir la dependencia SLF4J incorporada de cada una de las dependencias de Hibernate.

Uso Hibernate con JPA, por lo que mi configuración no es idéntica, pero creo que lo más importante es incluir explícitamente log4j y SLF4J y excluir explícitamente slf4j-api de todas las dependencias de org.hibernate:

<dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.15</version> <scope>compile</scope> <exclusions> <exclusion> <groupId>com.sun.jmx</groupId> <artifactId>jmxri</artifactId> </exclusion> <exclusion> <groupId>javax.jms</groupId> <artifactId>jms</artifactId> </exclusion> <exclusion> <groupId>com.sun.jdmk</groupId> <artifactId>jmxtools</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-annotations</artifactId> <version>3.4.0.GA</version> <exclusions> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> </exclusion> </exclusions> <scope>compile</scope> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-entitymanager</artifactId> <version>3.4.0.GA</version> <exclusions> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> </exclusion> </exclusions> <scope>compile</scope> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.5.6</version> <scope>runtime</scope> </dependency>


Tuve el mismo problema con la etiqueta display versión 1.2 que incluye el viejo slf4j. Cambiar la etiqueta de visualización para tener la exclusión:

<dependency> <groupId>displaytag</groupId> <artifactId>displaytag</artifactId> <version>1.2</version> <exclusions> <exclusion> <groupId>org.slf4j</groupId> <artifactId>jcl104-over-slf4j</artifactId> </exclusion> </exclusions> </dependency>

y agregando las dependencias correctas:

<dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.5.6</version> </dependency> <!-- concrete Log4J Implementation for SLF4J API--> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.5.6</version> </dependency>

Pareció arreglar el problema.