EDIT Итак, я переключился с Glassfish на Wildfly и использовал EclipseLink 2.5. Этот код перестает работать, когда я переключаюсь, при этом возникают проблемы. По какой-то причине диспетчер объектов был создан с локальными транзакциями ресурсов.Суть JPA не сохраняется в DB
Я пробовал много вещей, но когда я переключился на Hibernate EM, все работало нормально. END EDIT
Я использую Wildfly 10 и EclipseLink JPA иметь простой Stateless EJB сохранить запись в базе данных. Методы здесь:
Этот компонент отмечен @Stateless
@POST
@Override
@Consumes({"application/xml", "application/json"})
public void create(Actor entity) {
L.info("Creating {}", entity);
super.create(entity);
L.info("Created");
}
Вот метод абстрактного родителя:
public void create(T entity) {
//getEntityManager().getTransaction().begin();
getEntityManager().persist(entity);
//getEntityManager().flush();
//getEntityManager().getTransaction().commit();
}
Если я раскомментировать транзакционный код, он работает.
Если я добавляю аннотацию транзакции, она не работает.
Как это, он не работает.
Почему? Я, хотя EJBs получил транзакции, управляемые контейнером, и что это должно быть автоматически зафиксировано. Вот мое упорство определение единицы:
<?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="net.mikeski_auth_war_0.1.0-SNAPSHOTPU" transaction-type="JTA">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<jta-data-source>java:jboss/datasources/PostgresqlDS</jta-data-source>
<class>entities.Actor</class>
<exclude-unlisted-classes>true</exclude-unlisted-classes>
<properties>
<property name="eclipselink.weaving" value="false"/>
<property name="eclipselink.weaving.fetchgroups" value="false"/>
<property name="javax.persistence.schema-generation.database.action" value="create"/>
</properties>
</persistence-unit>
</persistence>
Я знаю, что моя сущность хорошо, потому что, если я добавлю некоторую БД находки методы работы, и если я получаю транзакции правильных вставок работают. Что мне не хватает?
попробуйте пометить его как @Transactional –
Можете ли вы опубликовать файл контекста приложения для аннотации транзакций – Sanj
не работает. Я пробовал его по методу абстрактного класса и по методу реализации и как, так и '@TransactionManagement (TransactionManagementType.CONTAINER)' в классе – mikeb