KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > directwebremoting > guice > spring > CloseableBeanFactoryProvider


1 package org.directwebremoting.guice.spring;
2
3 import com.google.inject.Provider;
4
5 import java.io.Closeable JavaDoc;
6 import java.io.IOException JavaDoc;
7
8 import org.directwebremoting.util.Logger;
9
10 import org.springframework.beans.factory.BeanFactory;
11 import org.springframework.beans.factory.DisposableBean;
12
13
14 /**
15  * Lazily creates a singleton BeanFactory and, when {@code close()} is
16  * called, destroys it if it exists and is a {@code DisposableBean}.
17  */

18 class CloseableBeanFactoryProvider implements Closeable JavaDoc, Provider<BeanFactory>
19 {
20     CloseableBeanFactoryProvider(BeanFactoryLoader loader)
21     {
22         this.loader = loader;
23     }
24     
25     public synchronized BeanFactory get() {
26         if (beanFactory == null)
27         {
28             beanFactory = loader.loadBeanFactory();
29         }
30         return beanFactory;
31     }
32     
33     public synchronized void close() throws IOException JavaDoc
34     {
35         if (beanFactory != null && beanFactory instanceof DisposableBean)
36         {
37             try
38             {
39                 ((DisposableBean) beanFactory).destroy();
40                 log.info("Destroyed BeanFactory from Guice provider.");
41             }
42             catch (IOException JavaDoc e)
43             {
44                 log.info("Caught IO exception destroying BeanFactory: " + e);
45                 throw e;
46             }
47             catch (Exception JavaDoc e)
48             {
49                 log.info("Unexpected exception while destroying BeanFactory: " + e);
50                 throw new RuntimeException JavaDoc(e);
51             }
52         }
53     }
54     
55     private final BeanFactoryLoader loader;
56     
57     /* @GuardedBy("this") */ private BeanFactory beanFactory;
58
59     /**
60      * The log stream
61      */

62     private static final Logger log = Logger.getLogger(CloseableBeanFactoryProvider.class);
63 }
Popular Tags