Brooklyn

brooklyn.util.task
[Java] Class BasicTask

java.lang.Object
  brooklyn.util.task.BasicTask
All Implemented Interfaces:
TaskInternal

public class BasicTask

The basic concrete implementation of a Task to be executed. A Task is a wrapper for an executable unit, such as a groovy.lang.Closure or a java.lang.Runnable or java.util.concurrent.Callable and will run in its own java.lang.Thread.

The task can be given an optional displayName and description in its constructor (as named arguments in the first java.util.Map parameter). It is guaranteed to have java.lang.Object#notify() called once whenever the task starts running and once again when the task is about to complete. Due to the way executors work it is ugly to guarantee notification after completion, so instead we notify just before then expect the user to call get() - which will throw errors if the underlying job did so - or blockUntilEnded() which will not throw errors.


Nested Class Summary
interface BasicTask.TaskFinalizer

 
Field Summary
static BasicTask.TaskFinalizer NO_OP

static BasicTask.TaskFinalizer WARN_IF_NOT_RUN

protected java.lang.String blockingDetails

protected Task blockingTask

java.lang.String description

java.lang.String displayName

protected long endTimeUtc

protected java.util.concurrent.Callable job

protected ExecutionList listeners

protected long queuedTimeUtc

protected java.util.concurrent.Future result

protected long startTimeUtc

protected long submitTimeUtc

protected Task submittedByTask

protected java.util.Set tags

protected java.lang.Thread thread

 
Constructor Summary
protected BasicTask()

Constructor needed to prevent confusion in groovy stubs when looking for default constructor,

protected BasicTask(java.util.Map flags)

BasicTask(java.util.concurrent.Callable job)

BasicTask(java.util.Map flags, java.util.concurrent.Callable job)

BasicTask(java.lang.Runnable job)

BasicTask(java.util.Map flags, java.lang.Runnable job)

BasicTask(groovy.lang.Closure job)

BasicTask(java.util.Map flags, groovy.lang.Closure job)

 
Method Summary
void addListener(java.lang.Runnable listener, java.util.concurrent.Executor executor)

void applyTagModifier(Function modifier)

Task asTask()

void blockUntilEnded()

boolean blockUntilEnded(Duration timeout)

void blockUntilStarted()

boolean blockUntilStarted(Duration timeout)

boolean cancel()

boolean cancel(boolean mayInterruptIfRunning)

boolean equals(java.lang.Object obj)

protected void finalize()

java.lang.Object get()

java.lang.Object get(long timeout, java.util.concurrent.TimeUnit unit)

java.lang.Object get(Duration duration)

protected java.lang.String getActiveTaskStatusString(int verbosity)

java.lang.String getBlockingDetails()

Task getBlockingTask()

java.lang.String getDescription()

java.lang.String getDisplayName()

long getEndTimeUtc()

java.lang.Object getExtraStatusText()

java.lang.String getId()

java.util.concurrent.Callable getJob()

ExecutionList getListeners()

java.util.Set getMutableTags()

long getQueuedTimeUtc()

if the job is queued for submission (e.g. by another task) it can indicate that fact (and time) here; note tasks can (and often are) submitted without any queueing, in which case this value may be -1

java.util.concurrent.Future getResult()

long getStartTimeUtc()

java.lang.String getStatusDetail(boolean multiline)

Returns detailed status, suitable for a hover

protected java.lang.String getStatusString(int verbosity)

This method is useful for callers to see the status of a task.

java.lang.String getStatusSummary()

Returns a brief status string

long getSubmitTimeUtc()

Task getSubmittedByTask()

java.util.Set getTags()

java.lang.Thread getThread()

the thread where the task is running, if it is running

java.lang.Object getUnchecked()

java.lang.Object getUnchecked(Duration duration)

int hashCode()

void ignoreIfNotRun()

void initResult(ListenableFuture result)

boolean isBegun()

boolean isCancelled()

boolean isDone()

boolean isError()

Returns true if the task has had an error.

boolean isQueuedAndNotSubmitted()

boolean isQueuedOrSubmitted()

boolean isSubmitted()

protected java.lang.String lookup(java.lang.management.LockInfo info)

allows a task user to specify why a task is blocked; for use immediately before a blocking/wait, and typically cleared immediately afterwards; referenced by management api to inspect a task which is blocking

void markQueued()

marks the task as queued for execution

void resetBlockingDetails()

returns a task that this task is blocked on

void resetBlockingTask()

void runListeners()

java.lang.String setBlockingDetails(java.lang.String blockingDetails)

Task setBlockingTask(Task blockingTask)

returns a textual message giving details while the task is blocked

void setEndTimeUtc(long val)

void setExtraStatusText(java.lang.Object extraStatus)

void setFinalizer(BasicTask.TaskFinalizer f)

