1 8 9 package foxtrot; 10 11 import java.security.AccessController ; 12 import java.security.PrivilegedActionException ; 13 import java.security.PrivilegedExceptionAction ; 14 import java.io.InterruptedIOException ; 15 16 20 public abstract class AbstractWorkerThread implements WorkerThread 21 { 22 25 protected AbstractWorkerThread() 26 { 27 } 28 29 public void runTask(final Task task) 30 { 31 if (AbstractWorker.debug) System.out.println("[AbstractWorkerThread] Executing task " + task); 32 33 try 34 { 35 Object obj = AccessController.doPrivileged(new PrivilegedExceptionAction () 36 { 37 public Object run() throws Exception 38 { 39 return task.run(); 40 } 41 }, task.getSecurityContext()); 42 43 task.setResult(obj); 44 } 45 catch (PrivilegedActionException x) 46 { 47 Exception xx = x.getException(); 48 task.setThrowable(xx); 49 if (xx instanceof InterruptedException || xx instanceof InterruptedIOException ) Thread.currentThread().interrupt(); 50 } 51 catch (Throwable x) 52 { 53 task.setThrowable(x); 54 } 55 finally 56 { 57 task.setCompleted(true); 59 60 if (AbstractWorker.debug) System.out.println("[AbstractWorkerThread] Completing run for task " + task); 61 task.postRun(); 62 } 63 } 64 } 65 | Popular Tags |