apache-camel - Apache Camel SQL 组件未关闭结果集?

标签 apache-camel

我正在使用 Camel sql 组件对 Oracle DB 运行选择查询。 war 文件部署在 Jboss EAP 6.1 上。在配置下的配置文件中,我将 track-statements 设置为 true (即 true)。因此,当连接返回到池中时,Jboss 会检查结果集是否已关闭。

我配置sql组件如下:

//datasource is injected here
@Resource(mappedName = "java:/jdbc/OracleDS")
private DataSource dataSource;

... ...

//SQL component
SqlComponent sqlComponent = new SqlComponent();
sqlComponent.setDataSource(dataSource);
camelCtx.addComponent("sql", sqlComponent);

sql 组件在收件人列表中使用如下:

from("activemq:"+queue)
...
.recipientList(simple(getFromConfig(sqlStmtName)),"false")
..

sql语句没什么特别的。只是来自单个表的常规选择语句。

在 Jboss 日志中我看到此警告。

2015-04-16 16:23:07,169 WARN     [org.jboss.jca.adapters.jdbc.WrappedConnection] (ajp-8009-2|R:r2K4crKLnPRT-0br|ctvc|1.0) Closing a result set you left open! Please close it yourself.: java.lang.Throwable: STACKTRACE
at org.jboss.jca.adapters.jdbc.WrappedStatement.registerResultSet(WrappedStatement.java:1357)
at org.jboss.jca.adapters.jdbc.WrappedStatement.getResultSet(WrappedStatement.java:740)
at org.apache.camel.component.sql.SqlProducer$2.doInPreparedStatement(SqlProducer.java:127)
at org.apache.camel.component.sql.SqlProducer$2.doInPreparedStatement(SqlProducer.java:90)
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:589)
at org.apache.camel.component.sql.SqlProducer.process(SqlProducer.java:90)
at org.apache.camel.util.AsyncProcessorConverterHelper$ProcessorToAsyncProcessorBridge.process(AsyncProcessorConverterHelper.java:61)
at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:191)
at org.apache.camel.processor.MulticastProcessor.doProcessSequential(MulticastProcessor.java:573)
at org.apache.camel.processor.MulticastProcessor.doProcessSequential(MulticastProcessor.java:506)
at org.apache.camel.processor.MulticastProcessor.process(MulticastProcessor.java:215)
at org.apache.camel.processor.RecipientList.sendToRecipientList(RecipientList.java:167)
at org.apache.camel.processor.RecipientList.process(RecipientList.java:120)
at org.apache.camel.processor.Pipeline.process(Pipeline.java:118)
at org.apache.camel.processor.Pipeline.process(Pipeline.java:80)
at org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:72)
at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:398)
at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:191)
at org.apache.camel.processor.Pipeline.process(Pipeline.java:118)
at org.apache.camel.processor.Pipeline.process(Pipeline.java:80)
...
...

我检查了 SqlProducer.java(第 127 行)。由于 sql 组件使用 Spring JDBCtemplate,我假设结果集将由模板关闭。

我需要做什么才能关闭结果集吗?

最佳答案

是的,这是 Apache Camel 中的一个错误。我已经记录了一个票证,以便在未来的版本中修复此问题

关于apache-camel - Apache Camel SQL 组件未关闭结果集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29933629/

相关文章:

java - 使用 Apache Camel 的 JMS/JNP 连接

apache-camel - 如何使用 apache Camel 轮询数据库

java - Camel Kafka 2.14.3版本无法读取消息

java - 使用camel创建数据源时找不到包

java - Apache Camel Rest 对第一个请求的响应时间较长

java - Apache Camel 多播 FreeMarker

java - 在 Quartz 和 Apache Camel 中使用计时器

java - 我们可以在 apache Camel 中将 jmsxgroupid 与线程一起使用来解决线程 dsl 标记中的排序问题吗

java - apache-camel uri 中的简单表达式

java - 从 Apache Camel 中的 JSON 主体访问数据