package net.johnewart.gearman.embedded; import com.codahale.metrics.MetricRegistry; import net.johnewart.gearman.common.Job; import net.johnewart.gearman.common.interfaces.EngineClient; import net.johnewart.gearman.common.interfaces.JobHandleFactory; import net.johnewart.gearman.engine.core.JobManager; import net.johnewart.gearman.engine.core.UniqueIdFactory; import net.johnewart.gearman.engine.exceptions.EnqueueException; import net.johnewart.gearman.engine.metrics.MetricsEngine; import net.johnewart.gearman.engine.metrics.QueueMetrics; import net.johnewart.gearman.engine.queue.factories.JobQueueFactory; import net.johnewart.gearman.engine.queue.factories.MemoryJobQueueFactory; import net.johnewart.gearman.engine.storage.ExceptionStorageEngine; import net.johnewart.gearman.engine.storage.NoopExceptionStorageEngine; import net.johnewart.gearman.engine.util.LocalJobHandleFactory; import net.johnewart.gearman.engine.util.LocalUniqueIdFactory; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class EmbeddedGearmanServer { private final Logger LOG = LoggerFactory.getLogger(EmbeddedGearmanServer.class); final JobManager jobManager; final JobHandleFactory jobHandleFactory; final UniqueIdFactory uniqueIdFactory; final QueueMetrics queueMetrics; public EmbeddedGearmanServer() { MetricRegistry registry = new MetricRegistry(); JobQueueFactory jobQueueFactory = new MemoryJobQueueFactory(registry); jobHandleFactory = new LocalJobHandleFactory("embedded"); uniqueIdFactory = new LocalUniqueIdFactory(); ExceptionStorageEngine exceptionStore = new NoopExceptionStorageEngine(); queueMetrics = new MetricsEngine(registry); jobManager = new JobManager(jobQueueFactory, jobHandleFactory, uniqueIdFactory, exceptionStore, queueMetrics); } public Job submitJob(final Job job, final EngineClient client) throws EnqueueException { LOG.debug("Submitting job for client..."); return jobManager.storeJobForClient(job, client); } public Job getNextJobForWorker(final EmbeddedGearmanWorker worker) { return jobManager.nextJobForWorker(worker); } public void markWorkerAsleep(final EmbeddedGearmanWorker worker) { jobManager.markWorkerAsAsleep(worker); } public void registerWorkerAbility(final EmbeddedGearmanWorker worker, final String callback) { jobManager.registerWorkerAbility(callback, worker); } public void completeWork(final Job job, final byte[] results) { jobManager.handleWorkCompletion(job, results); } }