Непоследовательное поведение при создании единиц сохранения состояния с использованием Apache NetBeans 12, Jakarta / Java EE, с EclipseLink и Payara?
Мы с коллегами наблюдаем противоречивое поведение при создании простого тестового приложения с использованием проекта airhacks java EE 8 от Archetype.
Мы создаем простой объект 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>
Обратите внимание, что я изменил атрибут типа транзакции на "JTA" с "RESOURCE_LOCAL".
Теперь я просто перехожу в командную строку и создаю файл grocery-list.war, используя
mvn package
а затем я запускаю его с помощью Payara:
java -jar payara.jar --deploy "path-to-the-war-file" --port 8080
Я вижу результирующие URL-адреса Payara REST, которые я ожидал, и они отлично работают.
Однако мои коллеги застревают на этапе "Создание единицы сохранения состояния". Они вообще не видят параметр jdbc:derby://localhost... У них те же Apache NetBeans, что и у меня, а также Payara micro, как и я. Они не могут создать файл persistence.xml с помощью этого процесса.
Я читал, что, возможно, поддержка Derby упала на некоторых платформах, но я не могу понять, почему моя работает нормально, а их платформа не дает им такой возможности.
Я немного новичок в этой стороне Java/Apache NetBeans (я провел много времени в Java SE, Android и даже делал веб-службы с использованием ASP .NET Core MVC для REST и WSDL/SOAP, но это все становится очень запутанным.
Итак, мой вопрос: кто-нибудь испытывал такое поведение и исправлял его, или есть эффективное обходное решение? Создание persistence.xml с помощью "New XML file" в NetBeans, похоже, не помогает - значок даже отличается от того, когда выбран "Create Persistence Unit". Это кажется очень сложным, и мне самому трудно воспроизвести их проблемы.
Благодаря!
1 ответ
вы пропустили добавление jta-data-source в свой файл persistence.xml:
<jta-data-source>### YOUR FULL DATASOURCE NAME ###</jta-data-source>
добавьте эту строку после:
<persistence-unit name="somePU" transaction-type="JTA">