package net.csdn.bootstrap; import javassist.CtClass; import net.csdn.ServiceFramwork; import net.csdn.bootstrap.loader.Loader; import net.csdn.bootstrap.loader.impl.*; import net.csdn.common.collect.Tuple; import net.csdn.common.io.Streams; import net.csdn.common.settings.InternalSettingsPreparer; import net.csdn.common.settings.Settings; import net.csdn.env.Environment; import net.csdn.jpa.JPA; import net.csdn.modules.http.HttpServer; import java.io.FileWriter; import java.util.ArrayList; import java.util.List; import java.util.Map; import static net.csdn.common.logging.support.MessageFormat.format; import static net.csdn.common.settings.ImmutableSettings.Builder.EMPTY_SETTINGS; /** * Date: 11-8-31 * Time: 下午5:34 */ public class Bootstrap { private static HttpServer httpServer; private static boolean isSystemConfigured = false; public static void main(String[] args) { try { configureSystem(); } catch (Exception e) { e.printStackTrace(); System.exit(3); } httpServer = ServiceFramwork.injector.getInstance(HttpServer.class); httpServer.start(); httpServer.join(); } public static void shutdown() { if (httpServer != null) { httpServer.close(); } } //配置整个系统模块 private static void configureSystem() throws Exception { if (isSystemConfigured) return; Tuple<Settings, Environment> tuple = InternalSettingsPreparer.prepareSettings(EMPTY_SETTINGS); ServiceFramwork.mode = ServiceFramwork.Mode.valueOf(tuple.v1().get("mode")); modifyPersistenceXml(tuple); List<Loader> loaders = new ArrayList<Loader>(); loaders.add(new LoggerLoader()); loaders.add(new ModuelLoader()); loaders.add(new ModelLoader()); loaders.add(new ServiceLoader()); loaders.add(new UtilLoader()); loaders.add(new ControllerLoader()); loaders.add(new ValidatorLoader()); for (Loader loader : loaders) { loader.load(tuple.v1()); } JPA.setSettings(tuple.v1()); isSystemConfigured = true; } //自动同步application.xml文件的配置到persistence.xml private static void modifyPersistenceXml(Tuple<Settings, Environment> tuple) throws Exception { String fileContent = Streams.copyToStringFromClasspath(Bootstrap.class.getClassLoader(), "META-INF/persistence.xml"); Map<String, Settings> groups = tuple.v1().getGroups(ServiceFramwork.mode.name() + ".datasources"); Settings mysqlSetting = groups.get("mysql"); String path = Bootstrap.class.getClassLoader().getResource("META-INF/persistence.xml").getPath(); Streams.copy(format(fileContent, mysqlSetting.get("database")), new FileWriter(path)); } public static void isLoaded(String name) { java.lang.reflect.Method m = null; try { m = ClassLoader.class.getDeclaredMethod("findLoadedClass", new Class[]{String.class}); m.setAccessible(true); ClassLoader cl = ClassLoader.getSystemClassLoader(); Object test1 = m.invoke(cl, name); System.out.println(name + "=>" + (test1 != null)); cl = Thread.currentThread().getContextClassLoader(); test1 = m.invoke(cl, name); System.out.println(name + "+=>" + (test1 != null)); if (test1 != null) { } CtClass ctClass = ServiceFramwork.classPool.get(name); System.out.println(cl); System.out.println(ctClass); System.out.println("-------------------------------"); } catch (Exception e) { e.printStackTrace(); } } }