我有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"
有人请说明我错过了哪些配置或者我需要在上面的序列中添加。
先谢谢。
答案 0 :(得分:1)
Vijay,我的理解是除了故障序列(以及同步引发错误时),事务不会跨越序列传递。事务似乎附加到序列和客户端。
您是如何实施故障序列的?
如果我对交叉顺序交易有误,我将很高兴知道如何实现: - )
答案 1 :(得分:0)
请参阅文件[1]和[2] ......
[1] http://docs.wso2.org/wiki/display/ESB460/Transaction+Mediator+Example
[2] http://docs.wso2.org/wiki/display/ESB460/Transactional+ESB
此致
莫汉