测试通过 Mule JDBC 传输到嵌入式 HSQLDB 的插入,后续查询不返回任何结果

Posted

技术标签:

【中文标题】测试通过 Mule JDBC 传输到嵌入式 HSQLDB 的插入,后续查询不返回任何结果【英文标题】:Testing inserts over Mule JDBC transport to embedded HSQLDB, subsequent query returns no results 【发布时间】:2011-08-10 03:36:40 【问题描述】:

我的测试试图显示通过 Mule JDBC 出站端点发送的 SQL 语句成功执行。问题:在 Mule 上插入后,查询同一张表没有返回结果。

我正在使用 Spring JDBC 来测试该语句的结果。

在我的设置方法中,我使用通过 Spring JDBC 发送的 DDL 语句创建架构:

final JdbcTemplate _jdbcTemplate = new JdbcTemplate(new
SimpleDriverDataSource(new JDBCDriver(), "jdbc:hsqldb:mem:mydb"));

Mule JDBC 出站连接器也配置为指向 jdbc:hsqldb:mem:mydb

<spring:bean id="myDataSource" class="org.enhydra.jdbc.standard.StandardDataSource" destroy-method="shutdown">
    <spring:property name="driverName" value="org.hsqldb.jdbc.JDBCDriver"/>
    <spring:property name="url" value="jdbc:hsqldb:mem:mydb"/>
</spring:bean>

<jdbc:connector name="insertionConnector" dataSource-ref="myDataSource">
    <jdbc:query key="insertion"
                value="INSERT INTO mytable (TEST_KEY) VALUES (#[map-payload:_testkey])"/>
</jdbc:connector>

<custom-transformer name="objectFieldsToMap" class="com.mydomain.ObjectFieldsToMap"/>

<flow name="sendInsertion">
    <vm:inbound-endpoint address="vm://insert"/>
    <jdbc:outbound-endpoint queryKey="insertion" transformer-refs="objectFieldsToMap" connector-ref="insertionConnector"/>
</flow>

我验证了插入测试行并使用 Spring JDBC 两种方式查询它都有效。

我验证通过出站端点发送相同的插入语句会返回更新的 1 行。

 final MuleClient muleClient = MyFactory.muleClient();
 final Date date = new Date();
 final MyObject myObject = new MyObject.Builder().setTestKey("test").build();

 muleClient.dispatch("vm://insert", myObject, null);

但是,当我使用 Spring JDBC 查询同一个表时,我得到一个空结果集。

(String) _jdbcTemplate.queryForObject("SELECT TEST_KEY FROM MYDB.mytable", Class.forName("java.lang.String"));

在内部,Mule(使用 Apache DbUtils)在执行语句后提交,因此后续查询应该可以看到插入。我正在使用相同的 JdbcTemplate 对象来创建架构,然后查询结果。

帮助表示赞赏。谢谢。

【问题讨论】:

这里的问题是使用调度,并立即针对数据库测试结果。 Dispatch 是一个异步调用,后续查询的时间可能会也可能不会反映结果。我切换到使用发送,期望它会阻止。它不会阻塞。如果我在测试结果之前添加 TimeUnit.SECONDS.sleep(1),它会起作用。但我不想使用睡眠,它应该阻塞或者我应该有一些未来等待。 进一步考虑这一点,我不能用发送消息“欺骗”。这意味着是一个异步调用。插入行后,我必须添加一个监听器来触发。 【参考方案1】:

只是为了确认一下,您是否正在运行 Mule 和您的 spring bean 在同一个 JVM 中查询表?

【讨论】:

以上是关于测试通过 Mule JDBC 传输到嵌入式 HSQLDB 的插入,后续查询不返回任何结果的主要内容,如果未能解决你的问题,请参考以下文章

无法 POST 到 Mule 控制台模拟服务

Mule Anypoint Studio - 测试连接失败 - 进行连接测试时出现未知错误 - 自定义 API

如何在 Mule 中设置 ActiveMQ 消息头?

是否可以通过 Mule FTP 连接器发送 FTP SITE 命令?

Mule ESB VM和JMS组件之间的主要区别是啥

如何在 HTTP 请求中发送文件并通过 Mule 中的 FTP 将其上传到文件服务器