Mule ESB Apache ActiveMQ XA事务

时间:2013-07-05 05:34:46

标签: transactions activemq mule xa

我正在开发一个以XML作为输入然后使用XSD验证它的应用程序,如果该文件有效,它将被移动到“File_IN_Queue”

第二个流程是从“File_IN_Queue”获取文件并执行一些db记录处理,然后将所有文件再次移动到“File_OUT_Queue”。

第三个流程是从“File_OUT_Queue”获取文件并使用文件出站将其放入某个文件夹

现在我要实现的是,如果任何此流程失败,文件仍应保持在队列中,如果第二个流程失败,则文件应保留在“File_IN_Queue”中,如果第三个流程失败,则文件应保留在“File_OUT_Queue”中

我正在使用XA事务bcoz在第二个流程中处理文件时有许多其他队列进入图片,如电子邮件队列异常队列n所有

那么,我该怎么办?我应该如何实施?

现在,在第二个流程中,我已经在file_IN_Queue中将xa事务设置为“Always begin”,这是第二个流程的起点,在第三个流程中,再次在File_OUT_Queue中将“Always Begin”设置为。并且处理中进入图片的所有队列都设置为“始终加入”


xml config

<?xml version="1.0" encoding="UTF-8"?>
<mule xmlns:jms="http://www.mulesoft.org/schema/mule/jms"
    xmlns:smtp="http://www.mulesoft.org/schema/mule/smtp" xmlns:smtps="http://www.mulesoft.org/schema/mule/smtps"
    xmlns:scripting="http://www.mulesoft.org/schema/mule/scripting"
    xmlns:mulexml="http://www.mulesoft.org/schema/mule/xml" xmlns:context="http://www.springframework.org/schema/context"
    xmlns:http="http://www.mulesoft.org/schema/mule/http" xmlns:file="http://www.mulesoft.org/schema/mule/file"
    xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:doc="http://www.mulesoft.org/schema/mule/documentation"
    xmlns:spring="http://www.springframework.org/schema/beans" version="EE-3.3.2"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jbossts="http://www.mulesoft.org/schema/mule/jbossts"
    xsi:schemaLocation="