void setJob(java.util.concurrent.Callable job)

void setStartTimeUtc(long val)

void setSubmitTimeUtc(long val)

void setSubmittedByTask(Task task)

void setThread(java.lang.Thread thread)

java.lang.String toString()

boolean uncancel()

doesn't resume it, just means if something was cancelled but not submitted it could now be submitted; probably going to be removed and perhaps some mechanism for running again made available

 
Methods inherited from class java.lang.Object
java.lang.Object#wait(long, int), java.lang.Object#wait(long), java.lang.Object#wait(), java.lang.Object#equals(java.lang.Object), java.lang.Object#toString(), java.lang.Object#hashCode(), java.lang.Object#getClass(), java.lang.Object#notify(), java.lang.Object#notifyAll()
 

Field Detail

NO_OP

public static final BasicTask.TaskFinalizer NO_OP


WARN_IF_NOT_RUN

public static final BasicTask.TaskFinalizer WARN_IF_NOT_RUN


blockingDetails

protected java.lang.String blockingDetails


blockingTask

protected Task blockingTask


description

public final java.lang.String description


displayName

public final java.lang.String displayName


endTimeUtc

protected long endTimeUtc


job

protected java.util.concurrent.Callable job


listeners

protected final ExecutionList listeners


queuedTimeUtc

protected long queuedTimeUtc


result

protected java.util.concurrent.Future result


startTimeUtc

protected long startTimeUtc


submitTimeUtc

protected long submitTimeUtc


submittedByTask

protected Task submittedByTask


tags

protected final java.util.Set tags


thread

protected java.lang.Thread thread


 
Constructor Detail

BasicTask

protected BasicTask()
Constructor needed to prevent confusion in groovy stubs when looking for default constructor, The generics on groovy.lang.Closure break it if that is first constructor.


BasicTask

protected BasicTask(java.util.Map flags)


BasicTask

public BasicTask(java.util.concurrent.Callable job)


BasicTask

public BasicTask(java.util.Map flags, java.util.concurrent.Callable job)


BasicTask

public BasicTask(java.lang.Runnable job)


BasicTask

public BasicTask(java.util.Map flags, java.lang.Runnable job)


BasicTask

public BasicTask(groovy.lang.Closure job)


BasicTask

public BasicTask(java.util.Map flags, groovy.lang.Closure job)


 
Method Detail

addListener

@java.lang.Override
public void addListener(java.lang.Runnable listener, java.util.concurrent.Executor executor)


applyTagModifier

@java.lang.Override
public void applyTagModifier(Function modifier)


asTask

@java.lang.Override
public Task asTask()


blockUntilEnded

@java.lang.Override
public void blockUntilEnded()


blockUntilEnded

@java.lang.Overrideboolean started = blockUntilStarted(timeout);
public boolean blockUntilEnded(Duration timeout)


blockUntilStarted

@java.lang.Override
public void blockUntilStarted()


blockUntilStarted

@java.lang.Overrideif (cancelled) throw new CancellationException();
public boolean blockUntilStarted(Duration timeout)


cancel

