Class JavaScriptJobManagerImpl
java.lang.Object
org.htmlunit.javascript.background.JavaScriptJobManagerImpl
- All Implemented Interfaces:
Serializable
,JavaScriptJobManager
Default implementation of JavaScriptJobManager
.
This job manager class is guaranteed not to keep old windows in memory (no window memory leaks).
This job manager is serializable, but any running jobs are transient and are not serialized.
-
Nested Class Summary
Nested classes/interfaces inherited from interface org.htmlunit.javascript.background.JavaScriptJobManager
JavaScriptJobManager.JavaScriptJobFilter
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate JavaScriptJob
private static final org.apache.commons.logging.Log
Logging support.private static final AtomicInteger
A counter used to generate the IDs assigned toJavaScriptJob
s.private PriorityQueue
<JavaScriptJob> Queue of jobs that are scheduled to run.private final WeakReference
<WebWindow> The window to which this job manager belongs (weakly referenced, so as not to leak memory). -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionint
addJob
(JavaScriptJob job, Page page) Adds the specified job to this job manager, assigning it an ID.Gets the earliest job for this manager.Gets the earliest job for this manager.int
Returns the number of active jobs, including jobs that are currently executing and jobs that are waiting to execute.int
Returns the number of active jobs, including jobs that are currently executing and jobs that are waiting to execute.private WebWindow
Returns the window to which this job manager belongs, ornull
if it has been garbage collected.INTERNAL API - SUBJECT TO CHANGE AT ANY TIME - USE AT YOUR OWN RISK.private void
Utility method to print current queue.private void
Our own serialization (to handle the weak reference)void
Removes all jobs from the execution queue.void
removeJob
(int id) Removes the specified job from the execution queue.boolean
runSingleJob
(JavaScriptJob givenJob) Runs the provided job if it is the right time for it.void
shutdown()
Shuts down this job manager and stops all of its jobs.void
stopJob
(int id) Stops the specified job and removes it from the execution queue, not even allowing the job to finish if it is currently executing.int
waitForJobs
(long timeoutMillis) Blocks until all active jobs have finished executing.int
waitForJobsStartingBefore
(long delayMillis) Blocks until all jobs scheduled to start executing before(now + delayMillis)
have finished executing.int
waitForJobsStartingBefore
(long delayMillis, JavaScriptJobManager.JavaScriptJobFilter filter) Blocks until all jobs scheduled to start executing before(now + delayMillis)
have finished executing.
-
Field Details
-
window_
The window to which this job manager belongs (weakly referenced, so as not to leak memory). -
scheduledJobsQ_
Queue of jobs that are scheduled to run. This is a priority queue, sorted by closest target execution time. -
cancelledJobs_
-
currentlyRunningJob_
-
NEXT_JOB_ID_
A counter used to generate the IDs assigned toJavaScriptJob
s. -
LOG
private static final org.apache.commons.logging.Log LOGLogging support.
-
-
Constructor Details
-
JavaScriptJobManagerImpl
JavaScriptJobManagerImpl(WebWindow window) Creates a new instance.- Parameters:
window
- the window associated with the new job manager
-
-
Method Details
-
getJobCount
public int getJobCount()Returns the number of active jobs, including jobs that are currently executing and jobs that are waiting to execute.- Specified by:
getJobCount
in interfaceJavaScriptJobManager
- Returns:
- the number of active jobs
-
getJobCount
Returns the number of active jobs, including jobs that are currently executing and jobs that are waiting to execute. Only jobs passing the filter are counted.- Specified by:
getJobCount
in interfaceJavaScriptJobManager
- Parameters:
filter
- the JavaScriptJobFilter- Returns:
- the number of active jobs
-
addJob
Adds the specified job to this job manager, assigning it an ID. If the specified page is not currently loaded in the window which owns this job manager, the operation fails and this method returns0
.- Specified by:
addJob
in interfaceJavaScriptJobManager
- Parameters:
job
- the job to add to the job managerpage
- the page which is trying to add the job- Returns:
- the ID assigned to the job
-
removeJob
public void removeJob(int id) Removes the specified job from the execution queue. This doesn't interrupt the job if it is currently running.- Specified by:
removeJob
in interfaceJavaScriptJobManager
- Parameters:
id
- the ID of the job to be removed from the execution queue
-
stopJob
public void stopJob(int id) Stops the specified job and removes it from the execution queue, not even allowing the job to finish if it is currently executing.- Specified by:
stopJob
in interfaceJavaScriptJobManager
- Parameters:
id
- the ID of the job to be stopped
-
removeAllJobs
public void removeAllJobs()Removes all jobs from the execution queue. This doesn't interrupt any jobs that may be currently running.- Specified by:
removeAllJobs
in interfaceJavaScriptJobManager
-
waitForJobs
public int waitForJobs(long timeoutMillis) Blocks until all active jobs have finished executing. If a job is scheduled to begin executing after(now + timeoutMillis)
, this method will wait fortimeoutMillis
milliseconds and then returnfalse
.- Specified by:
waitForJobs
in interfaceJavaScriptJobManager
- Parameters:
timeoutMillis
- the maximum amount of time to wait (in milliseconds); may be negative, in which case this method returns immediately- Returns:
- the number of background JavaScript jobs still executing or waiting to be executed when this
method returns; will be
0
if there are no jobs left to execute
-
waitForJobsStartingBefore
public int waitForJobsStartingBefore(long delayMillis) Blocks until all jobs scheduled to start executing before(now + delayMillis)
have finished executing. If there is no background JavaScript task currently executing, and there is no background JavaScript task scheduled to start executing within the specified time, this method returns immediately -- even if there are tasks scheduled to be executed after(now + delayMillis)
.- Specified by:
waitForJobsStartingBefore
in interfaceJavaScriptJobManager
- Parameters:
delayMillis
- the delay which determines the background tasks to wait for (in milliseconds); may be negative, as it is relative to the current time- Returns:
- the number of background JavaScript jobs still executing or waiting to be executed when this
method returns; will be
0
if there are no jobs left to execute
-
waitForJobsStartingBefore
public int waitForJobsStartingBefore(long delayMillis, JavaScriptJobManager.JavaScriptJobFilter filter) Blocks until all jobs scheduled to start executing before(now + delayMillis)
have finished executing. If there is no background JavaScript task currently executing, and there is no background JavaScript task scheduled to start executing within the specified time, this method returns immediately -- even if there are tasks scheduled to be executed after(now + delayMillis)
.- Specified by:
waitForJobsStartingBefore
in interfaceJavaScriptJobManager
- Parameters:
delayMillis
- the delay which determines the background tasks to wait for (in milliseconds); may be negative, as it is relative to the current timefilter
- the JavaScriptJobFilter- Returns:
- the number of background JavaScript jobs still executing or waiting to be executed when this
method returns; will be
0
if there are no jobs left to execute
-
shutdown
public void shutdown()Shuts down this job manager and stops all of its jobs.- Specified by:
shutdown
in interfaceJavaScriptJobManager
-
getWindow
Returns the window to which this job manager belongs, ornull
if it has been garbage collected.- Returns:
- the window to which this job manager belongs, or
null
if it has been garbage collected
-
printQueue
private void printQueue()Utility method to print current queue. -
jobStatusDump
INTERNAL API - SUBJECT TO CHANGE AT ANY TIME - USE AT YOUR OWN RISK.- Specified by:
jobStatusDump
in interfaceJavaScriptJobManager
- Parameters:
filter
- the JavaScriptJobFilter- Returns:
- the job status report as string
-
getEarliestJob
Gets the earliest job for this manager.- Specified by:
getEarliestJob
in interfaceJavaScriptJobManager
- Returns:
null
if none
-
getEarliestJob
Gets the earliest job for this manager.- Specified by:
getEarliestJob
in interfaceJavaScriptJobManager
- Parameters:
filter
- the JavaScriptJobFilter- Returns:
null
if none
-
runSingleJob
Runs the provided job if it is the right time for it.- Specified by:
runSingleJob
in interfaceJavaScriptJobManager
- Parameters:
givenJob
- the job to run- Returns:
- returns true if the job was run.
-
readObject
Our own serialization (to handle the weak reference)- Parameters:
in
- the stream to read form- Throws:
IOException
- in case of errorClassNotFoundException
- in case of error
-