Storm-166: adding jdbcLookupBolt.

Project: http://git-wip-us.apache.org/repos/asf/storm/repo
Commit: http://git-wip-us.apache.org/repos/asf/storm/commit/ee37870f
Tree: http://git-wip-us.apache.org/repos/asf/storm/tree/ee37870f
Diff: http://git-wip-us.apache.org/repos/asf/storm/diff/ee37870f

Branch: refs/heads/master
Commit: ee37870f4f8ba02ce9081d93164418aba0835aa3
Parents: 8bfa602
Author: Parth Brahmbhatt <[email protected]>
Authored: Wed Jan 14 08:29:53 2015 -0800
Committer: Parth Brahmbhatt <[email protected]>
Committed: Wed Jan 14 08:29:53 2015 -0800

----------------------------------------------------------------------
 .../apache/storm/jdbc/bolt/JdbcLookupBolt.java  | 80 ++++++++++++++++++++
 1 file changed, 80 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/storm/blob/ee37870f/external/storm-jdbc/src/main/java/org/apache/storm/jdbc/bolt/JdbcLookupBolt.java
----------------------------------------------------------------------
diff --git 
a/external/storm-jdbc/src/main/java/org/apache/storm/jdbc/bolt/JdbcLookupBolt.java
 
b/external/storm-jdbc/src/main/java/org/apache/storm/jdbc/bolt/JdbcLookupBolt.java
new file mode 100644
index 0000000..2e4e4e6
--- /dev/null
+++ 
b/external/storm-jdbc/src/main/java/org/apache/storm/jdbc/bolt/JdbcLookupBolt.java
@@ -0,0 +1,80 @@
+/**
+ * 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.storm.jdbc.bolt;
+
+import backtype.storm.topology.OutputFieldsDeclarer;
+import backtype.storm.tuple.Tuple;
+import backtype.storm.tuple.Values;
+import org.apache.storm.jdbc.common.Column;
+import org.apache.storm.jdbc.mapper.JdbcLookupMapper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.List;
+
+/**
+ * Basic bolt for querying from any database.
+ */
+public class JdbcLookupBolt extends AbstractJdbcBolt {
+    private static final Logger LOG = 
LoggerFactory.getLogger(JdbcLookupBolt.class);
+
+    private String selectQuery;
+
+    private JdbcLookupMapper jdbcLookupMapper;
+
+    public JdbcLookupBolt(String configKey) {
+        super(configKey);
+    }
+
+    public JdbcLookupBolt withJdbcLookupMapper(JdbcLookupMapper 
jdbcLookupMapper) {
+        this.jdbcLookupMapper = jdbcLookupMapper;
+        return this;
+    }
+
+    public JdbcLookupBolt withSelectSql(String selectQuery) {
+        this.selectQuery = selectQuery;
+        return this;
+    }
+
+
+    @Override
+    public void execute(Tuple tuple) {
+        try {
+            List<Column> columns = jdbcLookupMapper.getColumns(tuple);
+            List<List<Column>> result = jdbcClient.select(this.selectQuery, 
columns);
+
+            if (result != null && result.size() != 0) {
+                for (List<Column> row : result) {
+                    List<Values> values = jdbcLookupMapper.toTuple(tuple, row);
+                    for (Values value : values) {
+                        collector.emit(value);
+                    }
+                }
+            }
+            this.collector.ack(tuple);
+        } catch (Exception e) {
+            LOG.info("Failed to execute a select query {} on tuple {} ", 
this.selectQuery, tuple);
+            this.collector.fail(tuple);
+        }
+    }
+
+    @Override
+    public void declareOutputFields(OutputFieldsDeclarer outputFieldsDeclarer) 
{
+        jdbcLookupMapper.declareOutputFields(outputFieldsDeclarer);
+    }
+}

Reply via email to