KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > directwebremoting > guice > FutureTaskProvider


1 /*
2  * Copyright 2007 Tim Peierls
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */

16 package org.directwebremoting.guice;
17
18 import com.google.inject.Provider;
19
20 import java.util.concurrent.Callable JavaDoc;
21 import java.util.concurrent.ExecutionException JavaDoc;
22 import java.util.concurrent.FutureTask JavaDoc;
23
24 /**
25  * A provider implementation that uses the FutureTask machinery.
26  * @author Tim Peierls [tim at peierls dot net]
27  */

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