如何在WSO2 ESB中跨序列管理事务

时间:2013-04-10 06:59:53

标签: wso2 wso2esb

我有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"  

有人请说明我错过了哪些配置或者我需要在上面的序列中添加。

先谢谢。

2 个答案:

答案 0 :(得分:1)

Vijay,我的理解是除了故障序列(以及同步引发错误时),事务不会跨越序列传递。事务似乎附加到序列和客户端。

您是如何实施故障序列的?

如果我对交叉顺序交易有误,我将很高兴知道如何实现: - )

答案 1 :(得分:0)