package org.act.tstream.batch; import org.act.tstream.batch.impl.BatchSpoutTrigger; import org.act.tstream.batch.impl.CoordinatedBolt; import org.act.tstream.batch.util.BatchDef; import org.apache.log4j.Logger; import backtype.storm.topology.BoltDeclarer; import backtype.storm.topology.IBasicBolt; import backtype.storm.topology.SpoutDeclarer; import backtype.storm.topology.TopologyBuilder; import org.act.tstream.batch.BatchTopologyBuilder; import org.act.tstream.batch.IBatchSpout; import org.act.tstream.batch.ICommitter; import org.act.tstream.batch.IPostCommit; import org.act.tstream.batch.IPrepareCommit; public class BatchTopologyBuilder { private static final Logger LOG = Logger .getLogger(BatchTopologyBuilder.class); private TopologyBuilder topologyBuilder; private SpoutDeclarer spoutDeclarer; public BatchTopologyBuilder(String topologyName) { topologyBuilder = new TopologyBuilder(); spoutDeclarer = topologyBuilder.setSpout(BatchDef.SPOUT_TRIGGER, new BatchSpoutTrigger(), 1); } public BoltDeclarer setSpout(String id, IBatchSpout spout, int paralel) { BoltDeclarer boltDeclarer = this .setBolt(id, (IBatchSpout) spout, paralel); boltDeclarer.allGrouping(BatchDef.SPOUT_TRIGGER, BatchDef.COMPUTING_STREAM_ID); return boltDeclarer; } public BoltDeclarer setBolt(String id, IBasicBolt bolt, int paralel) { CoordinatedBolt coordinatedBolt = new CoordinatedBolt(bolt); BoltDeclarer boltDeclarer = topologyBuilder.setBolt(id, coordinatedBolt, paralel); if (bolt instanceof IPrepareCommit) { boltDeclarer.allGrouping(BatchDef.SPOUT_TRIGGER, BatchDef.PREPARE_STREAM_ID); } if (bolt instanceof ICommitter) { boltDeclarer.allGrouping(BatchDef.SPOUT_TRIGGER, BatchDef.COMMIT_STREAM_ID); boltDeclarer.allGrouping(BatchDef.SPOUT_TRIGGER, BatchDef.REVERT_STREAM_ID); } if (bolt instanceof IPostCommit) { boltDeclarer.allGrouping(BatchDef.SPOUT_TRIGGER, BatchDef.POST_STREAM_ID); } return boltDeclarer; } public TopologyBuilder getTopologyBuilder() { return topologyBuilder; } }