Classes implementing this interface let you execute code guarded by mutual exclusion locks.
You should use methods of this class directly only if there are no adequate methods
in com.atlassian.bamboo.core.ScopedExclusionServiceHelper class.
All taken locks are exclusive. A lock is always taken in a scope. For example a lock on PROJECT_DATA scope defined by
project name 'MINE-ALLMINE' would be different than a lock taken on JOB_KEY scope with name 'MINE-ALLMINE'.
You can use any object for locking, but since this service is shared, it's very important to lock the same
objects that other users of service lock within the same exclusion scope. That's why use of ExclusionScopeType or, better yet
com.atlassian.bamboo.core.ScopedExclusionServiceHelper is strongly recommended.
Executes code with a new, unique name generated within given exclusion scope and locked for exclusive use. Objects to lock are generated
by objectGenerator. If the generated object is already locked, the generator will be asked for a new object.
The whole generation (including all unsuccesful lock attempts) will be run with an exclusive lock held on objectToLockDuringGeneration within generationScope.
As soon as a valid object, locked within generatedObjectScope is generated:
- other generations within the same scope may continue and
- the function will be called.
- the generation lock is dropped