package org.gbif.occurrence.cli;
import org.gbif.common.messaging.MessageListener;
import org.gbif.occurrence.processor.VerbatimProcessor;
import org.gbif.occurrence.processor.guice.OccurrenceProcessorModule;
import org.gbif.occurrence.processor.messaging.FragmentPersistedListener;
import org.gbif.occurrence.processor.messaging.ParseFragmentListener;
import java.util.Collection;
import java.util.Set;
import com.beust.jcommander.internal.Lists;
import com.beust.jcommander.internal.Sets;
import com.google.common.util.concurrent.AbstractIdleService;
import com.google.inject.Guice;
import com.google.inject.Injector;
import org.apache.hadoop.hbase.client.Connection;
public class VerbatimProcessorService extends AbstractIdleService {
private final ProcessorCliConfiguration cfg;
private final Set<MessageListener> listeners = Sets.newHashSet();
private final Collection<Connection> connections = Lists.newArrayList();
public VerbatimProcessorService(ProcessorCliConfiguration configuration) {
this.cfg = configuration;
}
@Override
protected void startUp() throws Exception {
Injector inj = Guice.createInjector(new OccurrenceProcessorModule(cfg));
cfg.ganglia.start();
MessageListener listener = new MessageListener(cfg.messaging.getConnectionParameters());
listener.listen(cfg.primaryQueueName, cfg.msgPoolSize,
new FragmentPersistedListener(inj.getInstance(VerbatimProcessor.class)));
listeners.add(listener);
listener = new MessageListener(cfg.messaging.getConnectionParameters());
listener.listen(cfg.secondaryQueueName, cfg.msgPoolSize,
new ParseFragmentListener(inj.getInstance(VerbatimProcessor.class)));
listeners.add(listener);
}
@Override
protected void shutDown() throws Exception {
for (MessageListener listener : listeners) {
if (listener != null) {
listener.close();
}
}
for (Connection pool : connections) {
if (pool != null) {
pool.close();
}
}
}
}