package storm.contrib.rdbms; import java.sql.Connection; import java.sql.SQLException; import java.util.ArrayList; import java.util.Map; import backtype.storm.task.TopologyContext; import backtype.storm.topology.BasicOutputCollector; import backtype.storm.topology.IBasicBolt; import backtype.storm.topology.OutputFieldsDeclarer; import backtype.storm.tuple.Tuple; public class RDBMSDumperBolt implements IBasicBolt { private static final long serialVersionUID = 1L; private static transient RDBMSConnector connector = new RDBMSConnector(); private static transient Connection con = null; private static transient RDBMSCommunicator communicator = null; private String tableName = null, primaryKey = null, dBUrl = null, password = null, username = null; private ArrayList<String> columnNames = new ArrayList<String>(); private ArrayList<String> columnTypes = new ArrayList<String>(); private ArrayList<Object> fieldValues = new ArrayList<Object>(); public RDBMSDumperBolt(String primaryKey, String tableName, ArrayList<String> columnNames, ArrayList<String> columnTypes, String dBUrl, String username, String password) throws SQLException { super(); this.primaryKey = primaryKey; this.tableName = tableName; this.columnNames = columnNames; this.columnTypes = columnTypes; this.dBUrl = dBUrl; this.username = username; this.password = password; try { con = connector.getConnection(dBUrl, username, password); } catch (ClassNotFoundException e) { e.printStackTrace(); } communicator = new RDBMSCommunicator(con, primaryKey, tableName, columnNames, columnTypes); } @Override public void execute(Tuple input, BasicOutputCollector collector) { fieldValues = new ArrayList<Object>(); Object fieldValueObject; //add all the tuple values to a list for (int i = 0; i < columnNames.size(); i++) { fieldValueObject = input.getValue(i); fieldValues.add(fieldValueObject); } //list passed as an argument to the insertRow funtion try { communicator.insertRow(fieldValues); } catch (SQLException e) { System.out.println("Exception occurred in adding a row "); e.printStackTrace(); } } @Override public void declareOutputFields(OutputFieldsDeclarer declarer) { // TODO Auto-generated method stub } public Map<String, Object> getComponentConfiguration() { // TODO Auto-generated method stub return null; } @Override public void prepare(Map stormConf, TopologyContext context) { // TODO Auto-generated method stub } @Override public void cleanup() { // TODO Auto-generated method stub } }