[英]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.