我在Mule 3.2.0中有两个JDBC流,一个使用MySQL数据库,另一个使用SQLServer数据库。

<mule ...
    <spring:bean id="MySQL-jdbcDataSource"
        class="org.enhydra.jdbc.standard.StandardDataSource" destroy-method="shutdown">
        <spring:property name="driverName"
            value="com.mysql.jdbc.Driver" />
        <spring:property name="url"
            value="jdbc:mysql://host:port/schema" />
    </spring:bean>

    <jdbc:connector name="MySQL-jdbcConnector"
        dataSource-ref="MySQL-jdbcDataSource" pollingFrequency="${MySQL.db.poll}"
        transactionPerMessage="false">
        <jdbc:query key="read" value="${MySQL.db.jdbc_query}" />
    </jdbc:connector>

    <flow name="MySQL-flow">

        <jdbc:inbound-endpoint queryKey="read"
            connector-ref="MySQL-jdbcConnector">
            <jdbc:transaction action="ALWAYS_BEGIN"/>
            <property key="receiveMessageInTransaction" value="true"/>
        </jdbc:inbound-endpoint>

        <vm:outbound-endpoint path="path" connector-ref="first-level">
            <message-properties-transformer scope="outbound">
                <add-message-property key="identifier" value="MySQL"/>
            </message-properties-transformer>
            <vm:transaction action="NONE"/>
        </vm:outbound-endpoint>
    </flow>
</mule>




<mule ...
    <spring:bean id="SQLServer-jdbcDataSource"
        class="org.enhydra.jdbc.standard.StandardDataSource" destroy-method="shutdown">
        <spring:property name="driverName"
            value="com.microsoft.sqlserver.jdbc.SQLServerDriver" />
        <spring:property name="url"
            value="jdbc:sqlserver://host:port;databaseName=schema" />
    </spring:bean>

    <jdbc:connector name="SQLServer-jdbcConnector"
        dataSource-ref="SQLServer-jdbcDataSource" pollingFrequency="${SQLServer.db.poll}"
    transactionPerMessage="false">
        <jdbc:query key="read" value="${SQLServer.db.jdbc_query}" />
    </jdbc:connector>

    <flow name="SQLServer-flow">
        <jdbc:inbound-endpoint queryKey="read"
        connector-ref="SQLServer-jdbcConnector">
            <jdbc:transaction action="ALWAYS_BEGIN"/>
            <property key="receiveMessageInTransaction" value="true"/>
        </jdbc:inbound-endpoint>

       <vm:outbound-endpoint path="${sv.vm.queue.name}" connector-ref="first-level-xform">
           <message-properties-transformer scope="outbound">
                <add-message-property key="${sv.vm.msg.identifier}" value="SQLServer"/>
           </message-properties-transformer>
           <vm:transaction action="NONE"/>
       </vm:outbound-endpoint>
    </flow>
</mule>


当我在mule-deploy.properties中部署这些浮点中的任何一个时,它运行正常。但是,当我同时部署这两个流时,它们都不起作用。我没有收到任何错误或异常,但似乎这些流程都没有运行。

任何想法可能有什么问题吗?可能与JDBC事务有关?

最佳答案

如果您在同一应用程序中有2个不同的流..然后删除:-

<spring:bean id="SQLServer-jdbcDataSource"
        class="org.enhydra.jdbc.standard.StandardDataSource" destroy-method="shutdown">
        <spring:property name="driverName"
            value="com.microsoft.sqlserver.jdbc.SQLServerDriver" />
        <spring:property name="url"
            value="jdbc:sqlserver://host:port;databaseName=schema" />
    </spring:bean>

    <jdbc:connector name="SQLServer-jdbcConnector"
        dataSource-ref="SQLServer-jdbcDataSource" pollingFrequency="${SQLServer.db.poll}"
    transactionPerMessage="false">
        <jdbc:query key="read" value="${SQLServer.db.jdbc_query}" />
    </jdbc:connector>


从任何流程中...既然它被声明为全局的...它可以在应用程序的任何流程中使用..我的意思是..只需从其中一个流程中删除上面的代码行。 ..由于您已经在两个流中都声明了,所以我想它是重复的,不需要在每个流中都放置...是的,只需在两个流中都提到引用connector-ref =“ SQLServer-jdbcConnector”。例如:

<jdbc:inbound-endpoint queryKey="read"
        connector-ref="SQLServer-jdbcConnector">

10-06 14:37