2

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

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

(obj1) 主要交易成功/(obj2) 嵌套交易异常:obj1 在数据库中,obj2 不在数据库中 (obj1) 主要交易异常/(obj2) 嵌套交易成功:obj2 不在数据库中,obj2 在数据库中

但是我有:

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

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

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

设置:整个项目是一个maven 项目,当切换到“all-project”并输入“mvn clean install”时应该可以工作。测试用例是在嵌入式 glassfish 服务器中调用 ejb 方法的集成测试。ejb 将对象存储在 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>

谁能解释这种行为并给我提示哪些设置可能是错误的?

问候,扬

4

0 回答 0