Author: hiranya
Date: Tue Sep 22 04:45:43 2009
New Revision: 817502
URL: http://svn.apache.org/viewvc?rev=817502&view=rev
Log:
Refactored and improved the code for tasks
* Removed the singleton pattern in the SynapseTaskManager
* SynapseConfiguration is used to store the SynapseTaskManager object and share
it among modules (all modules should look to get the SynapseTaskManager from
the SynapseConfiguration. If it is not there it should be considered an error)
- This guarantees proper initialization and clean up in all environments,
including OSGi platforms
* Proper initialization of the task manager at Axis2SynapseController
Modified:
synapse/branches/1.3/modules/core/src/main/java/org/apache/synapse/Axis2SynapseController.java
synapse/branches/1.3/modules/core/src/main/java/org/apache/synapse/config/SynapseConfiguration.java
synapse/branches/1.3/modules/core/src/main/java/org/apache/synapse/startup/quartz/SimpleQuartz.java
synapse/branches/1.3/modules/tasks/src/main/java/org/apache/synapse/task/SynapseTaskManager.java
Modified:
synapse/branches/1.3/modules/core/src/main/java/org/apache/synapse/Axis2SynapseController.java
URL:
http://svn.apache.org/viewvc/synapse/branches/1.3/modules/core/src/main/java/org/apache/synapse/Axis2SynapseController.java?rev=817502&r1=817501&r2=817502&view=diff
==============================================================================
---
synapse/branches/1.3/modules/core/src/main/java/org/apache/synapse/Axis2SynapseController.java
(original)
+++
synapse/branches/1.3/modules/core/src/main/java/org/apache/synapse/Axis2SynapseController.java
Tue Sep 22 04:45:43 2009
@@ -69,6 +69,9 @@
/** The Axis2 listener Manager */
private ListenerManager listenerManager;
+ /** The Synapse task manager which contains the task scheduler and the
task repository */
+ private SynapseTaskManager synapseTaskManager;
+
/** The Axis2 configuration context used by Synapse */
private ConfigurationContext configurationContext;
@@ -227,7 +230,9 @@
transportHelper.pauseSenders();
// put tasks on hold
- SynapseTaskManager.getInstance().pauseAll();
+ if (synapseTaskManager != null && synapseTaskManager.isInitialized()) {
+ synapseTaskManager.pauseAll();
+ }
log.info("Entered maintenence mode");
}
@@ -244,7 +249,9 @@
transportHelper.resumeSenders();
// resume tasks
- SynapseTaskManager.getInstance().resumeAll();
+ if (synapseTaskManager != null && synapseTaskManager.isInitialized()) {
+ synapseTaskManager.resumeAll();
+ }
log.info("Resumed normal operation from maintenence mode");
}
@@ -255,8 +262,8 @@
public void stop() {
try {
// stop tasks
- if (SynapseTaskManager.getInstance().isInitialized()) {
- SynapseTaskManager.getInstance().cleanup();
+ if (synapseTaskManager != null &&
synapseTaskManager.isInitialized()) {
+ synapseTaskManager.cleanup();
}
// stop the listener manager
@@ -396,6 +403,10 @@
addServerIPAndHostEnrties();
+ if (synapseTaskManager != null && synapseTaskManager.isInitialized()) {
+ synapseConfiguration.setTaskManager(synapseTaskManager);
+ }
+
return synapseConfiguration;
}
@@ -448,9 +459,12 @@
log.info("Waiting for: " + pendingCallbacks + "
callbacks/replies..");
}
- int runningTasks =
SynapseTaskManager.getInstance().getTaskScheduler().getRunningTaskCount();
- if (runningTasks > 0) {
- log.info("Waiting for : " + runningTasks + " tasks to
complete..");
+ int runningTasks = 0;
+ if (synapseTaskManager != null &&
synapseTaskManager.isInitialized()) {
+ runningTasks =
synapseTaskManager.getTaskScheduler().getRunningTaskCount();
+ if (runningTasks > 0) {
+ log.info("Waiting for : " + runningTasks + " tasks to
complete..");
+ }
}
// it is safe to stop if all used listener threads, callbacks and
tasks are zero
@@ -675,13 +689,7 @@
*/
private void initTaskManager(ServerContextInformation
serverContextInformation) {
- SynapseTaskManager synapseTaskManager =
SynapseTaskManager.getInstance();
- if (synapseTaskManager.isInitialized()) {
- if (log.isDebugEnabled()) {
- log.debug("SynapseTaskManager has been already initialized.");
- }
- return;
- }
+ synapseTaskManager = new SynapseTaskManager();
Object repo =
serverContextInformation.getProperty(TaskConstants.TASK_DESCRIPTION_REPOSITORY);
Modified:
synapse/branches/1.3/modules/core/src/main/java/org/apache/synapse/config/SynapseConfiguration.java
URL:
http://svn.apache.org/viewvc/synapse/branches/1.3/modules/core/src/main/java/org/apache/synapse/config/SynapseConfiguration.java?rev=817502&r1=817501&r2=817502&view=diff
==============================================================================
---
synapse/branches/1.3/modules/core/src/main/java/org/apache/synapse/config/SynapseConfiguration.java
(original)
+++
synapse/branches/1.3/modules/core/src/main/java/org/apache/synapse/config/SynapseConfiguration.java
Tue Sep 22 04:45:43 2009
@@ -117,6 +117,12 @@
private List<SynapseObserver> observers = new ArrayList<SynapseObserver>();
/**
+ * The singleton task manager instance which contains the task description
repository and the
+ * scheduler
+ */
+ private SynapseTaskManager taskManager;
+
+ /**
* Add a named sequence into the local registry. If a sequence already
exists by the specified
* key a runtime exception is thrown.
*
@@ -936,10 +942,11 @@
stp.destroy();
}
- SynapseTaskManager synapseTaskManager =
SynapseTaskManager.getInstance();
- TaskScheduler taskScheduler = synapseTaskManager.getTaskScheduler();
- if (taskScheduler != null && taskScheduler.isInitialized()) {
- taskScheduler.shutDown();
+ if (taskManager != null && taskManager.isInitialized()) {
+ TaskScheduler taskScheduler = taskManager.getTaskScheduler();
+ if (taskScheduler != null && taskScheduler.isInitialized()) {
+ taskScheduler.shutDown();
+ }
}
// clear session information used for SA load balancing
@@ -1072,6 +1079,14 @@
return Collections.unmodifiableList(observers);
}
+ public SynapseTaskManager getTaskManager() {
+ return taskManager;
+ }
+
+ public void setTaskManager(SynapseTaskManager taskManager) {
+ this.taskManager = taskManager;
+ }
+
private void assertAlreadyExists(String key, String type) {
if (key == null || "".equals(key)) {
Modified:
synapse/branches/1.3/modules/core/src/main/java/org/apache/synapse/startup/quartz/SimpleQuartz.java
URL:
http://svn.apache.org/viewvc/synapse/branches/1.3/modules/core/src/main/java/org/apache/synapse/startup/quartz/SimpleQuartz.java?rev=817502&r1=817501&r2=817502&view=diff
==============================================================================
---
synapse/branches/1.3/modules/core/src/main/java/org/apache/synapse/startup/quartz/SimpleQuartz.java
(original)
+++
synapse/branches/1.3/modules/core/src/main/java/org/apache/synapse/startup/quartz/SimpleQuartz.java
Tue Sep 22 04:45:43 2009
@@ -48,7 +48,7 @@
private TaskDescription taskDescription;
- private final SynapseTaskManager synapseTaskManager =
SynapseTaskManager.getInstance();
+ private SynapseTaskManager synapseTaskManager;
public QName getTagQName() {
return SimpleQuartzFactory.TASK;
@@ -85,8 +85,14 @@
}
SynapseConfiguration synapseConfiguration =
synapseEnvironment.getSynapseConfiguration();
-
- if (!synapseTaskManager.isInitialized()) {
+ synapseTaskManager = synapseConfiguration.getTaskManager();
+ if (synapseTaskManager == null) {
+ log.error("SynapseTaskManager is not available in the
SynapseConfiguration. Tasks " +
+ "cannot be initialized.");
+ return;
+ } else if (!synapseTaskManager.isInitialized()) {
+ log.warn("SynapseTaskManager is not properly initialized.
Initializing now with " +
+ "default parameters.");
synapseTaskManager.init(null, null);
}
Modified:
synapse/branches/1.3/modules/tasks/src/main/java/org/apache/synapse/task/SynapseTaskManager.java
URL:
http://svn.apache.org/viewvc/synapse/branches/1.3/modules/tasks/src/main/java/org/apache/synapse/task/SynapseTaskManager.java?rev=817502&r1=817501&r2=817502&view=diff
==============================================================================
---
synapse/branches/1.3/modules/tasks/src/main/java/org/apache/synapse/task/SynapseTaskManager.java
(original)
+++
synapse/branches/1.3/modules/tasks/src/main/java/org/apache/synapse/task/SynapseTaskManager.java
Tue Sep 22 04:45:43 2009
@@ -31,14 +31,14 @@
private static final Log log = LogFactory.getLog(SynapseTaskManager.class);
- private static SynapseTaskManager INSTANCE = new SynapseTaskManager();
-
private TaskDescriptionRepository taskDescriptionRepository;
private TaskScheduler taskScheduler;
private boolean initialized = false;
- public static SynapseTaskManager getInstance() {
- return INSTANCE;
+ public SynapseTaskManager() {
+ if (log.isDebugEnabled()) {
+ log.debug("Created the SynapseTaskManager singleton instance");
+ }
}
/**
@@ -53,6 +53,13 @@
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 {