/*
* Copyright 2001-2008 Geert Bevin <gbevin[remove] at uwyn dot com>
* Licensed under the Apache License, Version 2.0 (the "License")
* $Id: ExecutorThread.java 3918 2008-04-14 17:35:35Z gbevin $
*/
package com.uwyn.rife.scheduler;
import com.uwyn.rife.scheduler.exceptions.*;
public class ExecutorThread implements Runnable
{
private Executor mExecutor = null;
private Task mTask = null;
public ExecutorThread(Executor executor, Task task)
{
mExecutor = executor;
mTask = task;
}
public void run()
{
assert mTask != null;
boolean successful_execution = false;
TaskManager manager = mExecutor.getScheduler().getTaskManager();
try
{
manager.activateTask(mTask.getId());
successful_execution = mExecutor.executeTask(mTask);
}
catch (TaskManagerException e)
{
successful_execution = false;
}
finally
{
try
{
if (!successful_execution)
{
manager.rescheduleTask(mTask, mExecutor.getRescheduleDelay(), null);
}
manager.concludeTask(mTask);
}
catch (TaskManagerException e)
{
throw new FatalTaskExecutionException(mTask, e);
}
}
}
}