麻烦在Mule JDBC流程中使用两个不同的数据库

时间:2014-04-10 03:40:37

标签: mysql sql-server jdbc mule

我在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事务有关吗?

1 个答案:

答案 0 :(得分:0)

如果您在同一个应用程序中有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”< / strong>在两个骡子流中...... ex: -

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