CMD
- The job (Undoable
) type to use.CTX
- The context type to use, can by any Component
, service
or POJO.H
- The handle type used to reference a job.public class JobBusImpl<CTX> extends Object implements JobBus<CTX,String>
JobBusImpl
is a ready to use implementation of a composite
JobBus
wrapping a JobBusDirectory
(actually a JobBus
is sufficient) and delegating the method calls to the wrapped instances. The
JobBusDirectory
is considered to be the master from which multiple
JobBus
instances can be derived. In case none JobBusDirectory
is considered to be required, use the empty constructor which creates its
internal JobBusDirectory
.
In case you want to extend the JobBusImpl
with setting concrete
parameters for the generic types, please also overwrite the hook method
Constructor and Description |
---|
JobBusImpl(CTX aContext)
Instantiates the
JobBusImpl with the provided context and and a
pre-defined String objects generating HandleGenerator . |
JobBusImpl(JobBus<CTX,String> aJobBus)
Instantiates the
JobBusImpl by using the provided JobBus
to which the method calls are delegated. |
Modifier and Type | Method and Description |
---|---|
protected JobBus<CTX,String> |
createJobBus(CTX aContext)
Hook method pre-implemented useful when extending this class.
|
String |
execute(org.refcodes.command.Undoable<CTX,?,?> aJob)
Executes the given job.
|
<RET,E extends Exception> |
execute(org.refcodes.command.Undoable<CTX,RET,E> aJob,
BiConsumer<RET,E> aResultConsumer)
Executes the given job and invokes the provides
BiConsumer lambda
(closure) upon finished execution. |
<RET,E extends Exception> |
execute(org.refcodes.command.Undoable<CTX,RET,E> aJob,
Consumer<RET> aResultConsumer)
Executes the given job and invokes the provided
Consumer lambda
(closure) upon finished execution. |
void |
flush(String aHandle) |
<E extends Exception> |
getException(String aHandle)
Returns the exception of the job in case it terminated with an error.
|
float |
getProgress(String aHandle) |
<JOB extends org.refcodes.command.Undoable<CTX,RET,?>,RET> |
getResult(JOB aJob)
Executes the job and waits for the job's result or an exception.
|
<JOB extends org.refcodes.command.Undoable<CTX,RET,?>,RET> |
getResult(JOB aJob,
long aTimeoutInMs)
Executes the job and waits for the job's result or an exception or till
the timeout has been reached.
|
<RET> RET |
getResult(String aHandle)
Returns the result of the job as the result of executing the job.
|
boolean |
hasException(String aHandle)
Determines whether the job identified by the given handle ended with an
exception (instead of a regular result).
|
boolean |
hasFlush(String aHandle) |
boolean |
hasHandle(String aHandle) |
boolean |
hasProgress(String aHandle) |
boolean |
hasReset(String aHandle) |
boolean |
hasResult(String aHandle)
Determines whether the job identified by the given handle has a regular
result (instead of an exception).
|
boolean |
isExecuted(String aHandle)
Determines whether the job has been executed.
|
org.refcodes.command.Undoable<CTX,?,?> |
lookupHandle(String aHandle) |
org.refcodes.command.Undoable<CTX,?,?> |
removeHandle(String aHandle) |
void |
reset(String aHandle) |
void |
waitForExecution(String aHandle)
Waits till the job identified by the given handle finished execution by
regularly terminating or by throwing an exception.
|
void |
waitForExecution(String aHandle,
long aTimeoutInMs)
Waits till the job identified by the given handle finished execution by
regularly terminating or by throwing an exception or till the timeout has
been reached.
|
public JobBusImpl(JobBus<CTX,String> aJobBus)
JobBusImpl
by using the provided JobBus
to which the method calls are delegated. Usually this constructor is used
when you created a master JobBusDirectory
from which client
JobBus
instances are to be derived.
In case you do not require a master JobBusDirectory
, please use
the constructor JobBusImpl(Object)
, which constructs the
JobBus
delegate with the the provided context.aJobBus
- The JobBus
to delegate the method calls to.public JobBusImpl(CTX aContext)
JobBusImpl
with the provided context and and a
pre-defined String
objects generating HandleGenerator
. It
is up to you which context (service,
Component
, POJO) you want to provide to a
job (Undoable
) when being executed.aContext
- The context which is passed to the job (Undoable
)
instances when being executed.public boolean hasHandle(String aHandle)
public boolean hasProgress(String aHandle) throws org.refcodes.component.UnknownHandleRuntimeException
hasProgress
in interface org.refcodes.component.ProgressHandle<String>
org.refcodes.component.UnknownHandleRuntimeException
public boolean hasReset(String aHandle) throws org.refcodes.component.UnknownHandleRuntimeException
hasReset
in interface org.refcodes.component.ResetHandle<String>
org.refcodes.component.UnknownHandleRuntimeException
public boolean hasFlush(String aHandle) throws org.refcodes.component.UnknownHandleRuntimeException
hasFlush
in interface org.refcodes.component.FlushHandle<String>
org.refcodes.component.UnknownHandleRuntimeException
public float getProgress(String aHandle) throws org.refcodes.component.UnsupportedHandleOperationRuntimeException, org.refcodes.component.UnknownHandleRuntimeException
getProgress
in interface org.refcodes.component.ProgressHandle<String>
org.refcodes.component.UnsupportedHandleOperationRuntimeException
org.refcodes.component.UnknownHandleRuntimeException
public org.refcodes.command.Undoable<CTX,?,?> lookupHandle(String aHandle) throws org.refcodes.component.UnknownHandleRuntimeException
public void reset(String aHandle) throws org.refcodes.component.UnknownHandleRuntimeException, org.refcodes.component.UnsupportedHandleOperationRuntimeException
reset
in interface org.refcodes.component.ResetHandle<String>
org.refcodes.component.UnknownHandleRuntimeException
org.refcodes.component.UnsupportedHandleOperationRuntimeException
public void flush(String aHandle) throws IOException, org.refcodes.component.UnknownHandleRuntimeException, org.refcodes.component.UnsupportedHandleOperationRuntimeException
flush
in interface org.refcodes.component.FlushHandle<String>
IOException
org.refcodes.component.UnknownHandleRuntimeException
org.refcodes.component.UnsupportedHandleOperationRuntimeException
public org.refcodes.command.Undoable<CTX,?,?> removeHandle(String aHandle) throws org.refcodes.component.UnknownHandleRuntimeException
public String execute(org.refcodes.command.Undoable<CTX,?,?> aJob)
JobBus
public <RET,E extends Exception> void execute(org.refcodes.command.Undoable<CTX,RET,E> aJob, Consumer<RET> aResultConsumer)
JobBus
Consumer
lambda
(closure) upon finished execution. The parameter is passed in case we
have an ordinary result, an exceptual situation is "ignored" as the
Consumer
will not be invoked in such a case.
In case you have to take action upon an exceptional situation, then use
the JobBus.execute(Undoable, BiConsumer)
method.public <RET,E extends Exception> void execute(org.refcodes.command.Undoable<CTX,RET,E> aJob, BiConsumer<RET,E> aResultConsumer)
JobBus
BiConsumer
lambda
(closure) upon finished execution. The first parameter is passed in case
we have an ordinary result, the second one is passed in case we have an
exceptional situation. Either the one parameter or the other one is
passed, never both of them at the same invocation! In case both arguments
are null, then your job has returned null. Consider using the
Optional
to be returned by your job. Though consider that the
Optional
is NOT serializable which could cause problems with
remote job execution!
In case you do not have to take action upon an exceptional situation,
then use the JobBus.execute(Undoable, Consumer)
method.execute
in interface JobBus<CTX,String>
aJob
- The job to be executed.aResultConsumer
- The BiConsumer
lambda to be invoked upon
finished execution.public void waitForExecution(String aHandle) throws org.refcodes.component.UnknownHandleRuntimeException
JobBus
waitForExecution
in interface JobBus<CTX,String>
aHandle
- The handle associated with the provided job.org.refcodes.component.UnknownHandleRuntimeException
- in case the handle is not unknown.public void waitForExecution(String aHandle, long aTimeoutInMs) throws org.refcodes.component.UnknownHandleRuntimeException, org.refcodes.component.HandleTimeoutRuntimeException
JobBus
HandleTimeoutRuntimeException
is thrown to abort the waiting
loop. This is especially useful when a remote connection is used to
managed a distributed JobBus
infrastructure and due to connection
issues, wait time would be endless.
The handle my be used to determine if there was an exception or not and
to retrieve the result or in case of an exception the exception object.waitForExecution
in interface JobBus<CTX,String>
aHandle
- The handle associated with the provided job.aTimeoutInMs
- The timeout to wait at most even when execution did
not finish. In case the timeout has been reached before execution
was finished, then a HandleTimeoutRuntimeException
is
thrown to abort the waiting loop.org.refcodes.component.UnknownHandleRuntimeException
- Thrown in case the handle is not
unknown.org.refcodes.component.HandleTimeoutRuntimeException
- Thrown in case the timeout was
reached before execution finished.public <JOB extends org.refcodes.command.Undoable<CTX,RET,?>,RET> RET getResult(JOB aJob) throws org.refcodes.command.NoResultAvailableRuntimeException
JobBus
getResult
in interface JobBus<CTX,String>
RET
- The return type of the Undoable
's proceedings.aJob
- The job to executeorg.refcodes.command.NoResultAvailableRuntimeException
- in case a job has been executed
which never delivers a result or which terminated with an
exception. Use JobBus.hasException(Object)
and
JobBus.hasResult(Object)
to clarify which state your
Undoable
(job) is in.public <JOB extends org.refcodes.command.Undoable<CTX,RET,?>,RET> RET getResult(JOB aJob, long aTimeoutInMs) throws org.refcodes.command.NoResultAvailableRuntimeException, org.refcodes.component.HandleTimeoutRuntimeException
JobBus
HandleTimeoutRuntimeException
is thrown to abort the waiting
loop. This is especially useful when a remote connection is used to
managed a distributed JobBus
infrastructure and due to connection
issues, wait time would be endless.getResult
in interface JobBus<CTX,String>
RET
- The return type of the Undoable
's proceedings.aJob
- The job to executeaTimeoutInMs
- The timeout to wait at most even when execution did
not finish. In case the timeout has been reached before execution
was finished, then a HandleTimeoutRuntimeException
is
thrown to abort the waiting loop.org.refcodes.command.NoResultAvailableRuntimeException
- in case a job has been executed
which never delivers a result or which terminated with an
exception. Use JobBus.hasException(Object)
and
JobBus.hasResult(Object)
to clarify which state your
Undoable
(job) is in.org.refcodes.component.HandleTimeoutRuntimeException
public boolean isExecuted(String aHandle) throws org.refcodes.component.UnknownHandleRuntimeException
JobBus
isExecuted
in interface JobBus<CTX,String>
aHandle
- The handle associated to the job in question.org.refcodes.component.UnknownHandleRuntimeException
- in case the handle is not unknown.public boolean hasResult(String aHandle) throws org.refcodes.component.UnknownHandleRuntimeException, org.refcodes.command.NotYetExecutedRuntimeException
JobBus
hasResult
in interface JobBus<CTX,String>
aHandle
- The handle associated to the job in question.org.refcodes.component.UnknownHandleRuntimeException
- in case the handle is not unknown.org.refcodes.command.NotYetExecutedRuntimeException
- in case the job has not been
executed yetpublic boolean hasException(String aHandle) throws org.refcodes.component.UnknownHandleRuntimeException, org.refcodes.command.NotYetExecutedRuntimeException
JobBus
hasException
in interface JobBus<CTX,String>
aHandle
- The handle associated to the job in question.org.refcodes.component.UnknownHandleRuntimeException
- in case the handle is not unknown.org.refcodes.command.NotYetExecutedRuntimeException
- in case the job has not been
executed yet.public <RET> RET getResult(String aHandle) throws org.refcodes.component.UnknownHandleRuntimeException, org.refcodes.command.NotYetExecutedRuntimeException, org.refcodes.command.NoResultAvailableRuntimeException
JobBus
getResult
in interface JobBus<CTX,String>
RET
- As of convenience, the return type of the Undoable
instance's proceedings. CAUTION: As the handle does not permit
insight on the Undoable
(job) instance's return type, you
may end up with a class cast exception in case you do not make
sure that the result is of the expected type aHandle
- The handle associated to the job in question.org.refcodes.component.UnknownHandleRuntimeException
- in case the handle is not unknown.org.refcodes.command.NotYetExecutedRuntimeException
- in case the job has not been
executed yet.org.refcodes.command.NoResultAvailableRuntimeException
- in case the job did not provide
a result after execution.public <E extends Exception> E getException(String aHandle) throws org.refcodes.component.UnknownHandleRuntimeException, org.refcodes.command.NotYetExecutedRuntimeException, org.refcodes.command.NoExceptionAvailableRuntimeException
JobBus
getException
in interface JobBus<CTX,String>
aHandle
- The handle associated to the job in question.org.refcodes.component.UnknownHandleRuntimeException
- in case the handle is not unknown.org.refcodes.command.NotYetExecutedRuntimeException
- in case the job has not been
executed yet.org.refcodes.command.NoExceptionAvailableRuntimeException
- in case the job did not
provide an exception after execution.Copyright © 2017. All rights reserved.