2

我在 Netbeans 工作,并将我的实体 bean 和 Web 服务放在不同的项目中。我在 Web 服务项目中包含实体 bean,但是 ApplicaitonConfig.java 文件不断被覆盖并删除我为相关 jar 文件中的实体 bean 创建的条目。

我的问题是:是否需要让 EntityBeans 和 WebServices 共享同一个项目/jar 文件?如果不是,那么包含 jar 文件中的实体 bean 的适当方法是什么?


<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1"
             xmlns="http://xmlns.jcp.org/xml/ns/persistence"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
  <persistence-unit name="jdbc/emrPool" transaction-type="JTA">
    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
    <jta-data-source>jdbc/emrPool</jta-data-source>
    <exclude-unlisted-classes>false</exclude-unlisted-classes>
    <properties>
      <property name="eclipselink.ddl-generation" value="none"/>
      <property name="eclipselink.cache.shared.default" value="false"/>
    </properties>
  </persistence-unit>
</persistence>

根据 Melc 的输入,我验证了事务类型设置为 JTA 并且 jta-data-source 设置为 Glassfish JDBC 资源的值。不幸的是,问题仍然存在。我打开了 WAR 文件并验证了 EntityBean.jar 文件是最新版本,并且位于 War 文件的 WEB-INF/lib 目录中。我认为这与实体没有向实体经理“注册”这一事实有关。但是我不知道为什么他们没有被注册。

4

2 回答 2

2

不,没有必要在同一场战争中。您可以拥有一个包含 jpa 实体的项目(我认为它称为类库项目),并从包含 Web 服务的 Web 项目的库中添加该项目。ApplicationConfig 与 Web 服务相关,它不影响实体。我建议您从 web 项目的简单 servlet 中检查 jpa 项目的功能。如果它有效,那么它也适用于您的 jax-rs 代码。但是请注意正确修改persistence.xml 以不使用resource-local,这是netbeans 为非Web 项目默认生成的,而是使用jta 以及正确的服务器数据源。

编辑

通过从 netbeans 编辑 persistence.xml 并取消选中“Include All Entity Classes in ..”来进行另一个测试,然后选择“Add Class...”选项并选择所有实体类。沿着实体类,您还应该找到您尝试访问的实体类。

当从 netbeans 运行时,gf 正在处理的是 web 项目的构建文件夹的内容,而不是战争。除非你去 gf 的管理控制台,否则部署应用程序并选择你的 war 文件。因此,您最好也检查该文件夹的内容,或者干脆删除它并让 nb 重新创建它。

“未知实体 bean 类”经常与 netbeans 和 glassfish 一起弹出,例如,您也可能在重新部署后系统工作时得到它。在这种情况下,它可以通过重新启动服务器来修复。不幸的是,这是那些并不总是真正意味着他们所说的话的错误之一。

于 2013-11-10T18:24:02.950 回答
0

在我将其添加到以下内容后,它对我有用persistence.xml

<jar-file>../lib/my-jpa-models.jar</jar-file>
于 2015-04-21T15:43:03.070 回答