J'ai un simple @Singleton
dans le projet Java EE qui analyse les données sur Internet et les enregistre avec Hibernate vers PostgreSQL.
@Startup
@Singleton
public class PSNDBB {
@PostConstruct
public void Parser(){
//getting data
SessionFactory sessionFactory=new Configuration().configure().buildSessionFactory();
Session session=sessionFactory.openSession();
session.beginTransaction();
for(Object obj : array){
GameData game=new GameData();
session.save(game);
}
session.getTransaction().commit();
session.close();
}
}
Mais je reçois ce
Caused by: Java.lang.NoSuchMethodError: org.hibernate.internal.CoreMessageLogger.debugf(Ljava/lang/String;I)V
at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl.configure(DriverManagerConnectionProviderImpl.Java:87)
at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.Java:94)
at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.Java:217)
at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.Java:189)
at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.buildJdbcConnectionAccess(JdbcEnvironmentInitiator.Java:145)
at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.Java:66)
at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.Java:35)
at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.Java:88)
at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.Java:234)
at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.Java:208)
at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.Java:189)
at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.Java:51)
at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.Java:94)
at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.Java:217)
at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.Java:189)
at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.handleTypes(MetadataBuildingProcess.Java:352)
at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.Java:111)
at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.build(MetadataBuildingProcess.Java:83)
at org.hibernate.boot.internal.MetadataBuilderImpl.build(MetadataBuilderImpl.Java:418)
at org.hibernate.boot.internal.MetadataBuilderImpl.build(MetadataBuilderImpl.Java:87)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.Java:692)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.Java:724)
at org.showgazer.psn.PSNDBB.Parser(PSNDBB.Java:84)
at Sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at Sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.Java:62)
at Sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.Java:43)
at Java.lang.reflect.Method.invoke(Method.Java:497)
at com.Sun.ejb.containers.interceptors.BeanCallbackInterceptor.intercept(InterceptorManager.Java:1035)
at com.Sun.ejb.containers.interceptors.CallbackChainImpl.invokeNext(CallbackChainImpl.Java:72)
at com.Sun.ejb.containers.interceptors.CallbackInvocationContext.proceed(CallbackInvocationContext.Java:205)
... 70 more
Pointant vers
SessionFactory sessionFactory=new Configuration().configure().buildSessionFactory();
Mais hibernate.cfg.xml
fonctionne bien dans le projet Java SE et dans Java EE, le message d'erreur s'affiche. Tous les fichiers JAR que j'ai utilisés sont dans /WEB-INF/lib
. hibernate.cfg.xml
est dans le dossier src
et dans le dossier /WEB-INF
. Et j'utilise GlassFish sans aucun conteneur ni outil de construction, ce qui me semble mal, mais j'ai besoin de savoir où l'erreur a été commise dans cet exemple simple.
J'ai résolu ce problème en supprimant le fichier jar jboss-logging du dossier lib du projet et en remplaçant jboss-logging.jar du dossier glassfish\modules par la dernière version de http://mvnrepository.com/artifact/org.jboss.logging/jboss -logging/3.3.0.Final
Il semble y avoir une incompatibilité de version entre les bibliothèques de journalisation incluses dans le serveur d'applications et les bibliothèques de journalisation requises par Hibernate.
J'avais le même problème et ma configuration était: Jboss AS 7.1.1.Final et Hibernate 5.1.0 et j'ai résolu d'exclure le module de journalisation jboss dans le fichier jboss-deployment-structure.xml.
<jboss-deployment-structure>
<deployment>
<!-- ADDED -->
<exclusions>
<module name="org.hibernate" /> <!-- Escludo l'Hibernate integrato in jboss e uso quello interno -->
<module name="org.jboss.logging" /> <!-- Escludo li logger integrato in jboss -->
</exclusions>
<!-- FINE ADDED -->
<dependencies>
</dependencies>
</deployment>
</jboss-deployment-structure>
La solution miracle pour résoudre tous ces problèmes de compatibilité entre versions , consiste à utiliser la plate-forme Spring IO _
http://platform.spring.io/platform/
qui fait la gestion de la dépendance pour tout au printemps via Maven ou Gradle.
(Après cela, vous n'avez plus besoin de vous déchirer les cheveux et de vous inquiéter des problèmes de version compliquée que le développeur typique doit suivre et subir tous les quelques mois lorsqu'il met à jour ou ajoute des projets).
Remarque: vous devez également vous assurer que tous vos modules (dans un projet multi-module) partagent les mêmes numéros de version. Cela semble évident, mais on peut oublier cela lors de l'ajout de modules.