web-dev-qa-db-ja.com

Hibernate JPA2.1を使用してアプリケーションをIBMWebSphereにデプロイすると、NullPointerExceptionが発生します

Java 7 SpringMVCアプリケーションをHibernateを使用してIBMWebSphere 8.5.5.2サーバーにデプロイしようとしています。アプリケーションはTomcatサーバーでは正常に実行されますが、WebSphereでは実行できません。

スタックトレースの出力は次のとおりです。

[3/26/15 13:49:53:552 MDT] 00000066 AutowiredAnno I org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor <init> JSR-330 'javax.inject.Inject' annotation found and supported for autowiring
[3/26/15 13:49:54:299 MDT] 00000066 LocalContaine I org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean createNativeEntityManagerFactory Building JPA container EntityManagerFactory for persistence unit 'default'
[3/26/15 13:49:54:339 MDT] 00000066 LogHelper     Z org.hibernate.jpa.internal.util.LogHelper logPersistenceUnitInformation HHH000204: Processing PersistenceUnitInfo [
    name: default
    ...]
[3/26/15 13:49:54:536 MDT] 00000066 Version       Z org.hibernate.Version logVersion HHH000412: Hibernate Core {4.3.7.Final}
[3/26/15 13:49:54:543 MDT] 00000066 Environment   Z org.hibernate.cfg.Environment <clinit> HHH000206: hibernate.properties not found
[3/26/15 13:49:54:546 MDT] 00000066 Environment   Z org.hibernate.cfg.Environment buildBytecodeProvider HHH000021: Bytecode provider name : javassist
[3/26/15 13:49:54:580 MDT] 00000066 JarInputStrea Z org.hibernate.jpa.boot.archive.internal.JarInputStreamBasedArchiveDescriptor visitArchive HHH015010: Unable to find file (ignored): bundleresource://130.fwk-1163147521/
                                 Java.lang.NullPointerException: in is null
    at Java.util.Zip.ZipInputStream.<init>(ZipInputStream.Java:111)
    at Java.util.Zip.ZipInputStream.<init>(ZipInputStream.Java:90)
    at Java.util.jar.JarInputStream.<init>(JarInputStream.Java:87)
    at Java.util.jar.JarInputStream.<init>(JarInputStream.Java:73)
    at org.hibernate.jpa.boot.archive.internal.JarInputStreamBasedArchiveDescriptor.visitArchive(JarInputStreamBasedArchiveDescriptor.Java:73)
    at org.hibernate.jpa.boot.scan.spi.AbstractScannerImpl.scan(AbstractScannerImpl.Java:72)
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.scan(EntityManagerFactoryBuilderImpl.Java:725)
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.<init>(EntityManagerFactoryBuilderImpl.Java:221)
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.<init>(EntityManagerFactoryBuilderImpl.Java:188)
    at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider$1.<init>(SpringHibernateJpaPersistenceProvider.Java:49)
    at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.Java:49)
    at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.Java:343)
    at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.Java:318)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.Java:1627)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.Java:1564)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.Java:540)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.Java:476)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.Java:302)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.Java:229)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.Java:298)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.Java:193)
    at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.Java:956)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.Java:747)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.Java:480)
    at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.Java:403)
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.Java:306)
    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.Java:106)
    at com.ibm.ws.webcontainer.webapp.WebApp.notifyServletContextCreated(WebApp.Java:1686)
    at com.ibm.ws.webcontainer.webapp.WebAppImpl.initialize(WebAppImpl.Java:414)
    at com.ibm.ws.webcontainer.webapp.WebGroupImpl.addWebApplication(WebGroupImpl.Java:88)
    at com.ibm.ws.webcontainer.VirtualHostImpl.addWebApplication(VirtualHostImpl.Java:169)
    at com.ibm.ws.webcontainer.WSWebContainer.addWebApp(WSWebContainer.Java:749)
    at com.ibm.ws.webcontainer.WSWebContainer.addWebApplication(WSWebContainer.Java:634)
    at com.ibm.ws.webcontainer.component.WebContainerImpl.install(WebContainerImpl.Java:426)
    at com.ibm.ws.webcontainer.component.WebContainerImpl.start(WebContainerImpl.Java:718)
    at com.ibm.ws.runtime.component.ApplicationMgrImpl.start(ApplicationMgrImpl.Java:1177)
    at com.ibm.ws.runtime.component.DeployedApplicationImpl.fireDeployedObjectStart(DeployedApplicationImpl.Java:1370)
    at com.ibm.ws.runtime.component.DeployedModuleImpl.start(DeployedModuleImpl.Java:639)
    at com.ibm.ws.runtime.component.DeployedApplicationImpl.start(DeployedApplicationImpl.Java:968)
    at com.ibm.ws.runtime.component.ApplicationMgrImpl.startApplication(ApplicationMgrImpl.Java:776)
    at com.ibm.ws.runtime.component.ApplicationMgrImpl$5.run(ApplicationMgrImpl.Java:2195)
    at com.ibm.ws.security.auth.ContextManagerImpl.runAs(ContextManagerImpl.Java:5474)
    at com.ibm.ws.security.auth.ContextManagerImpl.runAsSystem(ContextManagerImpl.Java:5600)
    at com.ibm.ws.security.core.SecurityContext.runAsSystem(SecurityContext.Java:255)
    at com.ibm.ws.runtime.component.ApplicationMgrImpl.start(ApplicationMgrImpl.Java:2200)
    at com.ibm.ws.runtime.component.CompositionUnitMgrImpl.start(CompositionUnitMgrImpl.Java:446)
    at com.ibm.ws.runtime.component.CompositionUnitImpl.start(CompositionUnitImpl.Java:123)
    at com.ibm.ws.runtime.component.CompositionUnitMgrImpl.start(CompositionUnitMgrImpl.Java:389)
    at com.ibm.ws.runtime.component.CompositionUnitMgrImpl.access$500(CompositionUnitMgrImpl.Java:117)
    at com.ibm.ws.runtime.component.CompositionUnitMgrImpl$CUInitializer.run(CompositionUnitMgrImpl.Java:995)
    at com.ibm.wsspi.runtime.component.WsComponentImpl$_AsynchInitializer.run(WsComponentImpl.Java:502)
    at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.Java:1864)

