我正在构建使用 Apache Camel 的概念证明。我正在尝试构建一个路由,该路由将使用 JDBC 组件调用 Sybase DB 上的存储过程,然后处理其多个结果集。
到目前为止,我使用 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 语句的字符串:
{call sp_name ('some arg')}
存储过程返回 2 个(或更多)结果集以及我需要的数据。
问题是如何访问sqlResultsProcessor中的那些结果集?
JDBC 组件的文档声明“结果在 OUT 主体中作为 ArrayList> 返回”。如果存储过程只返回一个结果集,那将非常有效。但是,当我在sqlResultsProcessor中检查 Exchange 的主体时,如果有多个结果集,我有null。
- 也许骆驼不能在带有 JDBC 组件的 OUT 正文中返回多个结果集?
- 也许最好编写一个自定义 bean 来访问将处理结果并将它们放入 OUT 主体的数据库?
- 或者,也许我完全错过了什么?
Apache Camel 版本是 2.9.2。
我必须在 jdbc 组件中添加resetAutoCommit=false选项,否则 Sybase 会抛出异常:
com.sybase.jdbc3.jdbc.SybSQLException: Stored procedure 'sp_name' may be run only in unchained transaction mode.
而且我无法更改存储过程。它就是这样。