1 4 package com.openedit; 5 6 import java.io.File ; 7 import java.io.FileInputStream ; 8 import java.io.IOException ; 9 import java.io.InputStream ; 10 import java.net.URL ; 11 import java.util.Enumeration ; 12 13 import org.apache.commons.logging.Log; 14 import org.apache.commons.logging.LogFactory; 15 import org.springframework.beans.factory.config.BeanDefinition; 16 import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; 17 import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer; 18 import org.springframework.beans.factory.support.DefaultListableBeanFactory; 19 import org.springframework.beans.factory.xml.XmlBeanFactory; 20 import org.springframework.core.io.InputStreamResource; 21 22 import com.openedit.modules.scheduler.SchedulerModule; 23 import com.openedit.page.manage.PageManager; 24 import com.openedit.servlet.OpenEditEngine; 25 import com.openedit.users.UserManager; 26 import com.openedit.util.FileUtils; 27 28 43 public class BaseWebServer implements WebServer 44 { 45 private static final Log log = LogFactory.getLog(WebServer.class); 46 protected DefaultListableBeanFactory fieldBeanFactory; 47 protected File fieldRootDirectory; 48 49 public ConfigurableListableBeanFactory getBeanFactory() 50 { 51 if ( fieldBeanFactory == null ) 52 { 53 synchronized( this ) { if ( fieldBeanFactory == null ) 56 { 57 InputStreamResource resource = new InputStreamResource(getClass().getClassLoader().getResourceAsStream("openedit.xml"), "openedit.xml"); 58 XmlBeanFactory xmlbeans = new XmlBeanFactory( resource ); 59 xmlbeans.setAllowBeanDefinitionOverriding(true); 60 xmlbeans.destroySingletons(); 61 xmlbeans.registerSingleton("WebServer",this); 62 fieldBeanFactory = xmlbeans; 63 } 64 } 65 } 66 return fieldBeanFactory; 67 } 68 public synchronized void initialize() 69 { 70 if ( getRootDirectory() == null) 71 { 72 String path = System.getProperty("oe.root.path"); 73 setRootDirectory(new File (path)); 74 } 75 if ( getRootDirectory() == null) 76 { 77 throw new IllegalStateException ("Root directory is not defined"); 78 } 79 81 try 82 { 83 Enumeration pluginDefs = getClass().getClassLoader().getResources( "plugin.xml" ); while( pluginDefs.hasMoreElements() ) 85 { 86 URL url = (URL ) pluginDefs.nextElement(); 87 loadPluginDefs( url.openStream() ); 88 } 89 } catch ( IOException ex) 90 { 91 throw new OpenEditRuntimeException(ex); 92 } 93 94 95 107 overridePlugIns(); 108 109 Thread sh = new Thread ( new Runnable () { 111 public void run() 112 { 113 try 114 { 115 getOpenEditEngine().shutdown(); 116 } 117 catch (Throwable ex) 118 { 119 ex.printStackTrace(); 120 } 121 } 122 }); 123 Runtime.getRuntime().addShutdownHook(sh); 124 125 } 126 protected void loadPluginDefs(File inFile) 127 { 128 try 129 { 130 loadPluginDefs(new FileInputStream ( inFile)); 131 } 132 catch( IOException ex) 133 { 134 throw new OpenEditRuntimeException( ex); 135 } 136 } 137 138 protected void loadPluginDefs( InputStream inputStream ) 139 { 140 try 141 { 142 XmlBeanFactory factory = new XmlBeanFactory( new InputStreamResource( inputStream ), getBeanFactory() ); 143 String [] names = factory.getBeanDefinitionNames(); 144 for (int i = 0; i < names.length; i++) 145 { 146 BeanDefinition def = factory.getBeanDefinition(names[i]); 147 fieldBeanFactory.registerBeanDefinition(names[i],def); 148 } 149 } 150 finally 151 { 152 FileUtils.safeClose(inputStream); 153 } 154 } 155 public void overridePlugIns() 156 { 157 try 158 { 159 File overrideFile = new File ( getRootDirectory(), "WEB-INF/pluginoverrides.xml" ); 160 if ( overrideFile.exists() ) 161 { 162 loadPluginDefs( overrideFile ); 163 } 164 165 PropertyPlaceholderConfigurer configurator = new PropertyPlaceholderConfigurer(); 167 configurator.postProcessBeanFactory( getBeanFactory() ); 168 169 final String SCHEDULER_BEAN = "Scheduler"; 171 if (getBeanFactory().containsBean(SCHEDULER_BEAN)) 172 { 173 SchedulerModule bean = (SchedulerModule)getModuleManager().getModule(SCHEDULER_BEAN); 174 if ( bean != null) 175 { 176 bean.setClassLoader(Thread.currentThread().getContextClassLoader()); 177 } 178 log.info("Loaded scheduler"); 179 } 180 } catch ( Exception ex ) 181 { 182 throw new OpenEditRuntimeException(ex); 183 } 184 185 } 186 187 190 public PageManager getPageManager() 191 { 192 return (PageManager)getBeanFactory().getBean( "pageManager" ); 193 } 194 195 198 public UserManager getUserManager() 199 { 200 return (UserManager)getBeanFactory().getBean( "userManager" ); 201 } 202 203 204 207 public ModuleManager getModuleManager() 208 { 209 return (ModuleManager) getBeanFactory().getBean( "moduleManager" ); 210 } 211 212 215 public OpenEditEngine getOpenEditEngine() 216 { 217 return (OpenEditEngine)getBeanFactory().getBean("OpenEditEngine"); 218 } 219 220 223 public File getRootDirectory() 224 { 225 return fieldRootDirectory; 226 } 227 public void setRootDirectory(File inRoot) 228 { 229 System.setProperty( "oe.root.path", inRoot.getAbsolutePath() ); 230 fieldRootDirectory = inRoot; 231 } 232 } 233 | Popular Tags |