1 package org.directwebremoting.guice.spring; 2 3 import com.google.inject.Provider; 4 5 import java.io.Closeable ; 6 import java.io.IOException ; 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 18 class CloseableBeanFactoryProvider implements Closeable , 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 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 e) 43 { 44 log.info("Caught IO exception destroying BeanFactory: " + e); 45 throw e; 46 } 47 catch (Exception e) 48 { 49 log.info("Unexpected exception while destroying BeanFactory: " + e); 50 throw new RuntimeException (e); 51 } 52 } 53 } 54 55 private final BeanFactoryLoader loader; 56 57 private BeanFactory beanFactory; 58 59 62 private static final Logger log = Logger.getLogger(CloseableBeanFactoryProvider.class); 63 } | Popular Tags |