@Override public void addJobChangeListener(IJobChangeListener listener) { jobListeners.add(listener); }
@Override public void removeJobChangeListener(IJobChangeListener listener) { jobListeners.remove(listener); }
jobListeners.aboutToRun(job); jobListeners.running(job); return job;
jobListeners.done((Job) job, Status.CANCEL_STATUS, false); return true;
protected void wakeUp(InternalJob job, long delay) { Assert.isLegal(delay >= 0, "Scheduling delay is negative"); //$NON-NLS-1$ synchronized (lock) { //cannot wake up if it is not sleeping if (job.getState() != Job.SLEEPING) return; doSchedule(job, delay); } //call the pool outside sync block to avoid deadlock pool.jobQueued(); //only notify of wake up if immediate if (delay == 0) jobListeners.awake((Job) job); }
doit.notify((IJobChangeListener) listeners[i], event); } catch (Exception e) { handleException(listeners[i], e); } catch (LinkageError e) { handleException(listeners[i], e); doit.notify((IJobChangeListener) listeners[i], event); } catch (Exception e) { handleException(listeners[i], e); } catch (LinkageError e) { handleException(listeners[i], e);
protected void schedule(InternalJob job, long delay, boolean reschedule) { if (!active) throw new IllegalStateException("Job manager has been shut down."); //$NON-NLS-1$ Assert.isNotNull(job, "Job is null"); //$NON-NLS-1$ Assert.isLegal(delay >= 0, "Scheduling delay is negative"); //$NON-NLS-1$ synchronized (lock) { //if the job is already running, set it to be rescheduled when done if (job.getState() == Job.RUNNING) { job.setStartTime(delay); return; } //can't schedule a job that is waiting or sleeping if (job.internalGetState() != Job.NONE) return; if (JobManager.DEBUG) JobManager.debug("Scheduling job: " + job); //$NON-NLS-1$ //remember that we are about to schedule the job //to prevent multiple schedule attempts from succeeding (bug 68452) changeState(job, InternalJob.ABOUT_TO_SCHEDULE); } //notify listeners outside sync block jobListeners.scheduled((Job) job, delay, reschedule); //schedule the job doSchedule(job, delay); //call the pool outside sync block to avoid deadlock pool.jobQueued(); }
jobListeners.aboutToRun(job); jobListeners.running(job); return job;
jobListeners.done((Job) job, Status.CANCEL_STATUS, false); return true;
protected void wakeUp(InternalJob job, long delay) { Assert.isLegal(delay >= 0, "Scheduling delay is negative"); //$NON-NLS-1$ synchronized (lock) { //cannot wake up if it is not sleeping if (job.getState() != Job.SLEEPING) return; doSchedule(job, delay); } //call the pool outside sync block to avoid deadlock pool.jobQueued(); //only notify of wake up if immediate if (delay == 0) jobListeners.awake((Job) job); }
doit.notify((IJobChangeListener) listeners[i], event); } catch (Exception e) { handleException(listeners[i], e); } catch (LinkageError e) { handleException(listeners[i], e); doit.notify((IJobChangeListener) listeners[i], event); } catch (Exception e) { handleException(listeners[i], e); } catch (LinkageError e) { handleException(listeners[i], e);
protected void schedule(InternalJob job, long delay, boolean reschedule) { if (!active) throw new IllegalStateException("Job manager has been shut down."); //$NON-NLS-1$ Assert.isNotNull(job, "Job is null"); //$NON-NLS-1$ Assert.isLegal(delay >= 0, "Scheduling delay is negative"); //$NON-NLS-1$ synchronized (lock) { //if the job is already running, set it to be rescheduled when done if (job.getState() == Job.RUNNING) { job.setStartTime(delay); return; } //can't schedule a job that is waiting or sleeping if (job.internalGetState() != Job.NONE) return; if (JobManager.DEBUG) JobManager.debug("Scheduling job: " + job); //$NON-NLS-1$ //remember that we are about to schedule the job //to prevent multiple schedule attempts from succeeding (bug 68452) changeState(job, InternalJob.ABOUT_TO_SCHEDULE); } //notify listeners outside sync block jobListeners.scheduled((Job) job, delay, reschedule); //schedule the job doSchedule(job, delay); //call the pool outside sync block to avoid deadlock pool.jobQueued(); }
jobListeners.aboutToRun(job); jobListeners.running(job); return job;
jobListeners.done((Job) job, Status.CANCEL_STATUS, false); return true;
@Override public void removeJobChangeListener(IJobChangeListener listener) { jobListeners.remove(listener); }
@Override public void addJobChangeListener(IJobChangeListener listener) { jobListeners.add(listener); }
protected void wakeUp(InternalJob job, long delay) { Assert.isLegal(delay >= 0, "Scheduling delay is negative"); //$NON-NLS-1$ synchronized (lock) { //cannot wake up if it is not sleeping if (job.getState() != Job.SLEEPING) return; doSchedule(job, delay); } //call the pool outside sync block to avoid deadlock pool.jobQueued(); //only notify of wake up if immediate if (delay == 0) jobListeners.awake((Job) job); }
/** * Process the given doit for all global listeners and all local listeners * on the given job. */ private void doNotify(final IListenerDoit doit, final IJobChangeEvent event) { //notify all global listeners for (IJobChangeListener listener : global) { try { doit.notify(listener, event); } catch (Throwable e) { handleException(listener, e); } } for (IJobChangeListener listener : ((InternalJob) event.getJob()).getListeners()) { try { doit.notify(listener, event); } catch (Throwable e) { handleException(listener, e); } } }