package com.neverwinterdp.scribengin.dataflow.service; import com.google.inject.Inject; import com.google.inject.Singleton; import com.mycila.jmx.annotation.JmxBean; import com.neverwinterdp.registry.RegistryException; import com.neverwinterdp.scribengin.dataflow.DataflowLifecycleStatus; import com.neverwinterdp.scribengin.dataflow.DataflowRegistry; import com.neverwinterdp.scribengin.dataflow.DataflowTaskDescriptor; import com.neverwinterdp.scribengin.storage.sink.SinkFactory; import com.neverwinterdp.scribengin.storage.source.SourceFactory; import com.neverwinterdp.vm.VMConfig; import com.neverwinterdp.vm.VMDescriptor; import com.neverwinterdp.vm.event.VMWaitingEventListener; @Singleton @JmxBean("role=dataflow-master, type=DataflowService, name=DataflowService") public class DataflowService { @Inject private VMConfig vmConfig; @Inject private DataflowRegistry dataflowRegistry; @Inject private SourceFactory sourceFactory ; @Inject private SinkFactory sinkFactory ; private VMWaitingEventListener workerListener ; private AssignedDataflowTaskListener assignedDataflowTaskListener; public VMConfig getVMConfig() { return this.vmConfig ; } public DataflowRegistry getDataflowRegistry() { return dataflowRegistry; } public SourceFactory getSourceFactory() { return sourceFactory; } public SinkFactory getSinkFactory() { return sinkFactory; } public void addAvailableTask(DataflowTaskDescriptor taskDescriptor) throws RegistryException { dataflowRegistry.addAvailableTask(taskDescriptor); } public void addWorker(VMDescriptor vmDescriptor) throws RegistryException { dataflowRegistry.addWorker(vmDescriptor); workerListener.waitHeartbeat("Wait for " + vmDescriptor.getId(), vmDescriptor.getId(), false); } public void run() throws Exception { onInit() ; onRunning() ; onFinish(); } void onInit() throws Exception { System.err.println("onInit....................."); workerListener = new VMWaitingEventListener(dataflowRegistry.getRegistry()); dataflowRegistry.setStatus(DataflowLifecycleStatus.INIT); assignedDataflowTaskListener = new AssignedDataflowTaskListener(dataflowRegistry); new DataflowServiceInititializer().onInit(this); } void onRunning() throws Exception { System.err.println("onRunning....................."); dataflowRegistry.setStatus(DataflowLifecycleStatus.RUNNING); workerListener.waitForEvents(5 * 60 * 1000); } void onFinish() throws Exception { dataflowRegistry.setStatus(DataflowLifecycleStatus.FINISH); } }