ApacheCamelを使用するための概念実証を構築しています。JDBCコンポーネントを使用してSybaseDBのストアドプロシージャを呼び出し、その複数の結果セットを処理するルートを構築しようとしています。
これまでのところ、Springを使用して次の構成を行っています。
<camelContext id="context">
<route>
<from uri="direct:start"/>
<bean ref="sqlStatementCreator"/>
<to uri="jdbc:dataSource?resetAutoCommit=false"/>
<bean ref="sqlResultsProcessor"/>
</route>
</camelContext>
sqlStatementCreatorは、ストアドプロシージャを実行するためのsqlステートメントを含むStringを返すメソッドが1つしかない単純なクラスです。
{call sp_name ('some arg')}
ストアドプロシージャは、必要なデータを含む2つ(またはそれ以上)の結果セットを返します。
問題は、 sqlResultsProcessorでこれらの結果セットにアクセスする方法です。
JDBCコンポーネントのドキュメントには、「結果はArrayListとしてOUT本体に返される>」と記載されています。ストアドプロシージャが1つの結果セットのみを返す場合、これは完全に機能します。ただし、複数の結果セットの場合、sqlResultsProcessorでExchangeの本体を確認すると、 nullが発生します。
- たぶん、CamelはJDBCコンポーネントを使用してOUT本体に複数の結果セットを返すことができませんか?
- 結果を処理してOUT本体に入れるDBにアクセスするためのカスタムBeanを作成する方が良いのではないでしょうか。
- それとも私は完全に何かが欠けていますか?
ApacheCamelのバージョンは2.9.2です。
例外がSybaseによってスローされたため、 resetAutoCommit=falseオプションをjdbcコンポーネントに追加する必要がありました。
com.sybase.jdbc3.jdbc.SybSQLException: Stored procedure 'sp_name' may be run only in unchained transaction mode.
また、ストアドプロシージャを変更できません。それがその通りです。