繁体   English   中英

使用 Apache NetBeans 12、Jakarta/Java EE、EclipseLink 和 Payara 创建持久性单元的行为不一致?

[英]Inconsistent behavior with creating persistence units using Apache NetBeans 12, Jakarta/Java EE, with EclipseLink and Payara?

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

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

@Entity
public class GroceryItem {  ...   }

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

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

在此处输入图片说明

我选择 jdbc:derby:// 选项,点击 Create,然后它在其他源中创建了persistence.xml文件... META-INF 正如我所期望的。 这是原始的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 for REST 和 WSDL/SOAP 完成了 Web 服务,但这就是全部变得非常令人困惑。

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

谢谢!

你错过了在你的persistence.xml中添加jta-data-source

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

在后面添加该行:

<persistence-unit name="somePU" transaction-type="JTA">

我无法在 Apache Netbeans 12.5 上选择不同的持久性库,这太令人沮丧了。 有什么帮助吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM