Transactions 使用OpenEJB 4.5.0和MySQL 5.5执行事务时出现异常
Transactions 使用OpenEJB 4.5.0和MySQL 5.5执行事务时出现异常,transactions,ejb-3.1,openjpa,openejb,Transactions,Ejb 3.1,Openjpa,Openejb,我在InnoDB引擎中使用OpenEjb 4.5.0和MySQL 5.5.xx。 我有一个非常简单的无状态bean,带有注入式EntityManagerFactory @PersistenceUnit private EntityManagerFactory factory 我正在进行如下交易: EntityManager em = factory.createEntityManager(); EntityTransaction tx = em.getTransaction(); try {
我在InnoDB引擎中使用OpenEjb 4.5.0和MySQL 5.5.xx。
我有一个非常简单的无状态bean,带有注入式EntityManagerFactory
@PersistenceUnit
private EntityManagerFactory factory
我正在进行如下交易:
EntityManager em = factory.createEntityManager();
EntityTransaction tx = em.getTransaction();
try {
tx.begin();
Query query = em.createNativeQuery("INSERT IGNORE INTO `myTable` (myColumn) values (1)");
query.executeUpdate();
tx.commit();
} catch (RuntimeException re) {
if (tx.isActive())
tx.rollback();
} finally {
em.close();
}
使用以下配置:persistence.xml:
<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
<persistence-unit name="ejbPU-ro" transaction-type="RESOURCE_LOCAL">
<provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
<non-jta-data-source>mySQLDataSource</non-jta-data-source>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<properties>
<property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(foreignKeys=true"/>
<property name="openjpa.jdbc.SchemaFactory" value="native(foreignKeys=true)"/>
<property name="openjpa.Log" value="DefaultLevel=TRACE,SQL=TRACE"/>
</properties>
</persistence-unit>
</persistence>
org.apache.openjpa.persistence.PersistenceProviderImpl
mySQLDataSource
假的
openejb.xml(仅数据源定义):
JdbcDriver com.mysql.jdbc.Driver
JdbcUrl jdbc:mysql://127.0.0.1:3307/myDb?relaxAutoCommit=true
用户名根
密码
运行我的小程序时,我遇到以下异常:org.apache.openjpa.persistence.RollbackException:注册事务时无法设置提交
一些挖掘和实际原因是dbcp
ManagedConnection.commit
在transactionContext!=空
如有任何指示/提示,将不胜感激。谢谢,
阿维拉姆好的,这很尴尬:)
我忘了最后两行:
<Resource id="mySQLDataSource" type="DataSource">
JdbcDriver com.mysql.jdbc.Driver
JdbcUrl jdbc:mysql://127.0.0.1:3307/myDb
UserName root
Password
JtaManaged false
DefaultAutoCommit false
</Resource>
JdbcDriver com.mysql.jdbc.Driver
JdbcUrl jdbc:mysql://127.0.0.1:3307/myDb
用户名根
密码
虚假的
默认自动提交错误
您是否检查了mysql连接,您已经在jdbc中提供了3307端口号:mysql://127.0.0.1:3307,是正确的端口吗?如果端口被指定为3306怎么办?确保用户名、密码和mysql驱动程序版本正确。并尝试删除?relaxAutoCommit=true。
<Resource id="mySQLDataSource" type="DataSource">
JdbcDriver com.mysql.jdbc.Driver
JdbcUrl jdbc:mysql://127.0.0.1:3307/myDb
UserName root
Password
JtaManaged false
DefaultAutoCommit false
</Resource>