1 10 11 package org.mule.modules.boot; 12 13 import java.io.File ; 14 import java.lang.reflect.InvocationTargetException ; 15 import java.lang.reflect.Method ; 16 import java.net.URL ; 17 import java.net.URLClassLoader ; 18 import java.util.Iterator ; 19 import java.util.List ; 20 21 import org.mule.MuleServer; 22 import org.mule.util.ClassUtils; 23 import org.mule.util.SystemUtils; 24 import org.tanukisoftware.wrapper.WrapperManager; 25 import org.tanukisoftware.wrapper.WrapperSimpleApp; 26 27 32 public class MuleBootstrap 33 { 34 35 38 private MuleBootstrap() 39 { 40 super(); 41 } 42 43 49 public static void main(String args[]) throws Exception 50 { 51 File muleHome = null; 53 54 String muleHomeVar = System.getProperty("mule.home"); 55 if (muleHomeVar != null && !muleHomeVar.trim().equals("") && !muleHomeVar.equals("%MULE_HOME%")) { 57 muleHome = new File (muleHomeVar).getCanonicalFile(); 58 } 59 if (muleHome == null || !muleHome.exists() || !muleHome.isDirectory()) { 60 throw new IllegalArgumentException ( 61 "Either MULE_HOME is not set or does not contain a valid directory."); 62 } 63 64 File muleBase = null; 65 66 String muleBaseVar = System.getProperty("mule.base"); 67 if (muleBaseVar != null && !muleBaseVar.trim().equals("") && !muleBaseVar.equals("%MULE_BASE%")) { 68 muleBase = new File (muleBaseVar).getCanonicalFile(); 69 } else { 70 muleBase = muleHome; 71 } 72 73 DefaultMuleClassPathConfig classPath = new DefaultMuleClassPathConfig(muleHome, muleBase); 75 addLibrariesToClasspath(classPath.getURLs()); 76 77 ClassLoader sys = ClassLoader.getSystemClassLoader(); 80 if (ClassUtils.getResource("META-INF/mule/license.props", MuleBootstrap.class) == null) { 81 LicenseHandler licenseHandler = new LicenseHandler(muleHome, muleBase); 82 if (!licenseHandler.getAcceptance()) 86 { 87 WrapperManager.stop(-1); 88 } 89 } 90 91 if (!ClassUtils.isClassOnPath("javax.activation.DataSource", MuleBootstrap.class)) { 97 LibraryDownloader downloader = new LibraryDownloader(muleBase); 98 addLibrariesToClasspath(downloader.downloadLibraries()); 99 } 100 101 String mainClassName = SystemUtils.getCommandLineOption("-main", args); 104 105 if (mainClassName == null) 106 { 107 mainClassName = MuleServer.class.getName(); 108 } 109 110 String [] appArgs = new String [args.length + 1]; 112 appArgs[0] = mainClassName; 113 System.arraycopy(args, 0, appArgs, 1, args.length); 114 115 WrapperSimpleApp.main(appArgs); 117 } 118 119 private static void addLibrariesToClasspath(List urls) 120 throws NoSuchMethodException , IllegalAccessException , InvocationTargetException { 121 122 ClassLoader sys = ClassLoader.getSystemClassLoader(); 123 if (!(sys instanceof URLClassLoader )) 124 { 125 throw new IllegalArgumentException ( 126 "PANIC: Mule has been started with an unsupported classloader: " + sys.getClass().getName() 127 + ". " + "Please report this error to user<at>mule<dot>codehaus<dot>org"); 128 } 129 130 URLClassLoader sysCl = (URLClassLoader )sys; 133 134 148 149 Class refClass = URLClassLoader .class; 153 Method methodAddUrl = refClass.getDeclaredMethod("addURL", new Class []{URL .class}); 154 methodAddUrl.setAccessible(true); 155 for (Iterator it = urls.iterator(); it.hasNext();) 156 { 157 URL url = (URL )it.next(); 158 methodAddUrl.invoke(sysCl, new Object []{url}); 160 } 161 } 162 } 163 | Popular Tags |