1 16 package org.directwebremoting.guice; 17 18 import com.google.inject.Provider; 19 20 import java.util.concurrent.Callable ; 21 import java.util.concurrent.ExecutionException ; 22 import java.util.concurrent.FutureTask ; 23 24 28 class FutureTaskProvider<T> extends FutureTask <T> implements InstanceProvider<T> 29 { 30 FutureTaskProvider(final Provider<T> creator) 31 { 32 super(new Callable <T>() 33 { 34 public T call() 35 { 36 return creator.get(); 37 } 38 }); 39 } 40 41 @Override public T get() 42 { 43 try 44 { 45 return super.get(); 46 } 47 catch (InterruptedException e) 48 { 49 Thread.currentThread().interrupt(); 50 return null; 51 } 52 catch (ExecutionException e) 53 { 54 Throwable t = e.getCause(); 55 if (t instanceof RuntimeException ) 56 { 57 throw (RuntimeException ) t; 58 } 59 else if (t instanceof Error ) 60 { 61 throw (Error ) t; 62 } 63 else 64 { 65 throw new IllegalStateException ("unexpected Exception: " + t, t); 66 } 67 } 68 } 69 } 70 | Popular Tags |