package org.atomnuke;
import org.atomnuke.kernel.GenericKernelDelegate;
import org.atomnuke.kernel.shutdown.KernelShutdownHook;
import org.atomnuke.service.gc.ReclamationHandler;
import org.atomnuke.service.gc.impl.NukeReclamationHandler;
import org.atomnuke.task.manager.AtomTasker;
import org.atomnuke.task.manager.TaskManager;
import org.atomnuke.task.manager.TaskTracker;
import org.atomnuke.task.manager.Tasker;
import org.atomnuke.task.manager.impl.AtomTaskerImpl;
import org.atomnuke.task.manager.impl.GenericTaskManger;
import org.atomnuke.task.manager.impl.FalloutTasker;
import org.atomnuke.task.manager.impl.ThreadSafeTaskTracker;
import org.atomnuke.task.threading.ExecutionManager;
import org.atomnuke.task.threading.ExecutionManagerImpl;
import org.atomnuke.task.threading.ExecutionQueueImpl;
import org.atomnuke.util.remote.AtomicCancellationRemote;
/**
* The Nuke kernel contains the references to a TaskManager, a cancellation
* remote and the runnable kernel logic delegate.
*
* This is the primary interface to the underlying event polling system.
*
* @author zinic
*/
public class NukeKernel extends AbstractNukeImpl {
private final AtomTasker atomTasker;
public NukeKernel() {
this(StaticNukeEnvironment.get(), new ExecutionManagerImpl(new ExecutionQueueImpl(StaticNukeEnvironment.get())), new NukeReclamationHandler(), new ThreadSafeTaskTracker(new AtomicCancellationRemote()));
}
public NukeKernel(NukeEnvironment nukeEnvironment, ExecutionManager executionManager, ReclamationHandler reclamationHandler, TaskTracker taskTracker) {
this(nukeEnvironment, executionManager, reclamationHandler, new GenericTaskManger(executionManager, taskTracker), new FalloutTasker(reclamationHandler, executionManager, taskTracker));
}
/**
* Initialized a new Nuke kernel driven by the passed execution manager.
*
* @param executionManager
*/
public NukeKernel(NukeEnvironment nukeEnvironment, ExecutionManager executionManager, ReclamationHandler reclamationHandler, TaskManager taskManager, Tasker tasker) {
super(nukeEnvironment, new KernelShutdownHook(), new GenericKernelDelegate(taskManager));
atomTasker = new AtomTaskerImpl(reclamationHandler, tasker);
}
@Override
public AtomTasker atomTasker() {
return atomTasker;
}
}