package org.safehaus.penrose.management.scheduler; import org.safehaus.penrose.partition.Partition; import org.safehaus.penrose.partition.PartitionConfig; import org.safehaus.penrose.partition.PartitionManager; import org.safehaus.penrose.scheduler.*; import org.safehaus.penrose.management.BaseService; import org.safehaus.penrose.management.PenroseJMXService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.ArrayList; import java.util.Collection; /** * @author Endi Sukma Dewata */ public class SchedulerService extends BaseService implements SchedulerServiceMBean { public Logger log = LoggerFactory.getLogger(getClass()); private PartitionManager partitionManager; private String partitionName; public SchedulerService( PenroseJMXService jmxService, PartitionManager partitionManager, String partitionName ) throws Exception { this.jmxService = jmxService; this.partitionManager = partitionManager; this.partitionName = partitionName; } public String getObjectName() { return SchedulerClient.getStringObjectName(partitionName); } public Object getObject() { return getScheduler(); } public SchedulerConfig getSchedulerConfig() { PartitionConfig partitionConfig = getPartitionConfig(); if (partitionConfig == null) return null; return partitionConfig.getSchedulerConfig(); } public Scheduler getScheduler() { Partition partition = getPartition(); if (partition == null) return null; return partition.getScheduler(); } public PartitionConfig getPartitionConfig() { return partitionManager.getPartitionConfig(partitionName); } public Partition getPartition() { return partitionManager.getPartition(partitionName); } public void init() throws Exception { super.init(); SchedulerConfig schedulerConfig = getSchedulerConfig(); if (schedulerConfig != null) { for (String jobName : schedulerConfig.getJobNames()) { JobService jobService = getJobService(jobName); jobService.init(); } } } public void destroy() throws Exception { SchedulerConfig schedulerConfig = getSchedulerConfig(); if (schedulerConfig != null) { for (String jobName : schedulerConfig.getJobNames()) { JobService jobService = getJobService(jobName); jobService.destroy(); } } super.destroy(); } public Collection<String> getJobNames() throws Exception { Collection<String> list = new ArrayList<String>(); SchedulerConfig schedulerConfig = getSchedulerConfig(); if (schedulerConfig != null) { list.addAll(schedulerConfig.getJobNames()); } return list; } public Collection<String> getTriggerNames() throws Exception { Collection<String> list = new ArrayList<String>(); SchedulerConfig schedulerConfig = getSchedulerConfig(); if (schedulerConfig != null) { list.addAll(schedulerConfig.getTriggerNames()); } return list; } public JobService getJobService(String jobName) throws Exception { return new JobService(jmxService, partitionManager, partitionName, jobName); } public void executeJob(String name) throws Exception { log.debug("Executing job "+name); Scheduler scheduler = getScheduler(); Job job = scheduler.getJob(name); job.execute(); } }