/**
* Copyright (c) 2002-2005, Simone Bordet
* All rights reserved.
*
* This software is distributable under the BSD license.
* See the terms of the BSD license in the documentation provided with this software.
*/
package foxtrot;
import java.security.AccessController;
import java.security.PrivilegedActionException;
import java.security.PrivilegedExceptionAction;
import java.io.InterruptedIOException;
/**
* Partial implementation of the WorkerThread interface.
* @version $Revision: 1.9 $
*/
public abstract class AbstractWorkerThread implements WorkerThread
{
/**
* Creates a new instance of this AbstractWorkerThread, called by subclasses.
*/
protected AbstractWorkerThread()
{
}
public void runTask(final Task task)
{
if (AbstractWorker.debug) System.out.println("[AbstractWorkerThread] Executing task " + task);
try
{
Object obj = AccessController.doPrivileged(new PrivilegedExceptionAction()
{
public Object run() throws Exception
{
return task.run();
}
}, task.getSecurityContext());
task.setResult(obj);
}
catch (PrivilegedActionException x)
{
Exception xx = x.getException();
task.setThrowable(xx);
if (xx instanceof InterruptedException || xx instanceof InterruptedIOException) Thread.currentThread().interrupt();
}
catch (Throwable x)
{
task.setThrowable(x);
}
finally
{
// Mark the task as completed
task.setCompleted(true);
if (AbstractWorker.debug) System.out.println("[AbstractWorkerThread] Completing run for task " + task);
task.postRun();
}
}
}