インターネットからのデータを解析し、Hibernateを使用してPostgreSQLに保存する単純な@Singleton
whitin Java EEプロジェクトが1つあります。
@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();
}
}
しかし、私はこれを手に入れています
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
を指しています
SessionFactory sessionFactory=new Configuration().configure().buildSessionFactory();
しかし、hibernate.cfg.xml
はJava SEプロジェクト内、およびJava EE内でこのエラーが発生します。使用したすべてのJARは/WEB-INF/lib
にあります。hibernate.cfg.xml
はsrc
フォルダーと/WEB-INF
フォルダー内。コンテナやビルドツールを使用せずにGlassFishを使用しているので、悪いと思いますが、この簡単な例でどこで間違いがあったのかを知る必要があります。
プロジェクトのlibフォルダーからjboss-loggingjarファイルを削除し、glassfish\modulesフォルダーのjboss-logging.jarを http://mvnrepository.com/artifact/org.jboss.logging)の最後のバージョンに置き換えることでこの問題を解決しました。 /jboss-logging/3.3.0.Final
アプリケーションサーバーに含まれているロギングライブラリとHibernateに必要なロギングライブラリの間にバージョンの不一致があるようです。
同じ問題が発生し、設定は次のとおりでした:Jboss AS 7.1.1.Final and Hibernate 5.1.0そして、jboss-deployment-structure.xmlでjbossロギングモジュールを除外することを解決しました。
<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>
これらの厄介なバージョンの互換性の問題を修正するためのすべての銀の弾丸は、春を使用することですIOプラットフォーム
http://platform.spring.io/platform/
これは、MavenまたはGradleを介してSpringのすべての依存関係管理を行います。
(この後、プロジェクトを更新または追加するときに、一般的な開発者が追跡し、数か月ごとに苦しむ必要がある難解なバージョンの問題について心配する必要はありません)
また、注:(マルチモジュールプロジェクト内の)すべてのモジュールが同じバージョン番号を共有していることも確認する必要があります。当たり前のように聞こえますが、モジュールを追加するときにこれを忘れることができます。