CTX
- The context type to use, can by any Component
, service
or POJO.H
- The handle type used to reference a job.public class JobBusProxyImpl<CTX,H> extends Object implements JobBus<CTX,H>
JobBusProxyImpl
implements a JobBus
proxy: a
JobBus
proxy can use a remote JobBus
whilst only delegating
those operations to the remote JobBus
which can be handled on the
remote system. Any operation requiring asynchronous Thread
operations
is handled by the JobBusProxyImpl
. This is necessary for the
synchronous operations as a) waiting for an asynchronous operation to finish
may result in a timeout caused by the remoting framework and as b) invoking
lambda operations on the proxy will not be propagated to a remote
JobBus
instance as bidirectional remoting usually is not supported by
a remoting framework.Constructor and Description |
---|
JobBusProxyImpl(JobBus<CTX,H> aJobBus) |
JobBusProxyImpl(JobBus<CTX,H> aJobBus,
ExecutorService aExecutorService) |
Modifier and Type | Method and Description |
---|---|
H |
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(H aHandle) |
<E extends Exception> |
getException(H aHandle)
Returns the exception of the job in case it terminated with an error.
|
float |
getProgress(H aHandle) |
<RET> RET |
getResult(H aHandle)
Returns the result of the job as the result of executing the job.
|
<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.
|
boolean |
hasException(H aHandle)
Determines whether the job identified by the given handle ended with an
exception (instead of a regular result).
|
boolean |
hasFlush(H aHandle) |
boolean |
hasHandle(H aHandle) |
boolean |
hasProgress(H aHandle) |
boolean |
hasReset(H aHandle) |
boolean |
hasResult(H aHandle)
Determines whether the job identified by the given handle has a regular
result (instead of an exception).
|
boolean |
isExecuted(H aHandle)
Determines whether the job has been executed.
|
org.refcodes.command.Undoable<CTX,?,?> |
lookupHandle(H aHandle) |
org.refcodes.command.Undoable<CTX,?,?> |
removeHandle(H aHandle) |
void |
reset(H aHandle) |
void |
waitForExecution(H aHandle)
Waits till the job identified by the given handle finished execution by
regularly terminating or by throwing an exception.
|
void |
waitForExecution(H 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 JobBusProxyImpl(JobBus<CTX,H> aJobBus, ExecutorService aExecutorService)
public boolean hasHandle(H aHandle)
public boolean hasProgress(H aHandle) throws org.refcodes.component.UnknownHandleRuntimeException
hasProgress
in interface org.refcodes.component.ProgressHandle<H>
org.refcodes.component.UnknownHandleRuntimeException
public boolean hasReset(H aHandle) throws org.refcodes.component.UnknownHandleRuntimeException
hasReset
in interface org.refcodes.component.ResetHandle<H>
org.refcodes.component.UnknownHandleRuntimeException
public boolean hasFlush(H aHandle) throws org.refcodes.component.UnknownHandleRuntimeException
hasFlush
in interface org.refcodes.component.FlushHandle<H>
org.refcodes.component.UnknownHandleRuntimeException
public org.refcodes.command.Undoable<CTX,?,?> lookupHandle(H aHandle) throws org.refcodes.component.UnknownHandleRuntimeException
public org.refcodes.command.Undoable<CTX,?,?> removeHandle(H aHandle) throws org.refcodes.component.UnknownHandleRuntimeException
public void reset(H aHandle) throws org.refcodes.component.UnknownHandleRuntimeException, org.refcodes.component.UnsupportedHandleOperationRuntimeException
reset
in interface org.refcodes.component.ResetHandle<H>
org.refcodes.component.UnknownHandleRuntimeException
org.refcodes.component.UnsupportedHandleOperationRuntimeException
public float getProgress(H aHandle) throws org.refcodes.component.UnsupportedHandleOperationRuntimeException, org.refcodes.component.UnknownHandleRuntimeException
getProgress
in interface org.refcodes.component.ProgressHandle<H>
org.refcodes.component.UnsupportedHandleOperationRuntimeException
org.refcodes.component.UnknownHandleRuntimeException
public void flush(H aHandle) throws IOException, org.refcodes.component.UnknownHandleRuntimeException, org.refcodes.component.UnsupportedHandleOperationRuntimeException
flush
in interface org.refcodes.component.FlushHandle<H>
IOException
org.refcodes.component.UnknownHandleRuntimeException
org.refcodes.component.UnsupportedHandleOperationRuntimeException
public H execute(org.refcodes.command.Undoable<CTX,?,?> aJob)
JobBus
public boolean isExecuted(H aHandle) throws org.refcodes.component.UnknownHandleRuntimeException
JobBus
isExecuted
in interface JobBus<CTX,H>
aHandle
- The handle associated to the job in question.org.refcodes.component.UnknownHandleRuntimeException
- in case the handle is not unknown.public boolean hasResult(H aHandle) throws org.refcodes.component.UnknownHandleRuntimeException, org.refcodes.command.NotYetExecutedRuntimeException
JobBus
hasResult
in interface JobBus<CTX,H>
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(H aHandle) throws org.refcodes.component.UnknownHandleRuntimeException, org.refcodes.command.NotYetExecutedRuntimeException
JobBus
hasException
in interface JobBus<CTX,H>
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(H aHandle) throws org.refcodes.component.UnknownHandleRuntimeException, org.refcodes.command.NotYetExecutedRuntimeException, org.refcodes.command.NoResultAvailableRuntimeException
JobBus
getResult
in interface JobBus<CTX,H>
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(H aHandle) throws org.refcodes.component.UnknownHandleRuntimeException, org.refcodes.command.NotYetExecutedRuntimeException, org.refcodes.command.NoExceptionAvailableRuntimeException
JobBus
getException
in interface JobBus<CTX,H>
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.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,H>
aJob
- The job to be executed.aResultConsumer
- The BiConsumer
lambda to be invoked upon
finished execution.public void waitForExecution(H aHandle) throws org.refcodes.component.UnknownHandleRuntimeException
JobBus
waitForExecution
in interface JobBus<CTX,H>
aHandle
- The handle associated with the provided job.org.refcodes.component.UnknownHandleRuntimeException
- in case the handle is not unknown.public void waitForExecution(H 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,H>
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,H>
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,H>
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
Copyright © 2017. All rights reserved.