[3/26/15 13:49:54:899 MDT] 00000066 Version       Z org.hibernate.annotations.common.reflection.Java.JavaReflectionManager <clinit> HCANN000001: Hibernate Commons Annotations {4.0.5.Final}
[3/26/15 13:49:55:511 MDT] 00000066 Enhance       E   CWWJP9992E: openjpa.Enhance: Error: The identity field defined in the com.company.model.KeyValueMapping Embeddable is not supported. 
[3/26/15 13:49:55:837 MDT] 00000066 Dialect       Z org.hibernate.dialect.Dialect <init> HHH000400: Using dialect: org.hibernate.dialect.SQLServer2008Dialect
[3/26/15 13:49:55:864 MDT] 00000066 LobCreatorBui Z org.hibernate.engine.jdbc.internal.LobCreatorBuilder useContextualLobCreation HHH000423: Disabling contextual LOB creation as JDBC driver reported JDBC version [3] less than 4
[3/26/15 13:49:56:071 MDT] 00000066 AnnotationCon W org.springframework.context.support.AbstractApplicationContext refresh Exception encountered during context initialization - cancelling refresh attempt
                                 org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in com.company.WebConfig: Invocation of init method failed; nested exception is Java.lang.NoSuchMethodError: javax/persistence/Table.indexes()[Ljavax/persistence/Index;
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.Java:1568)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.Java:540)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.Java:476)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.Java:302)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.Java:229)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.Java:298)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.Java:193)
    at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.Java:956)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.Java:747)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.Java:480)
    at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.Java:403)
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.Java:306)
    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.Java:106)
    at com.ibm.ws.webcontainer.webapp.WebApp.notifyServletContextCreated(WebApp.Java:1686)
    at com.ibm.ws.webcontainer.webapp.WebAppImpl.initialize(WebAppImpl.Java:414)
    at com.ibm.ws.webcontainer.webapp.WebGroupImpl.addWebApplication(WebGroupImpl.Java:88)
    at com.ibm.ws.webcontainer.VirtualHostImpl.addWebApplication(VirtualHostImpl.Java:169)
    at com.ibm.ws.webcontainer.WSWebContainer.addWebApp(WSWebContainer.Java:749)
    at com.ibm.ws.webcontainer.WSWebContainer.addWebApplication(WSWebContainer.Java:634)
    at com.ibm.ws.webcontainer.component.WebContainerImpl.install(WebContainerImpl.Java:426)
    at com.ibm.ws.webcontainer.component.WebContainerImpl.start(WebContainerImpl.Java:718)
    at com.ibm.ws.runtime.component.ApplicationMgrImpl.start(ApplicationMgrImpl.Java:1177)
    at com.ibm.ws.runtime.component.DeployedApplicationImpl.fireDeployedObjectStart(DeployedApplicationImpl.Java:1370)
    at com.ibm.ws.runtime.component.DeployedModuleImpl.start(DeployedModuleImpl.Java:639)
    at com.ibm.ws.runtime.component.DeployedApplicationImpl.start(DeployedApplicationImpl.Java:968)
    at com.ibm.ws.runtime.component.ApplicationMgrImpl.startApplication(ApplicationMgrImpl.Java:776)
    at com.ibm.ws.runtime.component.ApplicationMgrImpl$5.run(ApplicationMgrImpl.Java:2195)
    at com.ibm.ws.security.auth.ContextManagerImpl.runAs(ContextManagerImpl.Java:5474)
    at com.ibm.ws.security.auth.ContextManagerImpl.runAsSystem(ContextManagerImpl.Java:5600)
    at com.ibm.ws.security.core.SecurityContext.runAsSystem(SecurityContext.Java:255)
    at com.ibm.ws.runtime.component.ApplicationMgrImpl.start(ApplicationMgrImpl.Java:2200)
    at com.ibm.ws.runtime.component.CompositionUnitMgrImpl.start(CompositionUnitMgrImpl.Java:446)
    at com.ibm.ws.runtime.component.CompositionUnitImpl.start(CompositionUnitImpl.Java:123)
    at com.ibm.ws.runtime.component.CompositionUnitMgrImpl.start(CompositionUnitMgrImpl.Java:389)
    at com.ibm.ws.runtime.component.CompositionUnitMgrImpl.access$500(CompositionUnitMgrImpl.Java:117)
    at com.ibm.ws.runtime.component.CompositionUnitMgrImpl$CUInitializer.run(CompositionUnitMgrImpl.Java:995)
    at com.ibm.wsspi.runtime.component.WsComponentImpl$_AsynchInitializer.run(WsComponentImpl.Java:502)
    at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.Java:1864)
