Class AbstractJobBus<CTX,H>
java.lang.Object
org.refcodes.jobbus.AbstractJobBus<CTX,H>
- Type Parameters:
CTX- The context type to use, can by any component, service or POJO.H- The handle type used to reference a job.
- All Implemented Interfaces:
org.refcodes.component.FlushHandle<H>,org.refcodes.component.HandleLookup<H,,org.refcodes.command.Undoable<CTX, ?, ?>> org.refcodes.component.ProgressHandle<H>,org.refcodes.component.ResetHandle<H>,JobBus<CTX,H>
- Direct Known Subclasses:
AbstractJobBusDirectory
The
AbstractJobBus implements the JobBus interface.-
Constructor Summary
ConstructorsConstructorDescriptionAbstractJobBus(CTX aContext, org.refcodes.component.HandleGenerator<H> aHandleGenerator) Instantiates theAbstractJobBuswith the provided context and the providedHandleGenerator.AbstractJobBus(CTX aContext, org.refcodes.component.HandleGenerator<H> aHandleGenerator, ExecutorService aExecutorService) Instantiates theAbstractJobBuswith the provided context and the providedHandleGenerator. -
Method Summary
Modifier and TypeMethodDescriptionExecutes the given job.<RET,E extends Exception>
voidexecute(org.refcodes.command.Undoable<CTX, RET, E> aJob, BiConsumer<RET, E> aResultConsumer) Executes the given job and invokes the providesBiConsumerlambda (closure) upon finished execution.<RET,E extends Exception>
voidExecutes the given job and invokes the providedConsumerlambda (closure) upon finished execution.void<E extends Exception>
EgetException(H aHandle) Gets the exception.protected org.refcodes.command.Undoable<CTX, ?, ?> Gets the job.floatgetProgress(H aHandle) <RET> RETGets the result.<JOB extends org.refcodes.command.Undoable<CTX,RET, ?>, RET>
RETgetResult(JOB aJob) Executes the job and waits for the job's result or an exception.<JOB extends org.refcodes.command.Undoable<CTX,RET, ?>, RET>
RETgetResult(JOB aJob, long aTimeoutMillis) Executes the job and waits for the job's result or an exception or till the timeout has been reached.protected Collection<org.refcodes.command.Undoable<CTX, ?, ?>> Retrieves the list of objects referenced by the handles.handles()Returns the set of handles managed by this implementation.booleanhasException(H aHandle) Determines whether the job identified by the given handle ended with an exception (instead of a regular result).booleanbooleanbooleanhasProgress(H aHandle) booleanbooleanDetermines whether the job identified by the given handle has a regular result (instead of an exception).booleanisExecuted(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) voidvoidwaitForExecution(H aHandle) Waits till the job identified by the given handle finished execution by regularly terminating or by throwing an exception.voidwaitForExecution(H aHandle, long aTimeoutMillis) 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.Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface org.refcodes.component.FlushHandle
flushUnchecked
-
Constructor Details
-
AbstractJobBus
Instantiates theAbstractJobBuswith the provided context and the providedHandleGenerator. It is up to you which context (service,Component, POJO) you want to provide to a job (Undoable) when being executed. Also you can provide anyHandleGeneratoryou thing useful when creating handles. It is up to yourHandleGeneratorto generate unique handle objects. TheJobBusDirectoryactually uses aStringobjects generatingHandleGenerator. Make sure your handles implement theObject.hashCode()andObject.equals(Object)methods as of their method contracts as them handles will be used in collections such asHashMapdata structures.- Parameters:
aContext- The context which is passed to the job (Undoable) instances when being executed.aHandleGenerator- TheHandleGeneratorto be used when generating unique handle objects.
-
AbstractJobBus
public AbstractJobBus(CTX aContext, org.refcodes.component.HandleGenerator<H> aHandleGenerator, ExecutorService aExecutorService) Instantiates theAbstractJobBuswith the provided context and the providedHandleGenerator. It is up to you which context (service,Component, POJO) you want to provide to a job (Undoable) when being executed. Also you can provide anyHandleGeneratoryou thing useful when creating handles. It is up to yourHandleGeneratorto generate unique handle objects. TheJobBusDirectoryactually uses aStringobjects generatingHandleGenerator. Make sure your handles implement theObject.hashCode()andObject.equals(Object)methods as of their method contracts as them handles will be used in collections such asHashMapdata structures.- Parameters:
aContext- The context which is passed to the job (Undoable) instances when being executed.aHandleGenerator- TheHandleGeneratorto be used when generating unique handle objects.aExecutorService- TheExecutorServiceto be used, when null then anExecutorServicesomething likeControlFlowUtility.createCachedExecutorService(boolean)is then retrieved.
-
-
Method Details
-
execute
Executes the given job. By double dispatch the job's execute method is invoked. The Job is provided with a service-bus to be able to perform its task. This is an implementation of the command pattern. -
execute
public <RET,E extends Exception> void execute(org.refcodes.command.Undoable<CTX, RET, E> aJob, BiConsumer<RET, E> aResultConsumer) Executes the given job and invokes the providesBiConsumerlambda (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 theOptionalto be returned by your job. Though consider that theOptionalis 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 theJobBus.execute(Undoable, Consumer)method.- Specified by:
executein interfaceJobBus<CTX,H> - Type Parameters:
RET- the generic typeE- the element type- Parameters:
aJob- The job to be executed.aResultConsumer- TheBiConsumerlambda to be invoked upon finished execution.- See Also:
-
execute
public <RET,E extends Exception> void execute(org.refcodes.command.Undoable<CTX, RET, E> aJob, Consumer<RET> aResultConsumer) Executes the given job and invokes the providedConsumerlambda (closure) upon finished execution. The parameter is passed in case we have an ordinary result, an exceptual situation is "ignored" as theConsumerwill not be invoked in such a case. In case you have to take action upon an exceptional situation, then use theJobBus.execute(Undoable, BiConsumer)method. -
getException
Gets the exception.- Specified by:
getExceptionin interfaceJobBus<CTX,H> - Type Parameters:
E- the element type- Parameters:
aHandle- the handle- Returns:
- the exception
- Throws:
org.refcodes.component.UnknownHandleRuntimeException- the unknown handle runtime exceptionorg.refcodes.command.NotYetExecutedRuntimeException- the not yet executed runtime exceptionorg.refcodes.command.NoExceptionAvailableRuntimeException- the no exception available runtime exception
-
getResult
Gets the result.- Specified by:
getResultin interfaceJobBus<CTX,H> - Type Parameters:
RET- the generic type- Parameters:
aHandle- the handle- Returns:
- the result
- Throws:
org.refcodes.component.UnknownHandleRuntimeException- the unknown handle runtime exceptionorg.refcodes.command.NotYetExecutedRuntimeException- the not yet executed runtime exceptionorg.refcodes.command.NoResultAvailableRuntimeException- the no result available runtime exception
-
hasException
Determines whether the job identified by the given handle ended with an exception (instead of a regular result). Most jobs do not have any exception, i.e. check if the job has been executed and also check if there is a result or an exception before requesting the according information.- Specified by:
hasExceptionin interfaceJobBus<CTX,H> - Parameters:
aHandle- The handle associated to the job in question.- Returns:
- The exception of the job's execution.
-
hasResult
Determines whether the job identified by the given handle has a regular result (instead of an exception). There may be jobs which do not have any result, i.e. check if the job has been executed and also check if there is a result or an exception before requesting the according information. -
isExecuted
Determines whether the job has been executed.- Specified by:
isExecutedin interfaceJobBus<CTX,H> - Parameters:
aHandle- The handle associated to the job in question.- Returns:
- True if the job represented by the handle has been executed.
-
waitForExecution
Waits till the job identified by the given handle finished execution by regularly terminating or by throwing an exception. 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.- Specified by:
waitForExecutionin interfaceJobBus<CTX,H> - Parameters:
aHandle- The handle associated with the provided job.
-
waitForExecution
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. In case the timeout has been reached before execution was finished, then aHandleTimeoutRuntimeExceptionis thrown to abort the waiting loop. This is ehttps://www.metacodes.proly useful when a remote connection is used to managed a distributedJobBusinfrastructure 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.- Specified by:
waitForExecutionin interfaceJobBus<CTX,H> - Parameters:
aHandle- The handle associated with the provided job.aTimeoutMillis- The timeout to wait at most even when execution did not finish. In case the timeout has been reached before execution was finished, then aHandleTimeoutRuntimeExceptionis thrown to abort the waiting loop.
-
getResult
Executes the job and waits for the job's result or an exception.- Specified by:
getResultin interfaceJobBus<CTX,H> - Type Parameters:
JOB- the generic typeRET- The return type of theUndoable's proceedings.- Parameters:
aJob- The job to execute- Returns:
- The result of the job execution. In case the job does not produce a result by default ("void"), then the according exception is thrown. Make sure the job produces a result!
-
getResult
public <JOB extends org.refcodes.command.Undoable<CTX,RET, RET getResult?>, RET> (JOB aJob, long aTimeoutMillis) Executes the job and waits for the job's result or an exception or till the timeout has been reached. In case the timeout has been reached before execution was finished, then aHandleTimeoutRuntimeExceptionis thrown to abort the waiting loop. This is ehttps://www.metacodes.proly useful when a remote connection is used to managed a distributedJobBusinfrastructure and due to connection issues, wait time would be endless.- Specified by:
getResultin interfaceJobBus<CTX,H> - Type Parameters:
JOB- the generic typeRET- The return type of theUndoable's proceedings.- Parameters:
aJob- The job to executeaTimeoutMillis- The timeout to wait at most even when execution did not finish. In case the timeout has been reached before execution was finished, then aHandleTimeoutRuntimeExceptionis thrown to abort the waiting loop.- Returns:
- The result of the job execution. In case the job does not produce a result by default ("void"), then the according exception is thrown. Make sure the job produces a result!
-
hasHandle
-
lookupHandle
-
removeHandle
-
hasProgress
-
getProgress
-
hasReset
-
reset
-
hasFlush
-
flush
- Specified by:
flushin interfaceorg.refcodes.component.FlushHandle<CTX>- Throws:
IOException
-
handleReferences
Retrieves the list of objects referenced by the handles.- Returns:
- A collection with the objects referenced by handles.
-
handles
-
getJob
-