You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2016/01/09 11:44:48 UTC
[5/9] camel git commit: Caching templates.
Caching templates.
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/c8cbcde3
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/c8cbcde3
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/c8cbcde3
Branch: refs/heads/master
Commit: c8cbcde397dde05a9bba18fa79cd81e8aa984708
Parents: f0738bb
Author: Sami Nurminen <sn...@gmail.com>
Authored: Wed Jan 6 22:25:38 2016 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Sat Jan 9 10:59:47 2016 +0100
----------------------------------------------------------------------
.../sql/stored/SqlStoredComponent.java | 6 ++--
.../component/sql/stored/SqlStoredEndpoint.java | 13 ++++----
.../component/sql/stored/SqlStoredProducer.java | 13 +++++---
.../template/TemplateStoredProcedure.java | 7 +++--
.../TemplateStoredProcedureFactory.java | 32 +++++++++++++++++---
.../sql/stored/template/grammar/sspt.jj | 2 ++
.../camel/component/sql/stored/ParserTest.java | 2 +-
.../sql/stored/TemplateStoredProcedureTest.java | 9 ++++--
8 files changed, 58 insertions(+), 26 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/c8cbcde3/components/camel-sql/src/main/java/org/apache/camel/component/sql/stored/SqlStoredComponent.java
----------------------------------------------------------------------
diff --git a/components/camel-sql/src/main/java/org/apache/camel/component/sql/stored/SqlStoredComponent.java b/components/camel-sql/src/main/java/org/apache/camel/component/sql/stored/SqlStoredComponent.java
index 9fdb45d..20aedf1 100644
--- a/components/camel-sql/src/main/java/org/apache/camel/component/sql/stored/SqlStoredComponent.java
+++ b/components/camel-sql/src/main/java/org/apache/camel/component/sql/stored/SqlStoredComponent.java
@@ -5,6 +5,7 @@ import org.apache.camel.Endpoint;
import org.apache.camel.component.sql.stored.template.TemplateStoredProcedureFactory;
import org.apache.camel.impl.UriEndpointComponent;
import org.apache.camel.util.CamelContextHelper;
+import org.springframework.jdbc.core.JdbcTemplate;
import javax.sql.DataSource;
import java.util.Map;
@@ -20,9 +21,6 @@ public class SqlStoredComponent extends UriEndpointComponent {
super(SqlStoredEndpoint.class);
}
-
- TemplateStoredProcedureFactory templateStoredProcedureFactory = new TemplateStoredProcedureFactory();
-
public SqlStoredComponent(CamelContext context, Class<? extends Endpoint> endpointClass) {
super(context, endpointClass);
}
@@ -49,7 +47,7 @@ public class SqlStoredComponent extends UriEndpointComponent {
}
- return new SqlStoredEndpoint(templateStoredProcedureFactory, target, remaining);
+ return new SqlStoredEndpoint(new JdbcTemplate(target), remaining);
}
public DataSource getDataSource() {
http://git-wip-us.apache.org/repos/asf/camel/blob/c8cbcde3/components/camel-sql/src/main/java/org/apache/camel/component/sql/stored/SqlStoredEndpoint.java
----------------------------------------------------------------------
diff --git a/components/camel-sql/src/main/java/org/apache/camel/component/sql/stored/SqlStoredEndpoint.java b/components/camel-sql/src/main/java/org/apache/camel/component/sql/stored/SqlStoredEndpoint.java
index 844e9e5..ae7348c 100644
--- a/components/camel-sql/src/main/java/org/apache/camel/component/sql/stored/SqlStoredEndpoint.java
+++ b/components/camel-sql/src/main/java/org/apache/camel/component/sql/stored/SqlStoredEndpoint.java
@@ -7,8 +7,7 @@ import org.apache.camel.spi.Metadata;
import org.apache.camel.spi.UriEndpoint;
import org.apache.camel.spi.UriPath;
import org.apache.camel.util.UnsafeUriCharactersEncoder;
-
-import javax.sql.DataSource;
+import org.springframework.jdbc.core.JdbcTemplate;
@UriEndpoint(scheme = "sql-stored", title = "SQL stored", syntax = "sql-stored:template", label = "database,sql")
public class SqlStoredEndpoint extends DefaultPollingEndpoint {
@@ -19,19 +18,19 @@ public class SqlStoredEndpoint extends DefaultPollingEndpoint {
private final TemplateStoredProcedureFactory templateStoredProcedureFactory;
- private final DataSource dataSource;
+ private final JdbcTemplate jdbcTemplate;
- public SqlStoredEndpoint(TemplateStoredProcedureFactory templateStoredProcedureFactory, DataSource dataSource,
+ public SqlStoredEndpoint(JdbcTemplate jdbcTemplate,
String template) {
- this.templateStoredProcedureFactory = templateStoredProcedureFactory;
- this.dataSource = dataSource;
+ this.templateStoredProcedureFactory = new TemplateStoredProcedureFactory(jdbcTemplate);
+ this.jdbcTemplate = jdbcTemplate;
this.template = template;
}
@Override
public Producer createProducer() throws Exception {
- return new SqlStoredProducer(this, templateStoredProcedureFactory.createFromString(template, dataSource));
+ return new SqlStoredProducer(this, template, templateStoredProcedureFactory);
}
@Override
http://git-wip-us.apache.org/repos/asf/camel/blob/c8cbcde3/components/camel-sql/src/main/java/org/apache/camel/component/sql/stored/SqlStoredProducer.java
----------------------------------------------------------------------
diff --git a/components/camel-sql/src/main/java/org/apache/camel/component/sql/stored/SqlStoredProducer.java b/components/camel-sql/src/main/java/org/apache/camel/component/sql/stored/SqlStoredProducer.java
index 9d2210d..f306a4c 100644
--- a/components/camel-sql/src/main/java/org/apache/camel/component/sql/stored/SqlStoredProducer.java
+++ b/components/camel-sql/src/main/java/org/apache/camel/component/sql/stored/SqlStoredProducer.java
@@ -3,6 +3,7 @@ package org.apache.camel.component.sql.stored;
import org.apache.camel.Endpoint;
import org.apache.camel.Exchange;
import org.apache.camel.component.sql.stored.template.TemplateStoredProcedure;
+import org.apache.camel.component.sql.stored.template.TemplateStoredProcedureFactory;
import org.apache.camel.impl.DefaultProducer;
/**
@@ -10,16 +11,20 @@ import org.apache.camel.impl.DefaultProducer;
*/
public class SqlStoredProducer extends DefaultProducer {
- final TemplateStoredProcedure templateStoredProcedure;
+ final TemplateStoredProcedureFactory templateStoredProcedureFactory;
- public SqlStoredProducer(Endpoint endpoint, TemplateStoredProcedure templateStoredProcedure) {
+ final TemplateStoredProcedure defaultTemplateStoredProcedure;
+
+ public SqlStoredProducer(Endpoint endpoint, String template, TemplateStoredProcedureFactory
+ templateStoredProcedureFactory) {
super(endpoint);
- this.templateStoredProcedure = templateStoredProcedure;
+ this.defaultTemplateStoredProcedure = templateStoredProcedureFactory.createFromString(template);
+ this.templateStoredProcedureFactory = templateStoredProcedureFactory;
}
@Override
public void process(Exchange exchange) throws Exception {
- templateStoredProcedure.execute(exchange);
+ this.defaultTemplateStoredProcedure.execute(exchange);
}
}
http://git-wip-us.apache.org/repos/asf/camel/blob/c8cbcde3/components/camel-sql/src/main/java/org/apache/camel/component/sql/stored/template/TemplateStoredProcedure.java
----------------------------------------------------------------------
diff --git a/components/camel-sql/src/main/java/org/apache/camel/component/sql/stored/template/TemplateStoredProcedure.java b/components/camel-sql/src/main/java/org/apache/camel/component/sql/stored/template/TemplateStoredProcedure.java
index 7c1f415..44103d8 100644
--- a/components/camel-sql/src/main/java/org/apache/camel/component/sql/stored/template/TemplateStoredProcedure.java
+++ b/components/camel-sql/src/main/java/org/apache/camel/component/sql/stored/template/TemplateStoredProcedure.java
@@ -4,6 +4,7 @@ import org.apache.camel.Exchange;
import org.apache.camel.component.sql.stored.template.ast.InputParameter;
import org.apache.camel.component.sql.stored.template.ast.OutParameter;
import org.apache.camel.component.sql.stored.template.ast.Template;
+import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.SqlOutParameter;
import org.springframework.jdbc.core.SqlParameter;
import org.springframework.jdbc.object.StoredProcedure;
@@ -17,9 +18,9 @@ public class TemplateStoredProcedure extends StoredProcedure {
Template template;
- public TemplateStoredProcedure(DataSource dataSource, Template template) {
+ public TemplateStoredProcedure(JdbcTemplate jdbcTemplate, Template template) {
this.template = template;
- setDataSource(dataSource);
+ setDataSource(jdbcTemplate.getDataSource());
setSql(template.getProcedureName());
@@ -33,9 +34,11 @@ public class TemplateStoredProcedure extends StoredProcedure {
}
compile();
+
}
+
public void execute(Exchange exchange) {
Map<String, Object> params = new HashMap<>();
http://git-wip-us.apache.org/repos/asf/camel/blob/c8cbcde3/components/camel-sql/src/main/java/org/apache/camel/component/sql/stored/template/TemplateStoredProcedureFactory.java
----------------------------------------------------------------------
diff --git a/components/camel-sql/src/main/java/org/apache/camel/component/sql/stored/template/TemplateStoredProcedureFactory.java b/components/camel-sql/src/main/java/org/apache/camel/component/sql/stored/template/TemplateStoredProcedureFactory.java
index 2229a4e..947a6a5 100644
--- a/components/camel-sql/src/main/java/org/apache/camel/component/sql/stored/template/TemplateStoredProcedureFactory.java
+++ b/components/camel-sql/src/main/java/org/apache/camel/component/sql/stored/template/TemplateStoredProcedureFactory.java
@@ -4,25 +4,47 @@ import org.apache.camel.component.sql.stored.template.ast.ParseRuntimeException;
import org.apache.camel.component.sql.stored.template.ast.Template;
import org.apache.camel.component.sql.stored.template.generated.ParseException;
import org.apache.camel.component.sql.stored.template.generated.SSPTParser;
+import org.apache.camel.util.LRUCache;
+import org.springframework.jdbc.core.JdbcTemplate;
import javax.sql.DataSource;
import java.io.StringReader;
public class TemplateStoredProcedureFactory {
+ final int TEMPLATE_CACHE_DEFAULT_SIZE = 200;
+
+ final JdbcTemplate jdbcTemplate;
+
+ LRUCache<String, TemplateStoredProcedure> templateCache = new LRUCache<String, TemplateStoredProcedure>(200);
+
+
+ public TemplateStoredProcedureFactory(JdbcTemplate jdbcTemplate) {
+ this.jdbcTemplate = jdbcTemplate;
+ }
+
+ public TemplateStoredProcedure createFromString(String string) {
+ TemplateStoredProcedure fromCache = templateCache.get(string);
+
+ if (fromCache != null) {
+ return fromCache;
+ }
- public TemplateStoredProcedure createFromString(String string, DataSource dataSource) {
Template sptpRootNode = parseTemplate(string);
- return new TemplateStoredProcedure(dataSource, sptpRootNode);
+ TemplateStoredProcedure ret = new TemplateStoredProcedure(jdbcTemplate, sptpRootNode);
+
+ templateCache.put(string, ret);
+
+ return ret;
}
- public Template parseTemplate(String template) {
+ public Template parseTemplate(String template) {
try {
- SSPTParser parser = new SSPTParser(new StringReader(template));
+ SSPTParser parser = new SSPTParser(new StringReader(template));
return validate(parser.parse());
- }catch(ParseException parseException) {
+ } catch (ParseException parseException) {
throw new ParseRuntimeException(parseException);
}
}
http://git-wip-us.apache.org/repos/asf/camel/blob/c8cbcde3/components/camel-sql/src/main/java/org/apache/camel/component/sql/stored/template/grammar/sspt.jj
----------------------------------------------------------------------
diff --git a/components/camel-sql/src/main/java/org/apache/camel/component/sql/stored/template/grammar/sspt.jj b/components/camel-sql/src/main/java/org/apache/camel/component/sql/stored/template/grammar/sspt.jj
index edd9f17..e43d17b 100644
--- a/components/camel-sql/src/main/java/org/apache/camel/component/sql/stored/template/grammar/sspt.jj
+++ b/components/camel-sql/src/main/java/org/apache/camel/component/sql/stored/template/grammar/sspt.jj
@@ -2,6 +2,8 @@
options {
STATIC = false;
+ FORCE_LA_CHECK = true;
+ SANITY_CHECK = true;
}
http://git-wip-us.apache.org/repos/asf/camel/blob/c8cbcde3/components/camel-sql/src/test/java/org/apache/camel/component/sql/stored/ParserTest.java
----------------------------------------------------------------------
diff --git a/components/camel-sql/src/test/java/org/apache/camel/component/sql/stored/ParserTest.java b/components/camel-sql/src/test/java/org/apache/camel/component/sql/stored/ParserTest.java
index 81b6b5a..9982138 100644
--- a/components/camel-sql/src/test/java/org/apache/camel/component/sql/stored/ParserTest.java
+++ b/components/camel-sql/src/test/java/org/apache/camel/component/sql/stored/ParserTest.java
@@ -17,7 +17,7 @@ import java.sql.Types;
public class ParserTest extends CamelTestSupport {
- TemplateStoredProcedureFactory parser = new TemplateStoredProcedureFactory();
+ TemplateStoredProcedureFactory parser = new TemplateStoredProcedureFactory(null);
@Test
http://git-wip-us.apache.org/repos/asf/camel/blob/c8cbcde3/components/camel-sql/src/test/java/org/apache/camel/component/sql/stored/TemplateStoredProcedureTest.java
----------------------------------------------------------------------
diff --git a/components/camel-sql/src/test/java/org/apache/camel/component/sql/stored/TemplateStoredProcedureTest.java b/components/camel-sql/src/test/java/org/apache/camel/component/sql/stored/TemplateStoredProcedureTest.java
index 73e9711..3b06390 100644
--- a/components/camel-sql/src/test/java/org/apache/camel/component/sql/stored/TemplateStoredProcedureTest.java
+++ b/components/camel-sql/src/test/java/org/apache/camel/component/sql/stored/TemplateStoredProcedureTest.java
@@ -16,7 +16,7 @@ import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType;
public class TemplateStoredProcedureTest extends CamelTestSupport {
- TemplateStoredProcedureFactory parser = new TemplateStoredProcedureFactory();
+ TemplateStoredProcedureFactory parser;
private EmbeddedDatabase db;
private JdbcTemplate jdbcTemplate;
@@ -28,13 +28,16 @@ public class TemplateStoredProcedureTest extends CamelTestSupport {
jdbcTemplate = new JdbcTemplate(db);
+
+ parser = new TemplateStoredProcedureFactory(jdbcTemplate);
+
super.setUp();
}
@Test
public void shouldExecuteStoredProcedure() {
- TemplateStoredProcedure sp = new TemplateStoredProcedure(db, parser.parseTemplate("ADDNUMBERS" +
+ TemplateStoredProcedure sp = new TemplateStoredProcedure(jdbcTemplate, parser.parseTemplate("ADDNUMBERS" +
"(INTEGER ${header.v1},INTEGER ${header.v2},OUT INTEGER resultofsum)"));
Exchange exchange = createExchangeWithBody(null);
@@ -52,7 +55,7 @@ public class TemplateStoredProcedureTest extends CamelTestSupport {
@Test
public void shouldExecuteNilacidProcedure() {
- TemplateStoredProcedure sp = new TemplateStoredProcedure(db, parser.parseTemplate("NILADIC" +
+ TemplateStoredProcedure sp = new TemplateStoredProcedure(jdbcTemplate, parser.parseTemplate("NILADIC" +
"()"));
Exchange exchange = createExchangeWithBody(null);