Hi Anjana,
This [1] happens when we schedule tasks with different tenants. When I dug
deep I saw that tasks try to update its state to FINISH state using
TriggerListeners. I believe this is where the problem is. It seems the last
registered listener is getting notified for all the tasks. I think it is
because we are not using a matcher, the registered listener receives events
for all the triggers [2].
Therefore, I changed the code as in the attached diff and I could not
observe the issue any more. When I debugged I could see that all the task's
states are getting updated properly. Can you please help us on this matter ?
[1]
org.wso2.carbon.ntask.common.TaskException: The task 'super_tenent' does
not exist
at
org.wso2.carbon.ntask.core.impl.RegistryBasedTaskRepository.getTaskMetadataPropResource(RegistryBasedTaskRepository.java:310)
at
org.wso2.carbon.ntask.core.impl.RegistryBasedTaskRepository.setTaskMetadataProp(RegistryBasedTaskRepository.java:323)
at org.wso2.carbon.ntask.core.TaskUtils.setTaskState(TaskUtils.java:109)
at org.wso2.carbon.ntask.core.TaskUtils.setTaskFinished(TaskUtils.java:146)
at
org.wso2.carbon.ntask.core.impl.AbstractQuartzTaskManager$TaskTriggerListener.triggerComplete(AbstractQuartzTaskManager.java:424)
at
org.quartz.core.QuartzScheduler.notifyTriggerListenersComplete(QuartzScheduler.java:1876)
at
org.quartz.core.JobRunShell.notifyTriggerListenersComplete(JobRunShell.java:377)
at org.quartz.core.JobRunShell.run(JobRunShell.java:254)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)
Caused by:
*org.wso2.carbon.registry.core.exceptions.ResourceNotFoundException*:
Resource does not exist at path
/_system/governance/repository/components/org.wso2.carbon.tasks/definitions/1/ESB_TASK/super_tenent
at
org.wso2.carbon.registry.core.jdbc.EmbeddedRegistry.get(EmbeddedRegistry.java:532)
at
org.wso2.carbon.registry.core.caching.CacheBackedRegistry.getGhostResourceFromCache(CacheBackedRegistry.java:194)
at
org.wso2.carbon.registry.core.caching.CacheBackedRegistry.get(CacheBackedRegistry.java:167)
at
org.wso2.carbon.registry.core.session.UserRegistry.getInternal(UserRegistry.java:613)
at
org.wso2.carbon.registry.core.session.UserRegistry.access$400(UserRegistry.java:60)
at
org.wso2.carbon.registry.core.session.UserRegistry$5.run(UserRegistry.java:596)
at
org.wso2.carbon.registry.core.session.UserRegistry$5.run(UserRegistry.java:593)
at java.security.AccessController.doPrivileged(Native Method)
at
org.wso2.carbon.registry.core.session.UserRegistry.get(UserRegistry.java:593)
at
org.wso2.carbon.ntask.core.impl.RegistryBasedTaskRepository.getTaskMetadataPropResource(RegistryBasedTaskRepository.java:306)
... 12 more
[2]
http://quartz-scheduler.org/api/2.2.0/org/quartz/ListenerManager.html#addTriggerListener(org.quartz.TriggerListener)
--
Regards,
*Shafreen*
Software Engineer
WSO2 Inc
Mobile : 077-556-395-1
diff --git
a/components/ntask/org.wso2.carbon.ntask.core/src/main/java/org/wso2/carbon/ntask/core/impl/AbstractQuartzTaskManager.java
b/components/ntask/org.wso2.carbon.ntask.core/src/main/java/org/wso2/carbon/ntask/core/impl/AbstractQuartzTaskManager.java
index 8bc2521..56eddce 100644
---
a/components/ntask/org.wso2.carbon.ntask.core/src/main/java/org/wso2/carbon/ntask/core/impl/AbstractQuartzTaskManager.java
+++
b/components/ntask/org.wso2.carbon.ntask.core/src/main/java/org/wso2/carbon/ntask/core/impl/AbstractQuartzTaskManager.java
@@ -20,6 +20,7 @@ import org.apache.commons.logging.LogFactory;
import org.quartz.*;
import org.quartz.Trigger.TriggerState;
import org.quartz.impl.matchers.GroupMatcher;
+import org.quartz.impl.matchers.KeyMatcher;
import org.quartz.spi.OperableTrigger;
import org.wso2.carbon.context.PrivilegedCarbonContext;
import org.wso2.carbon.ntask.common.TaskConstants;
@@ -53,11 +54,6 @@ public abstract class AbstractQuartzTaskManager implements
TaskManager {
public AbstractQuartzTaskManager(TaskRepository taskRepository) throws
TaskException {
this.taskRepository = taskRepository;
this.scheduler = TasksDSComponent.getScheduler();
- try {
- this.getScheduler().getListenerManager().addTriggerListener(new
TaskTriggerListener(TASK_TRIGGER_LISTENER_NAME)) ;
- } catch (SchedulerException e) {
- throw new TaskException("Error in initiating task trigger
listener", Code.UNKNOWN, e);
- }
}
public TaskRepository getTaskRepository() {
@@ -206,6 +202,15 @@ public abstract class AbstractQuartzTaskManager implements
TaskManager {
JobDetail job = JobBuilder.newJob(jobClass).withIdentity(taskName,
taskGroup).usingJobData(
this.getJobDataMapFromTaskInfo(taskInfo)).build();
Trigger trigger = this.getTriggerFromInfo(taskName, taskGroup,
taskInfo.getTriggerInfo());
+
+ try {
+ KeyMatcher<TriggerKey> matcher =
KeyMatcher.keyEquals(trigger.getKey());
+ this.getScheduler().getListenerManager().addTriggerListener(
+ new TaskTriggerListener(trigger.getKey().getGroup() +
trigger.getKey().getName()), matcher);
+ } catch (SchedulerException e) {
+ throw new TaskException("Error in initiating task trigger
listener", Code.UNKNOWN, e);
+ }
+
try {
this.getScheduler().scheduleJob(job, trigger);
if (paused) {
_______________________________________________
Dev mailing list
[email protected]
http://wso2.org/cgi-bin/mailman/listinfo/dev