使用JTA和DataNucleus在嵌套事务上下文中的错误回滚行为

时间:2012-08-01 13:00:26

标签: ejb jta datanucleus maven-glassfish-plugin

我将首先解释我的目标,然后解释症状,然后解释我的环境设置。

我正在开发一个项目,最终应该在嵌套的事务上下文中测试cumulus4j的行为。因此,我首先编写了没有cumulus4j的测试。测试用例很简单:将两个对象写入数据库。每个对象都在自己的事务中编写。这两个事务是嵌套的。现在,主事务或嵌套事务抛出了一个异常,该异常应该导致事务的回滚。我期望的行为是:

(obj1)主tx成功/(obj2)嵌套tx异常:db中的obj1,obj2不在db中 (obj1)主tx异常/(obj2)嵌套tx成功:obj2不在db中,obj2在db中

但我有:

(obj1)主tx成功/(obj2)嵌套tx异常:db中的两个对象 (obj1)主tx异常/(obj2)嵌套tx成功:db

中没有对象

使用纯数据源和纯SQL正确运行相同的测试,因此我花了很多时间检查JTA和DN配置。

交易是容器管理的,我按照DataNucleus website上的说明操作。 嵌套事务由一个bean调用另一个bean启动,该bean使用@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)注释。

设置: 整个项目是maven project,在切换到“all-project”并输入“mvn clean install”时应该可以正常工作。 测试用例是集成测试,它在嵌入式glassfish服务器中调用ejb的方法。 ejbs将对象存储在derby数据库中。 datanucleus的相关设置是:

datanucleus.jtaLocator=custom_jndi
datanucleus.jtaJndiLocation=java:appserver/TransactionManage
javax.jdo.option.TransactionType=JTA
datanucleus.identifierFactory=datanucleus1
datanucleus.storeManagerType=rdbms
javax.jdo.option.ConnectionFactoryName=jdbc/__default
javax.jdo.option.ConnectionFactory2Name=jdbc/__defaultNoXa

domain.xml中的服务器资源设置为:

<resources>

<jdbc-resource pool-name="DerbyPool" jndi-name="jdbc/__default" />
<jdbc-resource pool-name="DerbyPoolNoXa" jndi-name="jdbc/__defaultNoXa" />
<jdbc-connection-pool name="DerbyPool" datasource-classname="org.apache.derby.jdbc.EmbeddedXADataSource" res-type="javax.sql.XADataSource">
  <property value="${com.sun.aas.instanceRoot}/lib/databases/default" name="databaseName" />
  <property value=";create=true" name="connectionAttributes" />
</jdbc-connection-pool>
 <jdbc-connection-pool name="DerbyPoolNoXa" datasource-classname="org.apache.derby.jdbc.EmbeddedDataSource40" res-type="javax.sql.DataSource">
  <property value="${com.sun.aas.instanceRoot}/lib/databases/default" name="databaseName" />
  <property value=";create=true" name="connectionAttributes" />
  </jdbc-connection-pool>
 </resources>
<servers>
 <server name="server" config-ref="server-config">
  <resource-ref ref="jdbc/__default" />
  <resource-ref ref="jdbc/__defaultNoXa" />
 </server>
</servers>

任何人都可以解释这种行为并给我一个暗示哪些设置可能有误?

此致 扬

0 个答案:

没有答案