如何让Websphere在jar文件中找到persistence.xml而不是META-INF?

时间:2016-04-27 13:24:48

标签: jpa websphere persistence.xml

我正在构建一组REST服务并将每个服务部署到单独的WAR文件中。由于这些服务中的每一个都使用完全相同的持久性配置,因此我将persistence.xml放在一个jar文件中(jar中persistence.xml文件的路径仍为/ META-INF)。

使用TomEE(1.7)运行时,这很好用。但是,当我尝试使用WebSphere(8.5.5.x)时,我的持久性单元不会被加载。在WebSphere日志中,我收到的错误如下:

[4/27/16 8:54:21:653 EDT] 00000080 JPAApplInfo E CWWJP0029E: The server cannot find the MRO_PU_JTA persistence unit in the Customer_WAR.war module and the DS_APP_EAR application. [4/27/16 8:54:21:654 EDT] 00000080 InjectionBind E CWNEN0035E: The ds.services.helper.AbstractServiceHelper/em reference of type javax.persistence.EntityManager for the component in the Customer_WAR.war module of the DS_APP_EAR application cannot be resolved. [4/27/16 8:54:21:657 EDT] 00000080 ResourceInjec E CWOWB0102E: A JCDI error has occurred: The ds.services.helper.AbstractServiceHelper/em reference of type javax.persistence.EntityManager for the null component in the Customer_WAR.war module of the DS_APP_EAR application cannot be resolved.

当我将persistence.xml文件从我的jar文件复制到本地WAR的META-INF时,此错误消失了,一切正常。由于我有以这种方式部署的 ton 服务,我不想为每个WAR文件制作persistence.xml的副本。

有没有办法让WebSphere找到我的persistence.xml文件?也许我在WebSphere中找不到一些设置?

感谢。

1 个答案:

答案 0 :(得分:1)

好的,所以这似乎与以下内容重复:Sharing a persistence unit across components in a .ear file

从Pascal Thivent看到该问题的答案,问题显而易见:为了使其工作,包含persistence.xml 的jar文件必须存在在正在部署到WebSphere的EAR的/ lib目录中。显然,它的工作方式是EAR解析persistence.xml文件,当每个WAR文件尝试注入实体管理器时,它引用EAR来执行此操作。这与TomEE(没有EAR文件进行部署)形成对比。在这种情况下,依赖关系由WAR文件类加载器解决,因此只需将WAR文件放在WAR的类路径中即可。