JDBC出站端点的回滚策略

时间:2014-02-14 10:42:23

标签: mule

我的用例如下。

在我的mule流程中,我将Http作为入站端点,将jdbc(SQL Server)作为出站端口。我试图在每次调用流时向SQL服务器插入一条记录。我还在全局级别中使用“on-redelivery-attempts-exceeded”块回滚异常策略。

但是当我的数据库关闭时,我试图插入,我的流量会抛出异常。使用重新传递计数回滚异常并不会影响流程。

请咨询。

* 流程文件: *

<!-- <jdbc-ee:mssql-data-source name="MS_SQL_Data_Source" user="sa" password="mssql" url="jdbc:sqlserver://VIKRAM-PC\MSSQLEXPRESS:1433;databaseName=testsqldb" transactionIsolation="UNSPECIFIED" doc:name="MS SQL Data Source"/> -->


<jdbc-ee:connector name="Database" dataSource-ref="MSSQLDataSourceBean" validateConnections="true" queryTimeout="-1" pollingFrequency="0" doc:name="Database"/>


<spring:beans>
    <spring:bean id="MSSQLDataSourceBean" name="MSSQLDataSourceBean" class="org.enhydra.jdbc.standard.StandardDataSource" >
        <spring:property name="driverName" value="com.microsoft.sqlserver.jdbc.SQLServerDriver"/>
        <spring:property name="url" value="jdbc:sqlserver://VIKRAM-PC\MSSQLEXPRESS:1433;databaseName=testsqldb;user=sa;password=mssql;"/>
    </spring:bean>
</spring:beans>

<rollback-exception-strategy name="Rollback_Exception_Strategy" maxRedeliveryAttempts="3" when="#[exception.causedBy(java.lang.Exception)]"/>



<flow name="DataBaseAsOutBound" doc:name="DataBaseAsOutBound" processingStrategy="synchronous">
    <http:inbound-endpoint exchange-pattern="request-response" host="localhost" port="8089" path="sqltest" doc:name="HTTP"/>
    <logger level="INFO" doc:name="Logger" message="$$$$$$$$$$$$$ start of the flow $$$$$$$$$$$$$$"/>


            <jdbc-ee:outbound-endpoint exchange-pattern="one-way" queryKey="insertque" queryTimeout="-1" connector-ref="Database" doc:name="Database">
                <jdbc-ee:query key="insertque" value="insert into tesdb(colone,coltwo) values(123,'vikkione')"/>
            </jdbc-ee:outbound-endpoint>            




</flow>

注意:删除了架构位置

此致 维克拉姆

2 个答案:

答案 0 :(得分:0)

如果要重试数据库插入,请使用Until Successful处理器:

http://blogs.mulesoft.org/meet-until-successful-store-and-forward-for-mule/

答案 1 :(得分:0)

您必须将rollback-exception-strategy注册为默认例外策略:

<configuration defaultExceptionStrategy-ref="Rollback_Exception_Strategy" doc:name="Configuration">
    <http:config useTransportForUris="false"/>
</configuration>

或者从某个流程中添加引用:

<flow name="DataBaseAsOutBound" ...>
     <...>
     <exception-strategy ref="Rollback_Exception_Strategy" doc:name="Reference Exception Strategy"/>
</flow>

您可能会收到另一个错误Default exception strategy must not have expression attribute. It must accept any message。如果是,则删除when="#[exception.causedBy(java.lang.Exception)]"以使其成为全局异常策略。