我有2 sequences in my ESB
,分別是「seqDeleteEntry」和「seqInsertEntry」。如何管理WSO2中的序列間的事務處理ESB
序列「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"
有人請澄清我錯過了什麼配置或我需要添加上述序列。
在此先感謝。
嗨磨憨來實現,感謝您的鏈接...我看着上面給出的文檔鏈接。但它不能幫助我。在上面的文檔中,刪除和插入(通過DBReport)的順序相同,而在我的情況下,它們的順序不同。此外,我嘗試實施「faultSequence」,因爲在鏈接也沒有幫助。我認爲交易不會按照我轉發的順序進行。有什麼建議麼?提前致謝。 – 2013-04-11 13:18:01