@java.lang.Override/** doesn't resume it, just means if something was cancelled but not submitted it could now be submitted;
public boolean cancel()


cancel

@java.lang.Overrideboolean cancel = true;
public boolean cancel(boolean mayInterruptIfRunning)


equals

@java.lang.Override
public boolean equals(java.lang.Object obj)


finalize

@java.lang.Override}
protected void finalize()


get

@java.lang.OverrideTasks.setBlockingTask(this);
public java.lang.Object get()


get

@java.lang.Override
public java.lang.Object get(long timeout, java.util.concurrent.TimeUnit unit)


get

@java.lang.Overridewhile (end==null || end > System.currentTimeMillis()) {
public java.lang.Object get(Duration duration)


getActiveTaskStatusString

protected java.lang.String getActiveTaskStatusString(int verbosity)


getBlockingDetails

@java.lang.Overridepublic interface TaskFinalizer {
public java.lang.String getBlockingDetails()


getBlockingTask

@java.lang.Overridepublic void onTaskFinalization(Task t) {
public Task getBlockingTask()


getDescription

@java.lang.Override
public java.lang.String getDescription()


getDisplayName

@java.lang.Overridepublic Task setBlockingTask(Task blockingTask) {
public java.lang.String getDisplayName()


getEndTimeUtc

@java.lang.Override
public long getEndTimeUtc()


getExtraStatusText

@java.lang.Override}
public java.lang.Object getExtraStatusText()


getId

@java.lang.Override
public java.lang.String getId()


getJob

@java.lang.Override
public java.util.concurrent.Callable getJob()


getListeners

@java.lang.Override
public ExecutionList getListeners()


getMutableTags

@java.lang.Override
public java.util.Set getMutableTags()


getQueuedTimeUtc

@java.lang.Override
public long getQueuedTimeUtc()
if the job is queued for submission (e.g. by another task) it can indicate that fact (and time) here; note tasks can (and often are) submitted without any queueing, in which case this value may be -1


getResult

@java.lang.Override
public java.util.concurrent.Future getResult()


getStartTimeUtc

@java.lang.Override
public long getStartTimeUtc()


getStatusDetail

@java.lang.Override/**
public java.lang.String getStatusDetail(boolean multiline)
Returns detailed status, suitable for a hover Plain-text format, with new-lines (and sometimes extra info) if multiline enabled.


getStatusString

protected java.lang.String getStatusString(int verbosity)
This method is useful for callers to see the status of a task. Also for developers to see best practices for examining status fields etc
Parameters:
verbosity - 0 = brief, 1 = one-line with some detail, 2 = lots of detail


getStatusSummary

@java.lang.Override/**
public java.lang.String getStatusSummary()
Returns a brief status string Plain-text format. Reported status if there is one, otherwise state which will be one of:


getSubmitTimeUtc

@java.lang.Override
public long getSubmitTimeUtc()


getSubmittedByTask

@java.lang.Override
public Task getSubmittedByTask()


getTags

@java.lang.Override
public java.util.Set getTags()


getThread

@java.lang.Override
public java.lang.Thread getThread()
the thread where the task is running, if it is running


getUnchecked

@java.lang.Override} catch (Exception e) {
public java.lang.Object getUnchecked()


getUnchecked

@java.lang.Override} catch (Exception e) {
public java.lang.Object getUnchecked(Duration duration)


hashCode

@java.lang.Override
public int hashCode()


ignoreIfNotRun

public void ignoreIfNotRun()


initResult

@java.lang.Overridepublic synchronized void initResult(ListenableFuture result) {
public void initResult(ListenableFuture result)


isBegun

@java.lang.Override}
public boolean isBegun()


isCancelled

@java.lang.Override}
public boolean isCancelled()


isDone

@java.lang.Override}
public boolean isDone()


isError

@java.lang.Overrideif (isCancelled()) return true;
public boolean isError()
Returns true if the task has had an error. Only true if calling get() will throw an exception when it completes (including cancel). Implementations may set this true before completion if they have that insight, or (the default) they may compute it lazily after completion (returning false before completion).


isQueuedAndNotSubmitted

@java.lang.Override}
public boolean isQueuedAndNotSubmitted()


isQueuedOrSubmitted

@java.lang.Override}
public boolean isQueuedOrSubmitted()


isSubmitted

@java.lang.Override}
public boolean isSubmitted()


lookup

protected java.lang.String lookup(java.lang.management.LockInfo info)
allows a task user to specify why a task is blocked; for use immediately before a blocking/wait, and typically cleared immediately afterwards; referenced by management api to inspect a task which is blocking


markQueued

@java.lang.OverridequeuedTimeUtc = System.currentTimeMillis();
public void markQueued()
marks the task as queued for execution


resetBlockingDetails

@java.lang.Overridepublic void setExtraStatusText(Object extraStatus) {
public void resetBlockingDetails()
returns a task that this task is blocked on


resetBlockingTask

@java.lang.Overridepublic Object getExtraStatusText() {
public void resetBlockingTask()


runListeners

@java.lang.Override
public void runListeners()


setBlockingDetails

@java.lang.Override
public java.lang.String setBlockingDetails(java.lang.String blockingDetails)


setBlockingTask

@java.lang.Override/** returns a task that this task is blocked on */
public Task setBlockingTask(Task blockingTask)
returns a textual message giving details while the task is blocked


setEndTimeUtc

@java.lang.Override
public void setEndTimeUtc(long val)


setExtraStatusText

@java.lang.Override}
public void setExtraStatusText(java.lang.Object extraStatus)


setFinalizer

public void setFinalizer(BasicTask.TaskFinalizer f)


setJob

@java.lang.Override
public void setJob(java.util.concurrent.Callable job)


setStartTimeUtc

@java.lang.Override
public void setStartTimeUtc(long val)


setSubmitTimeUtc

@java.lang.Override}
public void setSubmitTimeUtc(long val)


setSubmittedByTask

@java.lang.Override
public void setSubmittedByTask(Task task)


setThread

@java.lang.Override
public void setThread(java.lang.Thread thread)


toString

@java.lang.Override
public java.lang.String toString()


uncancel

@Betacancelled = false;
public boolean uncancel()
doesn't resume it, just means if something was cancelled but not submitted it could now be submitted; probably going to be removed and perhaps some mechanism for running again made available
Since:
0.7.0


 

Brooklyn Multi-Cloud Application Management Platform
brooklyncentral.github.com. Apache License. © 2012.