部署时Mule存储过程失败

时间:2013-10-24 13:15:50

标签: jdbc mule mule-studio

我有一个示例流程,通过在SqlServer 2008R2 express实例上调用存储过程来“选择”记录。

流程在Mule Studio中按预期工作,但当部署到Mule独立版3.4.0时,调用失败并显示错误

  

为更新生成了结果集。(SQL代码:0,SQL状态:+ null)

使用的驱动程序是Microsoft的sqljdbc4.0

有谁知道如何解决这个问题?

由于

<mule xmlns:quartz="http://www.mulesoft.org/schema/mule/quartz" xmlns:jdbc="http://www.mulesoft.org/schema/mule/jdbc" 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="CE-3.4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="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/quartz http://www.mulesoft.org/schema/mule/quartz/current/mule-quartz.xsd
http://www.mulesoft.org/schema/mule/jdbc http://www.mulesoft.org/schema/mule/jdbc/current/mule-jdbc.xsd">
    <jdbc:mssql-data-source name="MS_SQL_Data_Source" user="test" password="test" url="jdbc:sqlserver://xxx;databaseName=test" transactionIsolation="UNSPECIFIED" doc:name="MS SQL Data Source"/>
    <jdbc:connector name="JDBC"  validateConnections="true" queryTimeout="-1" pollingFrequency="0" doc:name="JDBC" transactionPerMessage="false" dataSource-ref="MS_SQL_Data_Source"/>
    <flow name="DBTestFlow1" doc:name="DBTestFlow1">
        <quartz:inbound-endpoint jobName="SQL-Purge" repeatInterval="10000" responseTimeout="10000" doc:name="Quartz">
            <quartz:event-generator-job/>
        </quartz:inbound-endpoint>
        <logger message="Starting test" level="INFO" doc:name="Logger"/>
        <jdbc:outbound-endpoint exchange-pattern="request-response" queryKey="IsOOh" queryTimeout="-1" connector-ref="JDBC" doc:name="Database">
            <jdbc:query key="IsOOh" value="CALL IsOOH(#[function:now],#[null])"/>
        </jdbc:outbound-endpoint>
        <logger message="Query Result = #[payload]" level="INFO" doc:name="Logger"/>
    </flow>
</mule>

2 个答案:

答案 0 :(得分:1)

看起来您正在使用CE JDBC传输。如果这是正确的那么那就是你的问题。

CE版本无法处理对存储过程的调用中的结果集。请参阅JDBC Transport文档[1]中的Feature表。

它在MuleStudio中工作的原因是,由于某种原因,即使选择了CE运行时,工作室似乎也使用EE JDBC传输。我已将此报告为问题[2]。

您还可以在JDBC传输代码[3]中看到,对于以CALL开头的SQL语句,将导致QueryRunner的更新。

您应该可以通过定义自己的Sqlstatementstrategyfactory [4]来覆盖它。

[1] http://www.mulesoft.org/documentation/display/current/JDBC+Transport+Reference
[2] https://www.mulesoft.org/jira/browse/STUDIO-3817
[3] https://github.com/mulesoft/mule/blob/mule-3.x/transports/jdbc/src/main/java/org/mule/transport/jdbc/sqlstrategy/DefaultSqlStatementStrategyFactory.java
[4] http://www.mulesoft.org/documentation/display/current/JDBC+Transport+Configuration+Reference

// Pontus

答案 1 :(得分:0)

M<log V

过程调用的示例语法