Transactions POX/Rest端点的两阶段提交&x2B;数据库插入

Transactions POX/Rest端点的两阶段提交&x2B;数据库插入,transactions,wso2,wso2esb,jta,Transactions,Wso2,Wso2esb,Jta,我试图创建一个事务单元,它发送一个RESTful HTTP post并将此数据插入表中 尽管我对本地序列有一个onError处理程序,但当我禁用与端点的连接时,而不是失败时,“发送”中介将使端点处于挂起状态。然后它继续跳过发送,只插入数据。此外,我的自定义failureSequence抱怨我不在事务中,即使它是在我调用之后调用的 虽然我已经阅读了文档,并且理解挂起是失败端点的默认行为,但实际上我需要更多的控制。我想在失败时触发我自己的序列(或接收到某些特定的HTTP响应代码),并调用 为清楚起见

我试图创建一个事务单元,它发送一个RESTful HTTP post并将此数据插入表中

尽管我对本地序列有一个onError处理程序,但当我禁用与端点的连接时,而不是失败时,“发送”中介将使端点处于挂起状态。然后它继续跳过发送,只插入数据。此外,我的自定义failureSequence抱怨我不在事务中,即使它是在我调用
之后调用的

虽然我已经阅读了文档,并且理解挂起是失败端点的默认行为,但实际上我需要更多的控制。我想在失败时触发我自己的序列(或接收到某些特定的HTTP响应代码),并调用

为清楚起见,我的序列的相关部分如下所示:

<sequence xmlns="http://ws.apache.org/ns/synapse" name="csvToDatabaseRollback">
   <log level="custom">
      <property name="text" value="Rolling back transaction"/>
   </log>
   <transaction action="rollback"/>
   <!-- rollback any other state, here -->
</sequence>

<sequence xmlns="http://ws.apache.org/ns/synapse" name="csvRow2Pc" onError="csvToDatabaseRollback">
   <transaction action="new"/>
   <log level="full">
      <property name="State" value="Iteration"/>
   </log>
   <property name="HTTP_METHOD" value="POST" scope="axis2" type="STRING"/>
   <log level="custom">
      <property name="text" value="Calling rest-endpoint"/>
   </log>
   <send>
      <endpoint>
         <address uri="http://localhost:80/spotify" format="pox"/>
      </endpoint>
   </send>
   <log level="custom">
      <property name="text" value="After HTTP POST"/>
   </log>
   <dbreport useTransaction="true">
      <connection>
        ....
      </connection>
      <statement>
         <sql>
            <![CDATA[   insert into file values (?, ?, ?)]]></sql>                                                                                                                                                                                                                                 
            <parameter xmlns:ns2="http://org.apache.synapse/xsd" xmlns:ns="http://org.apache.synapse/xsd" xmlns:sec="http://secservice.samples.esb.wso2.org" expression="//line/col_one/text()" type="VARCHAR"/>
            <parameter xmlns:ns2="http://org.apache.synapse/xsd" xmlns:ns="http://org.apache.synapse/xsd" xmlns:sec="http://secservice.samples.esb.wso2.org" expression="//line/col_two/text()" type="VARCHAR"/>
            <parameter xmlns:ns2="http://org.apache.synapse/xsd" xmlns:ns="http://org.apache.synapse/xsd" xmlns:sec="http://secservice.samples.esb.wso2.org" expression="//line/col_three/text()" type="VARCHAR"/>
         </statement>
      </dbreport>
      <log level="custom">
         <property name="text" value="Before tx commit"/>
      </log>
      <transaction action="commit"/>
</sequence>
如果我检查数据库,则行已提交。随后的尝试将跳过“发送”中介,因为它已暂停


理想情况下,我希望发送HTTP POST,并根据REST响应定制路由规则,而不是挂起。如何执行此操作?

当端点挂起时,esb将调用faultsequence。在faultsequence中,您可以调用任何序列。因此,它为您提供了放置自定义代码的控件。

谢谢。我已经在上面演示了这一点。问题不是我的faultsequence没有被调用;这是:i)当我在故障序列内回滚时,它不识别外部事务;请参见上面的错误。ii)端点被挂起,并在下一次调用时被静默忽略。
[2013-10-25 15:09:40,117]  WARN - ConnectCallback Connection refused or failed for :   localhost/127.0.0.1:80
[2013-10-25 15:09:40,116]  INFO - LogMediator text = After HTTP POST
[2013-10-25 15:09:40,129]  INFO - LogMediator text = Rolling back transaction
[2013-10-25 15:09:40,129]  WARN - EndpointContext Suspending endpoint :   endpoint_f2e0b5550f82db317194145cb24b59f38a63ab610d8a994c - last suspend duration was :   30000ms and current suspend duration is : 30000ms - Next retry after : Fri Oct 25 15:10:10 NZDT 2013
[2013-10-25 15:09:40,121]  INFO - LogMediator text = Before tx commit
[2013-10-25 15:09:40,131]  INFO - LogMediator text = Rolling back transaction
[2013-10-25 15:09:40,131] ERROR - TransactionMediator Unable to rollback transaction
java.lang.IllegalStateException: This method needs a transaction for the calling thread    and none exists.
Possible causes: either you didn't start a transaction,
it rolledback due to timeout, or it was committed already.
ACTIONS: You can try one of the following: 
1. Make sure you started a transaction for the thread.