我们正在尝试将Hibernate用作WebSphere Application Server 7.0上的JPA Provider。但我们正在接受例外。
javax.ejb.EJBException:注入失败;嵌套异常是:
java.lang.IllegalStateException:EntityManagerFactory还没有 为PU创建:PuId = data_commonweb #data_ejb_common.jar #data_common
由引起:java.lang.IllegalStateException:EntityManagerFactory有 没有为PU创建: PUID = data_commonweb#data_ejb_common.jar#data_common
Persistense.xml
如下:
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>jdbc/db_ds</jta-data-source>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.DB2Dialet"/>
<property name="hibernate.transaction.factory_class" value="org.hibernate.transaction.JTATransactionFactory" />
<property name="hibernate.transaction.manager_lookup_class" value="org.hibernate.transaction.WebSphereExtendedJTATransactionLookup"/>
<property name="openjpa.TransactionMode" value="managed"/>
<property name="hibernate.show_sql" value="true"/>
<property name="hibernate.format_sql" value="true"/>
</properties>
</persistence-unit>
答案 0 :(得分:1)
JPA2,在没有Websphere JPA2功能包的情况下,在Websphere 7上部署了spring-data 2012年3月22日,下午08:52 经过一天的研究,终于找到了使用Webphere 7或更低版本运行JPA 2的方法,而无需安装Websphere JPA2功能包。
默认情况下,Websphere 7支持JPA1,但在尝试运行JPA2时会产生类加载器问题,而且Websphere始终没有任何明确的解决此限制的文档。 以下是一个非常简单的解决方案:
解决此问题的两种方法:
示例代码 代码:
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="persistenceXmlLocation" value="classpath:META-INF/persistence_WAS.xml"/>
</bean>
这是因为J2EE容器默认在META-INF / web应用程序下查找persistence.xml并保持这将导致websphere7初始化JPA1而忽略使用JPA2的请求。 通过使用Spring Data配置,摆脱persistence.xml是我的选择。 (XML版本属性的抛出验证异常无效)
(或使用JPA API初始化您自己的Persistence Manager)
在PersistentUnitInfo中传递您需要的值。
这是因为一旦我们将Websphere的类加载器策略更改为父级,它就无法初始化XML解析库
以下是完整列表:
的XStream-1.2.1.jar
在从WAR或EAR文件加载所有JAR之后,让Websphere最终加载其内部和扩展JAR - PARENT_LAST可以解决这个问题。
以下是更新path步骤
的路径在Applications > Application Types > WebSphere enterprise applications
下
选择已部署的应用程序:
Enterprise Applications > JPA2-Application > Manage Modules
选择WAR文件,例如。 JPA2-Application.war
将类加载器顺序设置更改为首先加载本地类加载器的类(父类最后一个) 在类加载器查看器下,您可以看到您的ClassLoader - 搜索顺序 - 您可以看到您的EAR中的Jars和类首先被加载。
在我的情况下,不需要额外的库(步骤3)
答案 1 :(得分:-2)
我们收到了与所有JPA相关问题的错误。我们通过关注https://www.ibm.com/developerworks/mydeveloperworks/wikis/form/anonymous/api/library/53181ccd-bcd4-431f-b968-0b5f6d46d652/document/192a432b-28bb-4080-b037-345e5d83da76/attachment/61e74f67-1d60-4120-ba25-ad7264c9f4f6/media/AlternateJPAProviders_TestReport.pdf解决了将Hibernate配置为JPA的问题。