CAMEL-9162: camel-elsql component
Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/f6cefc74 Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/f6cefc74 Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/f6cefc74 Branch: refs/heads/master Commit: f6cefc74e6455593a9f64f79c9218de0a4f44e1d Parents: ed0f42a Author: Claus Ibsen <davscl...@apache.org> Authored: Mon Oct 5 07:40:21 2015 +0200 Committer: Claus Ibsen <davscl...@apache.org> Committed: Mon Oct 5 10:54:54 2015 +0200 ---------------------------------------------------------------------- .../camel/component/elsql/ElsqlEndpoint.java | 19 +++-- .../component/elsql/ElSqlConsumerTest.java | 88 ++++++++++++++++++++ .../src/test/resources/elsql/projects.elsql | 4 + 3 files changed, 102 insertions(+), 9 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/f6cefc74/components/camel-elsql/src/main/java/org/apache/camel/component/elsql/ElsqlEndpoint.java ---------------------------------------------------------------------- diff --git a/components/camel-elsql/src/main/java/org/apache/camel/component/elsql/ElsqlEndpoint.java b/components/camel-elsql/src/main/java/org/apache/camel/component/elsql/ElsqlEndpoint.java index 9025d30..352dc37 100644 --- a/components/camel-elsql/src/main/java/org/apache/camel/component/elsql/ElsqlEndpoint.java +++ b/components/camel-elsql/src/main/java/org/apache/camel/component/elsql/ElsqlEndpoint.java @@ -25,19 +25,22 @@ import org.apache.camel.Consumer; import org.apache.camel.Processor; import org.apache.camel.Producer; import org.apache.camel.component.sql.SqlEndpoint; +import org.apache.camel.component.sql.SqlPrepareStatementStrategy; +import org.apache.camel.component.sql.SqlProcessingStrategy; import org.apache.camel.spi.Metadata; import org.apache.camel.spi.UriEndpoint; import org.apache.camel.spi.UriParam; import org.apache.camel.spi.UriPath; import org.apache.camel.util.ObjectHelper; import org.apache.camel.util.ResourceHelper; +import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate; @UriEndpoint(scheme = "elsql", title = "SQL", syntax = "elsql:elsqlName:resourceUri", consumerClass = ElsqlConsumer.class, label = "database,sql") public class ElsqlEndpoint extends SqlEndpoint { private volatile ElSql elSql; - private NamedParameterJdbcTemplate jdbcTemplate; + private NamedParameterJdbcTemplate namedJdbcTemplate; @UriPath @Metadata(required = "true") @@ -47,21 +50,21 @@ public class ElsqlEndpoint extends SqlEndpoint { @UriParam private ElSqlConfig elSqlConfig; - public ElsqlEndpoint(String uri, Component component, NamedParameterJdbcTemplate jdbcTemplate, String elsqlName, String resourceUri) { + public ElsqlEndpoint(String uri, Component component, NamedParameterJdbcTemplate namedJdbcTemplate, String elsqlName, String resourceUri) { super(uri, component, null, null); this.elsqlName = elsqlName; this.resourceUri = resourceUri; - this.jdbcTemplate = jdbcTemplate; + this.namedJdbcTemplate = namedJdbcTemplate; } @Override public Consumer createConsumer(Processor processor) throws Exception { - // TODO: must be named - /* SqlProcessingStrategy proStrategy = new ElsqlSqlProcessingStrategy(elsqlName, elSql); SqlPrepareStatementStrategy preStategy = new ElsqlSqlPrepareStatementStrategy(); - ElsqlConsumer consumer = new ElsqlConsumer(this, processor, jdbcTemplate, elsqlName, preStategy, proStrategy); + JdbcTemplate template = new JdbcTemplate(getDataSource()); + + ElsqlConsumer consumer = new ElsqlConsumer(this, processor, template, elsqlName, preStategy, proStrategy); consumer.setMaxMessagesPerPoll(getMaxMessagesPerPoll()); consumer.setOnConsume(getOnConsume()); consumer.setOnConsumeFailed(getOnConsumeFailed()); @@ -72,13 +75,11 @@ public class ElsqlEndpoint extends SqlEndpoint { consumer.setRouteEmptyResultSet(isRouteEmptyResultSet()); configureConsumer(consumer); return consumer; - */ - return null; } @Override public Producer createProducer() throws Exception { - ElsqlProducer result = new ElsqlProducer(this, elSql, elsqlName, jdbcTemplate); + ElsqlProducer result = new ElsqlProducer(this, elSql, elsqlName, namedJdbcTemplate); return result; } http://git-wip-us.apache.org/repos/asf/camel/blob/f6cefc74/components/camel-elsql/src/test/java/org/apache/camel/component/elsql/ElSqlConsumerTest.java ---------------------------------------------------------------------- diff --git a/components/camel-elsql/src/test/java/org/apache/camel/component/elsql/ElSqlConsumerTest.java b/components/camel-elsql/src/test/java/org/apache/camel/component/elsql/ElSqlConsumerTest.java new file mode 100644 index 0000000..7d34cb3 --- /dev/null +++ b/components/camel-elsql/src/test/java/org/apache/camel/component/elsql/ElSqlConsumerTest.java @@ -0,0 +1,88 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.camel.component.elsql; + +import java.util.List; +import java.util.Map; + +import org.apache.camel.Exchange; +import org.apache.camel.builder.RouteBuilder; +import org.apache.camel.component.mock.MockEndpoint; +import org.apache.camel.impl.JndiRegistry; +import org.apache.camel.test.junit4.CamelTestSupport; +import org.junit.After; +import org.junit.Test; +import org.springframework.jdbc.datasource.embedded.EmbeddedDatabase; +import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder; +import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType; + +/** + * + */ +public class ElSqlConsumerTest extends CamelTestSupport { + + private EmbeddedDatabase db; + + @Override + protected JndiRegistry createRegistry() throws Exception { + JndiRegistry jndi = super.createRegistry(); + + // this is the database we create with some initial data for our unit test + db = new EmbeddedDatabaseBuilder() + .setType(EmbeddedDatabaseType.DERBY).addScript("sql/createAndPopulateDatabase.sql").build(); + + jndi.bind("dataSource", db); + + return jndi; + } + + @After + public void tearDown() throws Exception { + super.tearDown(); + + db.shutdown(); + } + + @Test + public void testConsume() throws Exception { + MockEndpoint mock = getMockEndpoint("mock:result"); + mock.expectedMinimumMessageCount(3); + + assertMockEndpointsSatisfied(); + + List<Exchange> exchanges = mock.getReceivedExchanges(); + assertTrue(exchanges.size() >= 3); + + assertEquals(1, exchanges.get(0).getIn().getBody(Map.class).get("ID")); + assertEquals("Camel", exchanges.get(0).getIn().getBody(Map.class).get("PROJECT")); + assertEquals(2, exchanges.get(1).getIn().getBody(Map.class).get("ID")); + assertEquals("AMQ", exchanges.get(1).getIn().getBody(Map.class).get("PROJECT")); + assertEquals(3, exchanges.get(2).getIn().getBody(Map.class).get("ID")); + assertEquals("Linux", exchanges.get(2).getIn().getBody(Map.class).get("PROJECT")); + } + + @Override + protected RouteBuilder createRouteBuilder() throws Exception { + return new RouteBuilder() { + @Override + public void configure() throws Exception { + from("elsql:allProjects:elsql/projects.elsql?dataSource=dataSource") + .to("mock:result"); + } + }; + } +} http://git-wip-us.apache.org/repos/asf/camel/blob/f6cefc74/components/camel-elsql/src/test/resources/elsql/projects.elsql ---------------------------------------------------------------------- diff --git a/components/camel-elsql/src/test/resources/elsql/projects.elsql b/components/camel-elsql/src/test/resources/elsql/projects.elsql index 75dfe51..de60eef 100644 --- a/components/camel-elsql/src/test/resources/elsql/projects.elsql +++ b/components/camel-elsql/src/test/resources/elsql/projects.elsql @@ -3,3 +3,7 @@ FROM projects WHERE license = :body ORDER BY id +@NAME(allProjects) + SELECT * + FROM projects + ORDER BY id