Caused by: Java.lang.NoSuchMethodError: javax/persistence/Table.indexes()[Ljavax/persistence/Index;
    at org.hibernate.cfg.annotations.EntityBinder.processComplementaryTableDefinitions(EntityBinder.Java:973)
    at org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.Java:824)
    at org.hibernate.cfg.Configuration$MetadataSourceQueue.processAnnotatedClassesQueue(Configuration.Java:3845)
    at org.hibernate.cfg.Configuration$MetadataSourceQueue.processMetadata(Configuration.Java:3799)
    at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.Java:1412)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.Java:1846)
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.Java:852)
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.Java:845)
    at org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.withTccl(ClassLoaderServiceImpl.Java:398)
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.Java:844)
    at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.Java:60)
    at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.Java:343)
    at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.Java:318)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.Java:1627)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.Java:1564)
    ... 37 more

ありがとうございました!

10
npiani

javax/persistence/Table.indexes()はJPA2.1からのものであり、WebSphere ApplicationServerの従来の8.5.5.2はデフォルトでJPA2.0(OpenJPA)を使用しています。 Hibernateを使用する場合は、デフォルトのプロバイダーをオーバーライドする必要があります-詳細については、 この投稿 を確認してください。

更新

はい。それで合っています。コンテナーは初期化に2.0apiに依存しているため、WebSphere従来の8.5.5.xのデフォルトプロバイダーをJPA2.1でオーバーライドすることはできません。

2.1を使用する必要がある場合は、コンテナー管理ではなく、アプリケーション管理プロバイダーとして使用できます。したがって、アプリケーションのJPAを無効にする必要があります これを確認してください そしてEntityManagerの注入にコンテナに依存する代わりに、APIを使用して自分で初期化します。

もう1つのオプションは、バージョン8.5.5.6以降のJPA 2.1(EclipseLinkを使用)をサポートする WebSphere Liberty を検討することです。コンテナは2.1をサポートしているので、そこでプロバイダーを変更することは可能ですが、テストする時間がありませんでした。

最近リリースされた、JPA2.1をサポートするWebSphereApplication Serverv9にアップグレードすることもできます。

7
Gas

