我有 2 个sequences in my ESB
,分别是“seqDeleteEntry”和“seqInsertEntry”。
序列“ seqDeleteEntry
”将根据收到的输入从表中删除条目。
代码片段:
<sequence xmlns="http://ws.apache.org/ns/synapse">
<property xmlns:ns="http://org.apache.synapse/xsd" name="propertyName" expression="//Id/text()" scope="default" type="STRING"/>
<transaction action="new"/>
<property name="SET_ROLLBACK_ONLY" value="true" scope="axis2"/>
<dbreport useTransaction="true">
<connection>
<pool>
<password>$pwd</password>
<user>$uname</user>
<url>connectionURL</url>
<driver>$driver</driver>
</pool>
</connection>
<statement>
<sql>
<![CDATA[ delete from tbl_name where column_name = ?]]>
</sql>
<parameter expression="$ctx:propertyName" type="VARCHAR"/>
</statement>
</dbreport>
<sequence key="conf:/seqInsertEntry"/>
</sequence>
序列“ seqInsertEntry
”将向表中插入条目。
代码片段:
<sequence xmlns="http://ws.apache.org/ns/synapse">
<dbreport useTransaction="true">
<connection>
<pool>
<password>$pwd</password>
<user>$uname</user>
<url>connectionURL</url>
<driver>$driver</driver>
</pool>
</connection>
<statement>
<sql>
<![CDATA[ insert into tbl_name values('value1', 'value2')]]>
</sql>
</statement>
</dbreport>
<transaction action="commit"/>
<send/>
</sequence>
我的问题是:当在第二个序列()中插入条目
时出现错误(比如说) ,我需要以这样一种方式回滚事务,以使使用前一个序列()删除的记录应该恢复。Integrity Constraint Violation
seqInsertEntry
seqDeleteEntry
我需要添加什么配置来实现上述示例中的事务管理?
注意:
我尝试设置以下属性,但没有帮助。
<transaction action="new"/>
<property name="SET_ROLLBACK_ONLY" value="true" scope="axis2"/>
我在DBReport
(在两个序列中)添加了以下属性,并在第二个序列()结束时提交了事务,seqInsertEntry
但它仍然没有帮助。
useTransaction="true"
有人请澄清我错过了什么配置,或者我需要在上述序列中添加。
提前致谢。