blob: b648075233bf9ba6aa32afebcb60c7acf9fc333e [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*//**
*
*/
package org.apache.synapse.task;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.synapse.commons.SynapseCommonsException;
/**
* Helper class to a share Scheduler and TaskDescriptionRepository within a single class space
*/
public class SynapseTaskManager {
private static final Log log = LogFactory.getLog(SynapseTaskManager.class);
private TaskDescriptionRepository taskDescriptionRepository;
private TaskScheduler taskScheduler;
private boolean initialized = false;
public SynapseTaskManager() {
if (log.isDebugEnabled()) {
log.debug("Created the SynapseTaskManager singleton instance");
}
}
/**
* Initialize the task manager instance with the given task description repository
* and the task scheduler. If any of these arguments are null new instances will
* be created. Note that this method does not initialize the actual task scheduler
* instance. It is up to the task manager clients to make sure that is initialized.
*
* @param taskDescriptionRepository TaskDescriptionRepository instance
* @param taskScheduler TaskScheduler instance
*/
public void init(TaskDescriptionRepository taskDescriptionRepository,
TaskScheduler taskScheduler) {
if (initialized) {
if (log.isDebugEnabled()) {
log.debug("Task manager already initialized. Skipping re-initialization.");
}
return;
}
if (taskDescriptionRepository != null) {
this.taskDescriptionRepository = taskDescriptionRepository;
} else {
if (log.isDebugEnabled()) {
log.debug("Creating new TaskDescriptionRepository as given instance is null.");
}
this.taskDescriptionRepository =
TaskDescriptionRepositoryFactory.getTaskDescriptionRepository(
TaskConstants.TASK_DESCRIPTION_REPOSITORY);
}
if (taskScheduler != null) {
this.taskScheduler = taskScheduler;
} else {
if (log.isDebugEnabled()) {
log.debug("Creating new TaskScheduler as given instance is null.");
}
this.taskScheduler = TaskSchedulerFactory.getTaskScheduler(TaskConstants.TASK_SCHEDULER);
}
initialized = true;
}
public TaskDescriptionRepository getTaskDescriptionRepository() {
assertInitialized();
return taskDescriptionRepository;
}
public TaskScheduler getTaskScheduler() {
assertInitialized();
return taskScheduler;
}
private void assertInitialized() {
if (!initialized) {
String msg = "Task helper has not been initialized, it requires to be initialized";
log.error(msg);
throw new SynapseCommonsException(msg);
}
}
public boolean isInitialized() {
return initialized;
}
public void cleanup() {
assertInitialized();
log.info("Shutting down the task manager");
/*taskDescriptionRepository.clear();*/
taskScheduler.shutDown();
initialized = false;
}
public void pauseAll() {
if (taskScheduler != null) {
if(taskScheduler.isInitialized()) {
try {
taskScheduler.pauseAll();
} catch (SynapseTaskException ignore) {
// This exceptions has already been logged and we don't want to interrupt the flow
}
}
}
}
public void resumeAll() {
if (taskScheduler != null) {
try {
taskScheduler.resumeAll();
} catch (SynapseTaskException ignore) {
// This exceptions has already been logged and we don't want to interrupt the flow
}
}
}
}