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 ExecutionManager em

discouraged, but used in tests. not always set (e.g. if it is a scheduled task)

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()

ExecutionManager getExecutionManager()

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 initExecutionManager(ExecutionManager em)

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()

void resetBlockingTask()

void runListeners()

void setBlockingDetails(java.lang.String blockingDetails)

returns a textual message giving details while the task is blocked

void setBlockingTask(Task blockingTask)

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()

 
Methods inherited from class java.lang.Object
java.lang.Object#wait(), java.lang.Object#wait(long), java.lang.Object#wait(long, int), 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


em

protected ExecutionManager em;
protected ExecutionManager em
discouraged, but used in tests. not always set (e.g. if it is a scheduled task)
deprecated:
in 0.4.0; use current execution context, as per CompoundTask.submitXxx


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

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


applyTagModifier

public void applyTagModifier(Function modifier)


asTask

@Override
public Task asTask()


blockUntilEnded

public void blockUntilEnded()


blockUntilEnded

boolean started = blockUntilStarted(timeout);
public boolean blockUntilEnded(Duration timeout)


blockUntilStarted

public void blockUntilStarted()


blockUntilStarted

if (cancelled) throw new CancellationException();
public boolean blockUntilStarted(Duration timeout)


cancel

@Override
public boolean cancel()


cancel

boolean cancel = true;
public boolean cancel(boolean mayInterruptIfRunning)


equals

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


finalize

return job;
protected void finalize()


get

Tasks.setBlockingTask(this);
public java.lang.Object get()


get

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


get

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


getActiveTaskStatusString

protected java.lang.String getActiveTaskStatusString(int verbosity)


getBlockingDetails

public static final TaskFinalizer WARN_IF_NOT_RUN = new TaskFinalizer() {
public java.lang.String getBlockingDetails()


getBlockingTask

return;
public Task getBlockingTask()


getDescription

this.blockingTask = null;
public java.lang.String getDescription()


getDisplayName

this.blockingDetails = null;
public java.lang.String getDisplayName()


getEndTimeUtc

public long getEndTimeUtc()


getExecutionManager

public ExecutionManager getExecutionManager()


getExtraStatusText

public void onTaskFinalization(Task t) {
public java.lang.Object getExtraStatusText()


getId

@Override
public java.lang.String getId()


getJob

public java.util.concurrent.Callable getJob()


getListeners

public ExecutionList getListeners()


getMutableTags

public java.util.Set getMutableTags()


getQueuedTimeUtc

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

public java.util.concurrent.Future getResult()


getStartTimeUtc

public long getStartTimeUtc()


getStatusDetail

/**
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

/**
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

public long getSubmitTimeUtc()


getSubmittedByTask

public Task getSubmittedByTask()


getTags

public java.util.Set getTags()


getThread

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


getUnchecked

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


getUnchecked

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


hashCode

@Override
public int hashCode()


ignoreIfNotRun

public void ignoreIfNotRun()


initExecutionManager

public void initExecutionManager(ExecutionManager em) {
public void initExecutionManager(ExecutionManager em)


initResult

public synchronized void initResult(ListenableFuture result) {
public void initResult(ListenableFuture result)


isBegun

}
public boolean isBegun()


isCancelled

}
public boolean isCancelled()


isDone

}
public boolean isDone()


isError

if (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

}
public boolean isQueuedAndNotSubmitted()


isQueuedOrSubmitted

}
public boolean isQueuedOrSubmitted()


isSubmitted

}
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

queuedTimeUtc = System.currentTimeMillis();
public void markQueued()
marks the task as queued for execution


resetBlockingDetails

@Override
public void resetBlockingDetails()


resetBlockingTask

// ---- add a way to warn if task is not run
public void resetBlockingTask()


runListeners

public void runListeners()


setBlockingDetails

@Override
public void setBlockingDetails(java.lang.String blockingDetails)
returns a textual message giving details while the task is blocked


setBlockingTask

@Override
public void setBlockingTask(Task blockingTask)


setEndTimeUtc

public void setEndTimeUtc(long val)


setExtraStatusText

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


setFinalizer

public void setFinalizer(BasicTask.TaskFinalizer f)


setJob

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


setStartTimeUtc

public void setStartTimeUtc(long val)


setSubmitTimeUtc

}
public void setSubmitTimeUtc(long val)


setSubmittedByTask

public void setSubmittedByTask(Task task)


setThread

public void setThread(java.lang.Thread thread)


toString

@Override
public java.lang.String toString()


 

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