1

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

我需要添加什么配置来实现上述示例中的事务管理?

注意:
我尝试设置以下属性,但没有帮助。

<transaction action="new"/>
<property name="SET_ROLLBACK_ONLY" value="true" scope="axis2"/>  

我在DBReport(在两个序列中)添加了以下属性,并在第二个序列()结束时提交了事务,seqInsertEntry但它仍然没有帮助。

useTransaction="true"  

有人请澄清我错过了什么配置,或者我需要在上述序列中添加。

提前致谢。

4

2 回答 2

1

Vijay,我的理解是事务不跨序列进行,除非在故障序列中(以及当错误同步引发时)。事务似乎附加到序列和客户端。

你是如何实现你的故障序列的?

如果我对跨序列交易有误,我将不胜感激知道如何实现这一点:-)

于 2013-06-06T11:21:01.593 回答
0

请参考文档 [1] 和 [2]...

[1] http://docs.wso2.org/wiki/display/ESB460/Transaction+Mediator+Example

[2] http://docs.wso2.org/wiki/display/ESB460/Transactional+ESB

问候,

莫汉

于 2013-04-11T04:37:41.307 回答