A bundle can use the Coordinator service to create Coordination
objects. Once a Coordination object is created, it can be
pushed on the thread local Coordination stack to
be an implicit parameter as the current Coordination for calls to other
parties, or it can be passed directly to other parties as an argument. The
current Coordination, which is on the top of the current thread's thread
local Coordination stack, can be obtained with peek().
Any active Coordinations created by a bundle must be terminated when the
bundle releases the Coordinator service. The Coordinator service must
fail these Coordinations with the
RELEASED exception.
A Participant can register to participate in a Coordination and receive notification of the
termination of the Coordination.
The following example code shows a example usage of the Coordinator service.
void foo() {
Coordination c = coordinator.begin("work", 0);
try {
doWork();
} catch (Exception e) {
c.fail(e);
} finally {
c.end();
}
}
In the doWork method, code can be called that requires notification
of the termination of the Coordination. The doWork method can then
register a Participant with the Coordination.
void doWork() {
if (coordinator.addParticipant(this)) {
beginWork();
} else {
beginWork();
finishWork();
}
}
void ended(Coordination c) {
finishWork();
}
void failed(Coordination c) {
undoWork();
}
| Modifier and Type | Method and Description |
|---|---|
| public boolean | Returns: false if there was no current Coordination, otherwise
returns true.The Participant to register with the current
Coordination. The participant must not be participant)null.Register a Participant with the |
| public Coordination | Returns: A new Coordination objectThe name of this coordination. The name does not have to be
unique but must follow the name, long timeMillis)symbolic-name syntax from the
Core specification.Create a new Coordination and make it the |
| public Coordination | |
| public boolean | Returns: false if there was no current Coordination, otherwise
returns the result from calling
Coordination#fail(Throwable) on the current Coordination.The failure cause. The failure cause must not be
cause)null .Terminate the |
| public Coordination | Returns: A Coordination having with specified id ornull if no
Coordination with the specified id exists, the Coordination with
the specified id is terminated or the caller does not have
CoordinationPermission[ADMIN] for the Coordination with
the specified id.The id of the requested Coordination. id)Returns the Coordination with the specified id. |
| public Collection | Returns: A snapshot of all active Coordinations. If there are no active Coordinations, the returned list will be empty. The returned collection is the property of the caller and can be modified by the caller.Returns a snapshot of all active Coordinations. |
| public Coordination | Returns: The current Coordination ornull if the thread local
Coordination stack is empty.Returns the current Coordination. |
| public Coordination | Returns: The Coordination that was the current Coordination ornull if the thread local Coordination stack is empty.Remove the current Coordination from the thread local Coordination stack. |
| addParticipant | back to summary |
|---|---|
| public boolean addParticipant(Participant participant) Register a Participant with the
If there is no current Coordination, this method does nothing and returns
Otherwise, this method calls
| |
| begin | back to summary |
|---|---|
| public Coordination begin(String name, long timeMillis) Create a new Coordination and make it the
This method does that same thing as calling
| |
| create | back to summary |
|---|---|
| public Coordination create(String name, long timeMillis) Create a new Coordination.
| |
| fail | back to summary |
|---|---|
| public boolean fail(Throwable cause) Terminate the
If there is no current Coordination, this method does nothing and returns
Otherwise, this method returns the result from calling
| |
| getCoordination | back to summary |
|---|---|
| public Coordination getCoordination(long id) Returns the Coordination with the specified id.
| |
| getCoordinations | back to summary |
|---|---|
| public Collection Returns a snapshot of all active Coordinations. Since Coordinations can be terminated at any time, Coordinations in the returned collection can be terminated before the caller examines the returned collection.
The returned collection must only contain the Coordinations for which the
caller has
| |
| peek | back to summary |
|---|---|
| public Coordination peek() Returns the current Coordination. The current Coordination is the Coordination at the top of the thread local Coordination stack. If the thread local Coordination stack is empty, there is no current Coordination. Each Coordinator service maintains thread local Coordination stacks. This method does not alter the thread local Coordination stack.
| |
| pop | back to summary |
|---|---|
| public Coordination pop() Remove the current Coordination from the thread local Coordination stack. The current Coordination is the Coordination at the top of the thread local Coordination stack. If the thread local Coordination stack is empty, there is no current Coordination. Each Coordinator service maintains its own thread local Coordination stacks. This method alters the thread local Coordination stack, if it is not empty, by removing the Coordination at the top of the thread local Coordination stack.
| |