Java OpenJPA-事务管理不可用。。。(保险丝ESB)

Java OpenJPA-事务管理不可用。。。(保险丝ESB),java,jpa,openjpa,jta,fuseesb,Java,Jpa,Openjpa,Jta,Fuseesb,Fuse ESB中JPA的RESOURCE\u LOCAL事务类型有问题 我也不完全了解JTA或RESOURCE\u LOCAL是否更适合我 My persistence.xml: <persistence-unit name="invoicePersistence" transaction-type="RESOURCE_LOCAL"> <provider>org.apache.openjpa.persistence.PersistenceProviderImp

Fuse ESB中JPA的
RESOURCE\u LOCAL
事务类型有问题

我也不完全了解
JTA
RESOURCE\u LOCAL
是否更适合我

My 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>
例外情况是,在my persistence.xml中使用事务类型
RESOURCE\u LOCAL

java.lang.IllegalStateException: Transaction management is not available for container managed EntityManagers.
我还尝试在persistence.xml中使用事务类型
JTA
,但随后收到
OptimisticLockException

我不确定哪种方法更好(RESOURCE_LOCAL或JTA),但最主要的是,在我的代码对象中,
a
b
需要在事务中持久化(全部或全无)

我运行的是fuseesb(camel、cxf等)


谢谢你的提示和帮助。

好的,这是答案

首先,两个不错的链接和

本地资源

transaction type=“RESOURCE\u LOCAL”
确实是自我管理的持久性,代码应该如下:

EntityManager entityManager = entityManagerFactory.createEntityManager();

...

entityManager.getTransaction().begin();
entityManager.persist(a);
entityManager.persist(b);
entityManager.getTransaction().commit();
使用
entityManager.getTransaction()
entityManager.flush()
都会导致异常,因为我指定了

正确的方法是使用
EntityManagerFactory

<bean id="invoiceDao" class="com.company.project.InvoiceDao">
    <jpa:unit unitname="invoicePersistence" property="entityManagerFactory"/>
</bean>
它应该在blueprint中配置
实体管理器

EntityManager entityManager = entityManagerFactory.createEntityManager();

...

entityManager.getTransaction().begin();
entityManager.persist(a);
entityManager.persist(b);
entityManager.getTransaction().commit();
<bean id="invoiceDao" class="com.company.project.InvoiceDao">
    <jpa:unit unitname="invoicePersistence" property="entityManagerFactory"/>
</bean>
entityManager.persist(a);
entityManager.persist(b);