1

我和我的同事在使用 Archetype 的 airhacks java EE 8 项目创建简单的测试应用程序时遇到了不一致的行为。

我们创建一个简单的 POJO 并使用 Entity 注释对其进行标记,例如

@Entity
public class GroceryItem {  ...   }

在 Apache NetBeans 12 中,@Entity 有一个警告下划线。当我们选择警告(或按 Alt+Enter)时,我们会看到一个“创建持久性单元”选项,我们单击该选项。

但是,我能够做到这一点。

在此处输入图像描述

我选择 jdbc:derby:// 选项,点击 Create,然后它在 Other Sources ... META-INF 中创建了persistence.xml文件,正如我所料。这是原始的 persistence.xml:

<?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="somePU" transaction-type="RESOURCE_LOCAL">
    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
    <exclude-unlisted-classes>false</exclude-unlisted-classes>
    <properties>
      <property name="javax.persistence.jdbc.url" value="jdbc:derby://localhost:1527/sample"/>
      <property name="javax.persistence.jdbc.user" value="app"/>
      <property name="javax.persistence.jdbc.driver" value="org.apache.derby.jdbc.ClientDriver"/>
      <property name="javax.persistence.jdbc.password" value="app"/>
      <property name="javax.persistence.schema-generation.database.action" value="drop-and-create"/>
    </properties>
  </persistence-unit>
</persistence>

我修改它以使用JTA并删除对大多数属性的引用,结果如下:

<?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="somePU" transaction-type="JTA">
    <exclude-unlisted-classes>false</exclude-unlisted-classes>
    <properties>
      <property name="javax.persistence.schema-generation.database.action" value="drop-and-create"/>
    </properties>
  </persistence-unit>
</persistence>

请注意,我已将事务类型属性从“RESOURCE_LOCAL”更改为“JTA”。

现在,我只需转到命令行并使用

mvn package

然后我用 Payara 运行它:

java -jar payara.jar --deploy "path-to-the-war-file" --port 8080

我看到了预期的 Payara REST URL,它们运行良好。

但是,我的同事卡在“创建持久性单元”步骤。他们根本看不到 jdbc:derby://localhost... 选项。他们有和我一样的 Apache NetBeans,也有 Payara micro,就像我正在使用的一样。他们无法通过此过程创建 persistence.xml 文件。

我读到过,也许 Derby 在某些平台上已经放弃了支持,但我不明白为什么我的平台工作得很好,而他们的平台却没有给他们选择。

我对 Java/Apache NetBeans 的这一方面有点陌生(我在 Java SE、Android 上花了很多时间,甚至使用 ASP .NET Core MVC 为 REST 和 WSDL/SOAP 完成了 Web 服务,但这就是全部变得非常令人困惑。

所以,我的问题是:有没有人经历过这种行为并纠正了它,或者是否有有效的解决方法?通过 NetBeans 中的“新 XML 文件”创建一个 persistence.xml 似乎并不能解决问题——该图标甚至与选择“创建持久性单元”时的图标不同。这似乎很复杂,我自己无法重现他们的问题。

谢谢!

4

1 回答 1

0

you missed to add jta-data-source in your persistence.xml:

<jta-data-source>### YOUR FULL DATASOURCE NAME ###</jta-data-source>

add that line after:

<persistence-unit name="somePU" transaction-type="JTA">
于 2021-12-28T18:00:20.660 回答