On 21/11/2016 12:29, Changseok Keum wrote:
Hi All,
I am trying to do test for provisioning of multiple tables(actually
two tables) on an external database.
For the test, I created connectors, resourses and pull tasks for each
tables, and executed two tasks at the almost same time.
I expected the tasks were going to be executed concurrently, but it
did not.
And then I explored provisioning source codes and a found
DisallowConcurrentExecution quartz annotation on
AbstractInterruptableJob class on which TaskJob class extended.
Is it right concept for tasks to be executed not concurrently? Or I
missed something important?
Hi,
Quartz's @DisallowConcurrentExecution [1] ensures that there are no
multiple instances of the same Job class executed concurrently (where
instance is based-upon a JobDetail definition - or in other words based
upon a JobKey).
In other words, it is not the fact that you are concurrently executing
two instances of the TaskJob [2] class that matters, but rather the
associated JobKey, which is in this case built by [3] and depends on the
effective key, e.g. the UUID generated for the task.
As a result, there is nothing blocking two distinct PullTask instances
to run concurrently.
There are, however, specific conditions to met, in order to effectively
run propagation tasks concurrently; you can read more about this aspect
at [4].
HTH
Regards.
[1]
http://www.quartz-scheduler.org/api/2.2.1/org/quartz/DisallowConcurrentExecution.html
[2]
https://github.com/apache/syncope/blob/2_0_X/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/TaskJob.java
[3]
https://github.com/apache/syncope/blob/2_0_X/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/job/JobNamer.java#L58
[4] https://syncope.apache.org/docs/reference-guide.html#propagation
--
Francesco Chicchiriccò
Tirasa - Open Source Excellence
http://www.tirasa.net/
Member at The Apache Software Foundation
Syncope, Cocoon, Olingo, CXF, OpenJPA, PonyMail
http://home.apache.org/~ilgrosso/