当谈到我的 persistence.xml 文件的位置时,我感到很困惑。我使用 eclipselink 2.4 作为我的 JPA 2.0 实现,并且我的 persistence.xml 位于 src/main/resources/META-INF/persistence.xml 下,与许多帖子状态一样。
第一个问题:在 Eclipse 中发布到我的服务器后,我收到一条错误消息,指出我的 persistence.xml 未找到。
Exception: : java.lang.IllegalArgumentException: No persistence unit named 'X'
is available in scope Webapp. Available persistence units: [] at
这是我的 persistence.xml 的代码
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="X" transaction-type="JTA">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<jta-data-source>localJTA</jta-data-source>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<properties>
<property name="eclipselink.target-server" value="WebLogic"/>
<property name="eclipselink.logging.level" value="FINEST"/>
</properties>
</persistence-unit>
</persistence>
如果我将 META-INF 移动到 webapp/WEB-INF/classes/META-INF 那么它可以工作!我无法理解问题所在。
我检查了项目构建路径,那里的一切看起来都很好。
我遇到的第二个问题是我的带注释的实体类没有被 eclipselink 自动拾取。在我的 JPA 配置中,我自动选择了发现带注释的类。
我的xml中也有以下内容
<exclude-unlisted-classes>false</exclude-unlisted-classes>
使用的技术:weblogic 12c 服务器、EJB 3.1、JPA 2.0、M2E-WTP 和 JSF 2.1
更新1:将META-INF留在路径src/main/resources/META-INF/persistence.xml并执行maven install构建war文件,META-INF文件夹正确放置在WEB-INF/classes/META- INF/persistence.xml 应该是(在战争中)。似乎这只是 webapp 在 Eclipse 中本地构建和运行的问题。谁能解释一下?
更新 2:将 META-INF 留在 src/main/resources 中,即 src/main/resources/META-INF/persistence.xml 和我的 persistence.xml 中的以下内容,而不是显式列出实体类
<exclude-unlisted-classes>false</exclude-unlisted-classes>
如果我构建战争并通过 Internet Explorer 通过 weblogic 控制台部署它,则可以工作。为什么它在日食内部不起作用!?
更新 3:
您是否检查了构建的内容- 是的,在 Eclipse 中,我已将构建设置为自动。在项目文件夹中查看 java 包 com、包含 persistence.xml 的 META-INF 文件夹和位于 Webapp/target/classes 下的资源文件夹。
如果战争是相同的- 您指的是 C:\workspace.metadata.plugins\org.eclipse.wst.server.core\tmp0\Weblogic12cDomain_auto_generated_ear_\Webapp.war 中的 Webapp.war 文件夹吗?如果是这样,那里唯一的东西是 WEB-INF\lib\jsf-impl-2.1.7.jar
那么您是否检查了用于在 Eclipse 中测试您的应用程序的类路径 - 如预期在 Webapp/ 下可以在我的类路径中找到此条目.classpath
如果资源目录中的persistence.xml首先在类路径上,它将被拾取而不是你战争中的那个或正确目录中的一个- 我的理解是Eclipse将构建项目,然后将内容复制到服务器不生成战争文件。
这是 maven 生成的 Webapp.war 的根目录:
以下是 Webapp 项目文件夹的根目录:
这是 C:\workspace.metadata.plugins\org.eclipse.wst.server.core\tmp0\Weblogic12cDomain_auto_generated_ear_\Webapp.war 下 Webapp.war 文件夹的根目录
如果资源目录中的persistence.xml首先在类路径上,它将被拾取而不是你的war中的一个或正确目录中的一个。- 不知道你的意思。我的资源/META-INF 中的 persistence.xml 是我想要获取的。不确定战争文件与它有什么关系?无论哪种方式,它们都应该是我认为的相同的 persistence.xml。
任何帮助深表感谢!!