0

私のテストでは、Mule JDBC アウトバウンド エンドポイントを介して送信された SQL ステートメントが正常に実行されることを示します。問題: Mule に挿入した後、同じテーブルをクエリしても結果が返されません。

Spring JDBC を使用して、そのステートメントの結果をテストしています。

私の setup メソッドでは、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 オブジェクトを使用して、結果を照会しています。

助けていただければ幸いです。ありがとうございました。

4

1 に答える 1

0

Mule と Spring Bean を実行して同じ JVM でテーブルをクエリしていますか?

于 2012-02-16T18:54:40.767 に答える