У меня возникли проблемы с RESOURCE_LOCAL
тип транзакции для JPA в Fuse ESB.OpenJPA - Управление транзакциями не доступно ... (Предохранитель ESB)
У меня также нет полного понимания того, подходит ли мне JTA
или RESOURCE_LOCAL
.
Мои persistence.xml:
<persistence-unit name="invoicePersistence" transaction-type="RESOURCE_LOCAL">
<provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
<jta-data-source>osgi:service/javax.sql.DataSource/(osgi.jndi.service.name=jdbc/invDataSource)</jta-data-source>
<non-jta-data-source>osgi:service/javax.sql.DataSource/(osgi.jndi.service.name=jdbc/invDataSource)</non-jta-data-source>
<class>com.company.service.Invoice</class>
<!-- etc... -->
</persistence-unit>
Мои бобы в blueprint.xml:
<reference id="invDataSource" interface="javax.sql.DataSource" filter="(datasource.name=invDataSource)"/>
<bean id="invoiceDao" class="com.company.project.InvoiceDao">
<jpa:context unitname="invoicePersistence" property="entityManager"/>
<tx:transaction method="*" value="Required" />
</bean>
И мой код:
entityManager.getTransaction().begin();
entityManager.persist(a);
entityManager.persist(b);
entityManager.getTransaction().commit();
И исключение, используя транзакции типа RESOURCE_LOCAL
в моем persistence.xml:
java.lang.IllegalStateException: Transaction management is not available for container managed EntityManagers.
Я также попытался использовать транзакционный тип JTA
в моем persistence.xml, но затем получил OptimisticLockException
.
Я не уверен, какой подход лучше (RESOURCE_LOCAL или JTA), но главное, что в моем объекте кода a
и b
необходимо сохранить транзакцию (все или ничего).
Я работаю в Fuse ESB (верблюд, cxf и т. Д.).
Спасибо за любые советы или помощь.