私は私のために働いたことを共有します。私と私のチームは、Websphere8.5.5およびWebsphere7でSpring 4.2.4、Hibernate 5.1、およびHibernate JPA 2.1を使用してアプリケーションをデプロイすることができました。

これを行うための鍵は、すべての休止状態ライブラリを抽出してサーバーの共有ライブラリフォルダーに配置し、サーバー構成で親の最後の順序で新しいクラスローダーを作成し、このクラスローダーに休止状態ライブラリを含む共有ライブラリを割り当てることです。 。次に、Default Java Persistence API settingsを変更して、デフォルトのWebSphere永続性プロバイダーではなく休止状態の永続性プロバイダーを使用する必要があります。したがって、手順は次のとおりです。以下:

  1. サーバーにフォルダーを作成し、その中にすべての休止状態のライブラリを配置します

    enter image description here

  2. Websphere(Environment/Shared libraries)で共有ライブラリーを作成し、サーバー上に作成したフォルダーのパスに設定します

  3. WebSphereでサーバーをクリックし、サーバーインフラストラクチャの下でJavaおよびプロセス管理/クラスローダーをクリックします。 Newをクリックし、Parent Lastオプションを選択します。セーブ

    enter image description here

  4. 作成したばかりの新しいクラスローダーをクリックし、右側の共有ライブラリ参照をクリックします。ここに、Hibernateライブラリを含む共有ライブラリを追加します

  5. サーバーの「コンテナー設定」セクションで、「コンテナーサービス/デフォルトJava永続性API設定」をクリックします。ここで、代替のデフォルト永続性を指定する必要があります。プロバイダー。下の画像を参照してください。

    enter image description here

  6. 次に、アプリケーションをコンパイルし、生成された戦争からHibernateライブラリを削除します(画像 1 を参照)。次に、サーバーにインストールします。

私の場合、アプリケーションはWebSphere 7でもチャームのように機能します。このプロシージャは、WebSphereとHibernateの間のライブラリの競合によって引き起こされるjavax/persistence/Table.indexes()エラーおよびその他すべてのコンパイルエラーを解決します。

参照:

https://www.ibm.com/developerworks/community/wikis/form/anonymous/api/wiki/53181ccd-bcd4-431f-b968-0b5f6d46d652/page/192a432b-28bb-4080-b037-345e5d83da76/添付ファイル/61e74f67-1d60-4120-ba25-ad7264c9f4f6/media/AlternateJPAProviders_TestReport.pdf

10
amicoderozer

私は私のために働いたことを共有したいと思いました。 WebsphereクラスがHibernateに干渉しないように、カスタムPersistenceProviderResolverを使用してWebsphere8.5.5.5でJPA2.1とHibernate4.3.11を使用することができました https://Gist.github.com/jeffsheets/aec3e94870ef903ce7efe33e00563d3c

ここにある投稿に基づいています https://hibernate.atlassian.net/browse/JPA-4

2
Jeff Sheets

サーバーレベルの変更なしでSpring Boot 2.1.4、Hibernate 5.3.9.Final、WAS 8.5.5で動作するようにしました:)。手順の概要は、以下の私の記事にあります。引き続きJPA2.1を使用しているため、JPA2.0にダウングレードする必要はまったくありませんでした。

[ハ​​ウツー] WebSphere8.5.5にSpringBoot 2.xアプリをデプロイする

1
Mr.J4mes

私のために働いたのは:

ログ(OPのログからコピー)には、次のものがあります。

[3/26/15 13:49:54:339 MDT] 00000066 LogHelper     Z org.hibernate.jpa.internal.util.LogHelper logPersistenceUnitInformation HHH000204: Processing PersistenceUnitInfo [
    name: default
    ...]

あなたが気づいたら、それは使用しようとしています default 永続性プロバイダー。

そのため、使用する永続性プロバイダーを明示的に指定しない場合、HibernateはWAS永続性プロバイダー(この場合はOpenJPA)を使用します。WebLogicの場合はEclipseLinkを使用します。

WAS8.5.5.xはJPA2.0(およびJPA 1.0)のみをサポートするため、これは機能せず、OPによって投稿されたものなどのエラーの束がログ(...)に表示されます。

それを解決するために、 この投稿 に従って、Hibernateへのサードパーティの永続性を明示的に指定しました

これが誰かの助けになることを願っています。

0
jumping_monkey