[
https://issues.apache.org/jira/browse/CAMEL-14299?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17002000#comment-17002000
]
Jan Bednar edited comment on CAMEL-14299 at 12/22/19 10:16 PM:
---------------------------------------------------------------
I can reproduce this with your code. The datasource is auto configured with
spring boot. During this initialization there are some calls to openConnection,
which causes HikariConfig to seal. Then comes in place Camel Introspection
trying to set DataSource to HikariConfig object, which is already sealed and
cannot be modified (fails with exception *{{The configuration of the pool is
sealed once started. Use HikariConfigMXBean for runtime changes.}}*).
Until we find solution, you can use one of these workarounds:
Replace *toD* with *to* and *CamelSqlQuery* header
{code:java}
.setHeader("insertSql", constant("insert into tmp (col1, col2) values
(:?val1, :?val2)")) //Notice ? instead of #
.setHeader("CamelSqlQuery", header("insertSql"))
.to("sql:insert?dataSource=#dataSource")
{code}
OR downgrade hikari in your pom to lower version , where sealing mechanism was
not implemented
{code:java}
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
<version>2.7.4</version>
</dependency>
{code}
was (Author: bedla):
I can reproduce this with your code. The datasource is auto configured with
spring boot. During this initialization there are some calls to openConnection,
which causes HikariConfig to seal. Then comes in place Camel Introspection
trying to set DataSource to HikariConfig object, which is already sealed and
cannot be modified.
Until we find solution, you can use one of these workarounds:
Replace *toD* with *to* and *CamelSqlQuery* header
{code:java}
.setHeader("insertSql", constant("insert into tmp (col1, col2) values
(:?val1, :?val2)")) //Notice ? instead of #
.setHeader("CamelSqlQuery", header("insertSql"))
.to("sql:insert?dataSource=#dataSource")
{code}
OR downgrade hikari in your pom to lower version , where sealing mechanism was
not implemented
{code:java}
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
<version>2.7.4</version>
</dependency>
{code}
> camel-sql - Dynamic producer (toD) problem
> ------------------------------------------
>
> Key: CAMEL-14299
> URL: https://issues.apache.org/jira/browse/CAMEL-14299
> Project: Camel
> Issue Type: Bug
> Components: camel-sql
> Affects Versions: 3.0.0
> Reporter: Gurpal2000
> Priority: Minor
> Fix For: 3.0.1, 3.1.0
>
> Attachments: log.txt
>
>
> Spring Boot: 2.2.1
> Camel: 3.0.0
> *Works* using "to()"
>
> {code:java}
> from("file://d:/tmp/?fileName=test&noop=true")
> .setHeader("val1", constant(1))
> .setHeader("val2", constant("yo"))
> .to("sql:insert into gbtemp (col1, col2) values (:#val1,
> :#val2)?dataSource=#dataSource");
> {code}
> Does *not work* using ".toD()"
> {code:java}
> from("file://d:/tmp/?fileName=test&noop=true")
> .setHeader("val1", constant(1))
> .setHeader("val2", constant("yo"))
> .setHeader("insertSql", constant("insert into gbtemp (col1, col2) values
> (:#val1, :#val2)"))
> .toD("sql:${header.insertSql}?dataSource=#dataSource");
> {code}
> This used to work fine under Camel 2.x
> Example error lines:
> {code:java}
> Caused by: org.apache.camel.RuntimeCamelException: Cannot auto create
> component: sql
> Caused by: org.apache.camel.PropertyBindingException: Error binding
> properties on bean: org.apache.camel.component.sql.SqlComponent@a72b3b2
> org.apache.camel.ResolveEndpointFailedException: Failed to resolve endpoint:
> sql://insert...
> {code}
>
--
This message was sent by Atlassian Jira
(v8.3.4#803005)