package stormapplied.flashsale.topology; import backtype.storm.task.TopologyContext; import backtype.storm.topology.BasicOutputCollector; import backtype.storm.topology.OutputFieldsDeclarer; import backtype.storm.topology.base.BaseBasicBolt; import backtype.storm.topology.ReportedFailedException; import backtype.storm.tuple.Fields; import backtype.storm.tuple.Tuple; import backtype.storm.tuple.Values; import java.util.List; import java.util.Map; import stormapplied.flashsale.services.DatabaseClient; import stormapplied.flashsale.services.Timeout; import stormapplied.flashsale.domain.Sale; public class SaveRecommendedSales extends BaseBasicBolt { private final static int TIMEOUT = 50; private DatabaseClient dbClient; @Override public void prepare(Map config, TopologyContext context) { dbClient = new DatabaseClient(TIMEOUT); } @Override public void execute(Tuple tuple, BasicOutputCollector outputCollector) { String customerId = tuple.getStringByField("customer"); List<Sale> sales = (List<Sale>) tuple.getValueByField("sales"); try { dbClient.save(customerId, sales); } catch (Timeout e) { throw new ReportedFailedException(e); } } @Override public void declareOutputFields(OutputFieldsDeclarer outputFieldsDeclarer) { } }