在 weblogic 12.1.1 中部署 jsf jpa web 应用程序

deploying jsf jpa web application in weblogic 12.1.1

我正在使用 Maven、JSF 2.2、JSTL 1.2.1、JPA 2.1、Spring 4.2.9、Hibernate-jpa-api-2.1 开发 Web 应用程序 我可以在 Tomcat 和 运行 中毫无问题地部署我的应用程序,但我也想在 weblogic 12.1.1 中部署,但我在启动我的应用程序服务器时遇到了一些问题:

nested exception is java.lang.NoSuchMethodError : javax.persistance.Table.indexes()[Ljavax/persistence/Index; .... org.springframework.beans.factory.BeanCreationException : Error creatin bean with name 'myEmf' defined in class path resource [jpaConfig.xml] .... Error javax.entreprise.resource.webcontainer.jsf.application

我在部署的 war 中创建了一个 weblogic.xml,如下所示:

<prefer-application-packages> 
   <package-name>javax.faces.*</package-name> 
   <package-name>com.sun.faces.*</package-name> 
   <package-name>com.bea.faces.*</package-name> 
   </prefer-application-packages> 
 
   <prefer-application-resources> 
   <resource-name>javax.faces.*</resource-name> 
   <resource-name>com.sun.faces.*</resource-name> 
   <resource-name>com.bea.faces.*</resource-name> 
 
<resource-name>META-INF/services/javax.servlet.ServletContainerInitializer</resource-name>
</prefer-application-resources>

错误消息"java.lang.NoSuchMethodError"表示与Weblogic 的JPA 2.0 库发生库冲突。由于您为此打包了自己的库,请尝试将 "javax.persistence.*" 添加到 weblogic.xml


选项 2:将 JPA 2.1 支持添加到 weblogic 类路径

在您的 domain/bin/setDomainEnv(.cmd 用于 windows,.sh 用于 unix)中添加一个 PRE_CLASSPATH 变量。在 windows 系统上,它看起来像这样:

set PRE_CLASSPATH=C:/weblogic_12130/oracle_common/modules/javax.‌​persistence_2.1.jar;‌​C:/weblogic_12130/wl‌​server/modules/com.o‌​racle.weblogic.jpa21‌​support_1.0.0.0_2-1.‌​jar