http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd 
http://www.mulesoft.org/schema/mule/xml http://www.mulesoft.org/schema/mule/xml/current/mule-xml.xsd 
http://www.mulesoft.org/schema/mule/file http://www.mulesoft.org/schema/mule/file/current/mule-file.xsd 
http://www.mulesoft.org/schema/mule/jms http://www.mulesoft.org/schema/mule/jms/current/mule-jms.xsd 
http://www.mulesoft.org/schema/mule/smtps http://www.mulesoft.org/schema/mule/smtps/current/mule-smtps.xsd 
http://www.mulesoft.org/schema/mule/smtp http://www.mulesoft.org/schema/mule/smtp/current/mule-smtp.xsd 
http://www.mulesoft.org/schema/mule/scripting http://www.mulesoft.org/schema/mule/scripting/current/mule-scripting.xsd 
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-current.xsd 
http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd
http://www.mulesoft.org/schema/mule/jbossts http://www.mulesoft.org/schema/mule/jbossts/current/mule-jbossts.xsd">

    <spring:beans>
        <!-- All database access object Beans -->
        <spring:bean id="springApplicationContext" name="springApplicationContext"
            class="com.util.SpringApplicationContext" />
        <spring:bean id="checkPointDAO" name="checkPointDAO"
            class="com.dao.impl.CheckPointDAO"
            scope="prototype" />
        <spring:bean id="buyerDAO" name="buyerDAO"
            class="com.dao.impl.BuyerDAO" />
        <spring:bean id="supplierDAO" name="supplierDAO"
            class="com.dao.impl.SupplierDAO" />
        <spring:bean id="locationDAO" name="locationDAO"
            class="com.dao.impl.LocationDAO" />
        <spring:bean id="shipToDetailDAO" name="shipToDetailDAO"
            class="com.dao.impl.ShipToDetailDAO" />
        <spring:bean id="contactDAO" name="contactDAO"
            class="com.dao.impl.ContactDAO" />
        <spring:bean id="exceptionDAO" name="exceptionDAO"
            class="com.dao.impl.ExceptionDAO" />
        <spring:bean id="messageDAO" name="messageDAO"
            class="com.dao.impl.MessageDAO" />
        <spring:bean id="addressDAO" name="addressDAO"
            class="com.dao.impl.AddressDAO" />
        <spring:bean id="xmlDAO" name="xmlDAO"
            class="com.dao.impl.XmlDAO" />
        <!-- All database access object Beans -->
        <!-- Spring ORM hibernate sessionFactory Bean -->
        <spring:bean id="sessionFactory"
            class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
            <spring:property name="packagesToScan" value="${hibernate.packagesToScan}" />
            <spring:property name="eventListeners">
                <spring:map>
                    <spring:entry key="pre-insert">
                        <spring:bean
                            class="com.listener.PreInsertOrUpdateEventListener"
                            id="preInsertOrUpdateEventListener" />
                    </spring:entry>
                    <spring:entry key="pre-update">
                        <spring:bean
                            class="com.listener.PreInsertOrUpdateEventListener"
                            id="preInsertOrUpdateEventListener" />
                    </spring:entry>
                </spring:map>
            </spring:property>
            <spring:property name="hibernateProperties">
                <spring:props>
                    <spring:prop key="hibernate.connection.driver_class">${db.driverClassName}</spring:prop>
                    <spring:prop key="hibernate.connection.url">${db.url}</spring:prop>
                    <spring:prop key="hibernate.connection.username">${db.username}</spring:prop>
                    <spring:prop key="hibernate.connection.password">${db.password}</spring:prop>
                    <spring:prop key="hibernate.dialect">${hibernate.dialect}</spring:prop>
                    <spring:prop key="hibernate.show_sql">${hibernate.show_sql}</spring:prop>
                    <!-- <spring:prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto} 
                        </spring:prop> -->
                    <spring:prop key="hibernate.temp.use_jdbc_metadata_defaults">${hibernate.temp.use_jdbc_metadata_defaults}
                    </spring:prop>
                    <spring:prop key="hibernate.connection.provider_class">
                        ${hibernate.connection.provider_class}
                    </spring:prop>
                    <spring:prop key="hibernate.dbcp.initialSize">${hibernate.dbcp.initialSize}
                    </spring:prop>
                    <spring:prop key="hibernate.dbcp.maxActive">${hibernate.dbcp.maxActive}
                    </spring:prop>
                    <spring:prop key="hibernate.dbcp.maxIdle">${hibernate.dbcp.maxIdle}
                    </spring:prop>
                    <spring:prop key="hibernate.dbcp.minIdle">${hibernate.dbcp.minIdle}
                    </spring:prop>
                </spring:props>
            </spring:property>
        </spring:bean>
        <spring:bean id="propertyFileReader" name="propertyFileReader"
            class="com.util.PropertyFileReader"
            init-method="init" />
        <spring:bean id="rboConfig" name="rboConfig"
            class="com.rbo.bean.RboConfiguration">
            <spring:property name="url" value="${url}"></spring:property>
            <spring:property name="account" value="${account}"></spring:property>
            <spring:property name="userId" value="${userId}"></spring:property>
            <spring:property name="password" value="${password}"></spring:property>
        </spring:bean>
        <spring:bean id="rboBaseDAO" name="rboBaseDAO"
            class="com.rbo.dao.RboBaseDAO">
            <spring:property name="rboConfig" ref="rboConfig" />
        </spring:bean>
        <spring:bean id="rsInfoDAO" name="rsInfoDAO"
            parent="rboBaseDAO" class="com.rbo.dao.RSDAO">
        </spring:bean>
        <spring:bean id="rsPartInfoDAO" name="rsPartInfoDAO"
            parent="rboBaseDAO"
            class="com.rbo.dao.RSPartInfoDAO">
        </spring:bean>
        <spring:bean id="symphonyInfoResourceComponent" name="symphonyInfoResourceComponent"
            class="com.rbo.component.SymphonyInfoResourceComponent">
            <spring:property name="dao" ref="rsInfoDAO" />
        </spring:bean>
        <spring:bean id="orderSplittingComponent" name="orderSplittingComponent"
            class="com.component.OrderSplittingComponent">
        </spring:bean>
        <spring:bean id="symphonyPartInfoComponent" name="symphonyPartInfoComponent"
            class="com.rbo.component.SymphonyPartInfoComponent">
            <spring:property name="rsPartInfoDAO" ref="rsPartInfoDAO" />
        </spring:bean>
        <spring:bean id="redeliveryPolicy" class="org.apache.activemq.RedeliveryPolicy">
            <spring:property name="maximumRedeliveries"
                value="${jms.connector.redeliverypolicy.maximumredeliveries}" />
            <spring:property name="initialRedeliveryDelay"
                value="${jms.connector.redeliverypolicy.initialredeliverydelay}" />
            <spring:property name="redeliveryDelay"
                value="${jms.connector.redeliverypolicy.redeliverydelay}" />
        </spring:bean>
        <spring:bean id="amqFactory"
            class="org.apache.activemq.ActiveMQXAConnectionFactory">
            <spring:property name="redeliveryPolicy" ref="redeliveryPolicy">
            </spring:property>
        </spring:bean></spring:beans>
        <choice-exception-strategy name="Choice_Exception_Strategy">
        <catch-exception-strategy
            when="#[exception.causedBy(${symphony.exception.strategy.class})]"
            doc:name="Catch Exception Strategy">
            <logger message="byte to object conersion #[message:payload]"
                level="INFO" doc:name="Logger" />
            <set-variable variableName="transactionCommand"
                value="#[com.util.TransactionType.ROLLBACK]"
                doc:name=" set transaction command" />
            <component
                class="com.component.TransactionComponent"
                doc:name="Rollback transaction" />
            <custom-transformer
                class="com.transformer.FileNameTransformer"
                doc:name="File Name Transformer" />
            <component
                class="com.component.ExceptionGeneratorComponent"
                doc:name="Exception Generator Component" />
            <set-payload value="#[sessionVars['originalXML']]"
                doc:name="Set Payload" />
            <choice doc:name="Choice">
                <when expression="sessionVars['fileNamePrefix'] == '1$#^'">
                    <processor-chain>
                        <logger message="firstcondition executed" level="INFO"
                            doc:name="Logger" />
                        <jms:outbound-endpoint queue="exception_queue"
                            connector-ref="Exception-Email-Processing-JMS-Outbound-connector"
                            doc:name="JMS">
                        </jms:outbound-endpoint>
                    </processor-chain>
                </when>
                <when expression="sessionVars['fileNamePrefix'] == '2$#^'">
                    <processor-chain>
                        <logger message="secondcondition executed" level="INFO"
                            doc:name="Logger" />
                        <jms:outbound-endpoint queue="exception_queue"
                            connector-ref="Exception-Email-Processing-JMS-Outbound-connector"
                            doc:name="JMS">
                        </jms:outbound-endpoint>
                    </processor-chain>
                </when>
                <otherwise>
                    <processor-chain>
                        <logger message="otherwisecondition executed" level="INFO"
                            doc:name="Logger" />
                        <set-variable variableName="actionCommand"
                            value="#[com.util.SympEnum.PROCESSED_XML]"
                            doc:name=" set transaction command" />
                        <component
                            class="com.component.XmlLoggingComponent"
                            doc:name="Java" />
                        <jms:outbound-endpoint queue="file_out_queue"
                            connector-ref="File-Processing-JMS-Outbound-connector" doc:name="JMS">
                        </jms:outbound-endpoint>
                        <jms:outbound-endpoint queue="email_queue"
                            connector-ref="Exception-Email-Processing-JMS-Outbound-connector"
                            doc:name="JMS">
                        </jms:outbound-endpoint>
                    </processor-chain>
                </otherwise>
            </choice>
            <component
                class="com.component.ExceptionLoggingComponent"
                doc:name="Exception Logging Component" />
        </catch-exception-strategy>
        <catch-exception-strategy
            when="#[exception.causedBy(${symphony.exception.strategy.class.throwable})]">
            <logger message="invalid condition executed" level="INFO"
                doc:name="Logger" />
            <set-variable variableName="actionCommand"
                value="#[com.util.SympEnum.VALID_XML]"
                doc:name=" set transaction command" />
            <component
                class="com.component.XmlLoggingComponent"
                doc:name="Java" />
            <choice doc:name="Choice">
                <when expression="sessionVars['isValid'] == true">
                    <processor-chain>
                        <!--processing-->
                    </processor-chain>
                </when>
                <otherwise>
                    <processor-chain>
                        <logger level="INFO"
                            message="XML is not Validate in XSD Validater The Control is in Exception Strategy Othere Wish part Of XSLT Applicablity "
                            doc:name="Logger" />
                    </processor-chain>
                </otherwise>
            </choice>
            <jms:outbound-endpoint queue="file_out_queue"
                connector-ref="File-Processing-JMS-Outbound-connector" doc:name="JMS">
            </jms:outbound-endpoint>
            <component
                class="com.component.ExceptionGeneratorComponent"
                doc:name="Exception Generator Component" />
            <jms:outbound-endpoint queue="email_queue"
                connector-ref="Exception-Email-Processing-JMS-Outbound-connector"
                doc:name="JMS">
            </jms:outbound-endpoint>
            <logger message="Error Occured in File Named : #[header:originalFilename]"
                level="ERROR" doc:name="Logger" />
            <scripting:transformer doc:name="Add no availability error">
                <scripting:script engine="Groovy">
                    <scripting:text><![CDATA[org.apache.log4j.Logger.getLogger("").error("Error Trace is : \n",exception)]]></scripting:text>
                </scripting:script>
            </scripting:transformer>
        </catch-exception-strategy>
    </choice-exception-strategy>
    <!-- Globle Choice Exception Strategy -->
    <!-- Globle File Endpoints -->
    <!--Http Connector Reference For Exclude Session Params Form Http call -->
    <http:connector name="NoSessionConnector" doc:name="HTTP\HTTPS">
        <service-overrides sessionHandler="org.mule.session.NullSessionHandler" />
    </http:connector>
    <jms:activemq-xa-connector name="File-Processing-JMS-Outbound-connector"
        brokerURL="${jms.connector.brokerurl}" validateConnections="${jms.connector.validateconnections}"
        doc:name="Active MQ" persistentDelivery="${jms.connector.persistentdelivery}"
        connectionFactory-ref="amqFactory" maxRedelivery="-1">
        <dispatcher-threading-profile
            maxThreadsActive="${file.processing.jms.connector.maxactivethreads}"
            maxBufferSize="${file.processing.jms.connector.maxbuffersize}"
            poolExhaustedAction="WAIT" />
        <reconnect-forever frequency="${jms.connector.reconnect.forever.frequency}"></reconnect-forever>
    </jms:activemq-xa-connector>
    <jms:activemq-xa-connector name="File-Processing-JMS-Inbound-connector"
        brokerURL="${jms.connector.brokerurl}" validateConnections="${jms.connector.validateconnections}"
        doc:name="Active MQ" persistentDelivery="${jms.connector.persistentdelivery}"
        connectionFactory-ref="amqFactory" maxRedelivery="-1">
        <receiver-threading-profile doThreading="true"
            maxThreadsActive="${file.processing.jms.connector.maxactivethreads}"
            maxBufferSize="${file.processing.jms.connector.maxbuffersize}"
            poolExhaustedAction="WAIT" />
        <reconnect-forever frequency="${jms.connector.reconnect.forever.frequency}"></reconnect-forever>
    </jms:activemq-xa-connector>
    <jms:activemq-xa-connector
        name="Exception-Email-Processing-JMS-Outbound-connector" brokerURL="${jms.connector.brokerurl}"
        validateConnections="${jms.connector.validateconnections}" doc:name="Active MQ"
        persistentDelivery="${jms.connector.persistentdelivery}"
        connectionFactory-ref="amqFactory" maxRedelivery="-1">
        <dispatcher-threading-profile
            maxThreadsActive="${exception.email.processing.jms.connector.maxactivethreads}"
            maxBufferSize="${file.processing.jms.connector.maxbuffersize}"
            poolExhaustedAction="WAIT" />
        <reconnect-forever frequency="${jms.connector.reconnect.forever.frequency}"></reconnect-forever>
    </jms:activemq-xa-connector>
    <jms:activemq-xa-connector
        name="Exception-Email-Processing-JMS-Inbound-connector" brokerURL="${jms.connector.brokerurl}"
        validateConnections="${jms.connector.validateconnections}" doc:name="Active MQ"
        persistentDelivery="${jms.connector.persistentdelivery}"
        connectionFactory-ref="amqFactory" maxRedelivery="-1">
        <receiver-threading-profile doThreading="true"
            maxThreadsActive="${exception.email.processing.jms.connector.maxactivethreads}"
            maxBufferSize="${file.processing.jms.connector.maxbuffersize}"
            poolExhaustedAction="WAIT" />
        <reconnect-forever frequency="${jms.connector.reconnect.forever.frequency}"></reconnect-forever>
    </jms:activemq-xa-connector>
    <!--Http Connector Reference For Exclude Session Params Form Http call -->
    <file:connector name="inputFileConnector" doc:name="File">
        <service-overrides
            messageReceiver="com.util.InputFileMessageReceiver" />
    </file:connector>
    <jbossts:transaction-manager />
    <flow name="input_file_to_mule_in_jms" doc:name="input_file_to_mule_in_jms"
        processingStrategy="synchronous">
        <file:inbound-endpoint path="${symphony.order.input.directory}"
            comparator="${symphony.file.comparator}" moveToDirectory="${symphony.order.processed.directory}"
            fileAge="${symphony.file.age}" doc:name="File" connector-ref="inputFileConnector"
            pollingFrequency="${symphony.inbox.file.polling.frequency}">
            <!--<xa-transaction action="ALWAYS_BEGIN"/> -->
        </file:inbound-endpoint>
        <byte-array-to-object-transformer
            doc:name="Byte Array to Object" />
        <set-session-variable value="#[header:INBOUND:originalFilename]"
            variableName="orderFileName" doc:name="set original file name" />
        <logger message="original file name is : #[sessionVars['orderFileName']]"
            level="INFO" doc:name="Logger" />
        <set-session-variable variableName="originalXML"
            value="#[message:payload]" doc:name="Original XML Order" />
        <set-variable variableName="actionCommand"
            value="#[com.util.SympEnum.NEW_XML]"
            doc:name=" set transaction command" />
        <component
            class="com.component.XmlLoggingComponent"
            doc:name="Xml Logging Component" />
        <component
            class="com.component.XMLSchemaValidator"
            doc:name="XML Schema Validator" />
        <jms:outbound-endpoint queue="file_in_queue"
            connector-ref="File-Processing-JMS-Outbound-connector" doc:name="JMS">
            <!--<xa-transaction action="ALWAYS_JOIN"/> -->
        </jms:outbound-endpoint>
        <exception-strategy ref="Choice_Exception_Strategy"
            doc:name="Reference Exception Strategy" />
    </flow>
    <flow name="improved-project" doc:name="improved-project"
        processingStrategy="synchronous">
        <composite-source doc:name="Composite Source">
            <jms:inbound-endpoint queue="file_in_queue"
                connector-ref="File-Processing-JMS-Inbound-connector" doc:name="JMS">
                <xa-transaction action="ALWAYS_BEGIN" />
            </jms:inbound-endpoint>
            <jms:inbound-endpoint queue="exception_queue"
                connector-ref="Exception-Email-Processing-JMS-Inbound-connector"
                doc:name="JMS">
                <xa-transaction action="ALWAYS_BEGIN" />
                <!--<xa-transaction action="ALWAYS_BEGIN" timeout="35000"/> -->
            </jms:inbound-endpoint>
        </composite-source>
        <logger message="original file name is : #[sessionVars['orderFileName']]"
            level="INFO" doc:name="Logger" />
        <!-- <set-session-variable variableName="originalXML" value="#[message:payload]" 
            doc:name="Original XML Order" /> -->

        <custom-transformer
            class="com.transformer.XmlToObjectTransformer"
            doc:name="xml to object" />
        <logger level="INFO"
            message="/Message/MessageInfo/MessageSender ID : #[sessionVars['messageObject'].getMessageInfo().getMessageSender()]"
            doc:name="Logger" />
        <set-session-variable value="#[message:payload]"
            variableName="orderPayload" doc:name="Session Variable" />
        <set-session-variable variableName="symphHttpEnableDisable"
            value="#[${project.http.call.enable}]" doc:name="Http Enable / Disable" />
        <choice doc:name="Choice">
            <when expression="sessionVars['symphHttpEnableDisable'] == true">
                <processor-chain>
                    <set-session-variable variableName="condition"
                        value="sessionVars['symphHttpEnableDisable'] == true" doc:name="http Call Enable Disable Condition" />
                    <set-session-variable variableName="result"
                        value="true" doc:name="http Call Enable Disable Result" />
                    <component
                        class="com.component.CheckPointLoggingComponent"
                        doc:description="check point logging" doc:name="check point logging" />
                    <remove-session-variable variableName="condition"
                        doc:name="Remove Session Variable" />
                    <remove-session-variable variableName="result"
                        doc:name="Remove Session Variable" />
                    <http:outbound-endpoint exchange-pattern="request-response"
                        host="${project.http.call.host}" port="${project.http.call.port}"
                        path="${project.http.call.path}=#[sessionVars['messageObject'].getMessageInfo().getMessageSender()]"
                        method="GET" doc:name="HTTP" connector-ref="NoSessionConnector" />
                    <byte-array-to-object-transformer
                        doc:name="Byte Array to Object" />
                    <logger message="After Http Call : #[message:payload]"
                        level="INFO" doc:name="Logger" />
                    <set-session-variable variableName="isPilotCustomer"
                        value="#[xpath:${project.http.call.tradingpartner.status.xpath}]"
                        doc:name="Pilot Customer Status" />
                    <logger
                        message="XML Response Xpath Value : #[sessionVars['isPilotCustomer']]"
                        level="INFO" doc:name="Logger" />
                    <choice doc:name="Choice">
                        <when expression="sessionVars['isPilotCustomer'] == true">
                            <processor-chain>
                                <logger level="INFO" doc:name="Logger"
                                    message="isPilotCustomer check Point pass" />
                                <set-session-variable variableName="condition"
                                    value="sessionVars['isPilotCustomer'] == true" doc:name="http Call Condition" />
                                <set-session-variable variableName="result"
                                    value="true" doc:name="http Call Result" />
                                <component
                                    class="com.component.CheckPointLoggingComponent"
                                    doc:description="check point logging" doc:name="check point logging" />
                                <remove-session-variable variableName="condition"
                                    doc:name="Remove Session Variable" />
                                <remove-session-variable variableName="result"
                                    doc:name="Remove Session Variable" />
                                <flow-ref name="bussnesslogic-project" doc:name="bussnesslogic-project" />
                            </processor-chain>
                        </when>
                        <otherwise>
                            <processor-chain>
                                <set-session-variable variableName="condition"
                                    value="sessionVars['isPilotCustomer'] == true" doc:name="http Call Condition" />
                                <set-session-variable variableName="result"
                                    value="false" doc:name="http Call Result" />
                                <component
                                    class="com.component.CheckPointLoggingComponent"
                                    doc:description="check point logging" doc:name="check point logging" />
                                <remove-session-variable variableName="condition"
                                    doc:name="Remove Session Variable" />
                                <remove-session-variable variableName="result"
                                    doc:name="Remove Session Variable" />
                                <custom-transformer
                                    class="com.transformer.ObjectToXmlTransformer"
                                    doc:name="Object To Xml" />

                                <jms:outbound-endpoint queue="file_out_queue"
                                    connector-ref="File-Processing-JMS-Outbound-connector"
                                    doc:name="JMS">
                                </jms:outbound-endpoint>
                            </processor-chain>
                        </otherwise>
                    </choice>
                </processor-chain>
            </when>
            <otherwise>
                <processor-chain>
                    <logger level="INFO" message="WithOut Http Call Flow Is ...."
                        doc:name="Logger" />
                    <set-session-variable variableName="condition"
                        value="sessionVars['symphHttpEnableDisable'] == true" doc:name="http Call Enable Disable Condition" />
                    <set-session-variable variableName="result"
                        value="false" doc:name="http Call Enable Disable Result" />
                    <component
                        class="com.component.CheckPointLoggingComponent"
                        doc:description="check point logging" doc:name="check point logging" />
                    <remove-session-variable variableName="condition"
                        doc:name="Remove Session Variable" />
                    <remove-session-variable variableName="result"
                        doc:name="Remove Session Variable" />
                    <flow-ref name="bussnesslogic-project" doc:name="bussnesslogic-project" />
                </processor-chain>
            </otherwise>
        </choice>
        <exception-strategy ref="Choice_Exception_Strategy"
            doc:name="Reference Exception Strategy" />
    </flow>
    <sub-flow name="bussnesslogic-project" doc:name="bussnesslogic-project">
        <set-payload value="#[sessionVars['orderPayload']]"
            doc:name="Set Payload" />
        <logger level="INFO" doc:name="Logger"
            message="new message payload: #[message:payload]" />
        <logger level="INFO" doc:name="Logger"
            message="After Set Session Var Object in Payload The PayLoad Value Is : #[message:payload]" />
        <component doc:name="RBO project Info Component">
            <spring-object bean="projectInfoResourceComponent"></spring-object>
        </component>
        <logger level="INFO" doc:name="Logger"
            message="After Splitting order The PayLoad Value Is : #[message:payload]" />
        <component doc:name="RBO project Part Info Component">
            <spring-object bean="projectPartInfoComponent"></spring-object>
        </component>
        <logger level="INFO" doc:name="Logger"
            message="After doing DropShip or Available Stock Check, The PayLoad Value Is : #[message:payload]" />
        <component
            class="com.component.CheckPointLoggingComponent"
            doc:description="Check point logging" doc:name="check point logging" />
        <component
            doc:name="Order Splitting Component After DropShip and Available Stock Check">
            <spring-object bean="orderSplittingComponent"></spring-object>
        </component>
        <logger level="INFO" doc:name="Logger"
            message="After Splitting order at last The PayLoad Value Is : #[message:payload]" />
        <set-variable variableName="transactionCommand"
            value="#[com.util.TransactionType.BEGIN]"
            doc:name=" set transaction command" />
        <component
            class="com.component.TransactionComponent"
            doc:name="Begin transaction" />
        <component
            class="com.component.MessageLoggingComponent"
            doc:name="order logging" />
        <custom-transformer
            class="com.transformer.ObjectToXmlTransformer"
            doc:name="Object To Xml Transformer" />
        <jms:outbound-endpoint queue="file_out_queue"
            connector-ref="File-Processing-JMS-Outbound-connector" doc:name="JMS">
            <xa-transaction action="ALWAYS_JOIN" timeout="35000" />
        </jms:outbound-endpoint>
        <set-variable variableName="transactionCommand"
            value="#[com.util.TransactionType.COMMIT]"
            doc:name=" set transaction command" />
        <component
            class="com.component.TransactionComponent"
            doc:name="Commit transaction" />
    </sub-flow>
    <flow name="mule_out_jms_to_output_file" doc:name="mule_out_jms_to_output_file"
        processingStrategy="synchronous">
        <jms:inbound-endpoint queue="file_out_queue"
            connector-ref="File-Processing-JMS-Inbound-connector" doc:name="JMS">
            <xa-transaction action="ALWAYS_BEGIN"/> 
        </jms:inbound-endpoint>
        <logger level="INFO" message="activemq_to_fileFlow1 : #[message:payload]"
            doc:name="Logger" />
        <file:outbound-endpoint path="${project.order.output.directory}"
            outputPattern="#[header:SESSION:orderFileName]" responseTimeout="10000"
            doc:name="File" />
        <set-variable variableName="actionCommand"
            value="#[com.util.SympEnum.OUT_XML]"
            doc:name=" set transaction command" />
        <component
            class="com.component.XmlLoggingComponent"
            doc:name="Java" />
        <exception-strategy ref="Choice_Exception_Strategy"
            doc:name="Reference
        Exception Strategy" />
    </flow>

</mule>

这是我目前的配置。当我停止mule应用程序并再次启动它工作正常它从队列中获取待处理的消息并正确处理它但当我关闭ActiveMQ代理并再次启动它时它无法正常工作,在这种情况下我必须重新启动我的应用程序也仍然没有处理所有文件。

0 个答案:

没有答案