public NationClassLoader(URL[] urls, Vector nations) { super(urls); for (int i = 0; i < urls.length; i++) { file = urls[i].getFile(); fileTmp = new File(file); System.out.println( "NationClassLoader - Does " + fileTmp.toString() + " exists : " + fileTmp.exists()); name = file.substring(file.lastIndexOf("/") + 1, file.lastIndexOf(".")); runtimeObject = null; try { jarLoader = URLClassLoader.newInstance(new URL[] {urls[i]}); System.out.println( "NationClassLoader - JARloader trying : " + jarLoader.getURLs()[0].toString()); runtimeObject = jarLoader.loadClass(name + "/" + name).newInstance(); } catch (Exception e) { System.err.println("NationClassLoader - Stinking error : " + e); } if (runtimeObject != null) { natFile = (nationFile2) runtimeObject; nations.addElement(natFile); } } }
public static void main(String[] args) throws Exception { Class thisClass = MethodResultTest.class; Class exoticClass = Exotic.class; String exoticClassName = Exotic.class.getName(); ClassLoader testClassLoader = thisClass.getClassLoader(); if (!(testClassLoader instanceof URLClassLoader)) { System.out.println("TEST INVALID: Not loaded by a " + "URLClassLoader: " + testClassLoader); System.exit(1); } URLClassLoader tcl = (URLClassLoader) testClassLoader; URL[] urls = tcl.getURLs(); ClassLoader shadowLoader = new ShadowLoader( urls, testClassLoader, new String[] { exoticClassName, ExoticMBeanInfo.class.getName(), ExoticException.class.getName() }); Class cl = shadowLoader.loadClass(exoticClassName); if (cl == exoticClass) { System.out.println( "TEST INVALID: Shadow class loader loaded " + "same class as test class loader"); System.exit(1); } Thread.currentThread().setContextClassLoader(shadowLoader); ObjectName on = new ObjectName("a:b=c"); MBeanServer mbs = MBeanServerFactory.newMBeanServer(); mbs.createMBean(Thing.class.getName(), on); final String[] protos = {"rmi", "iiop", "jmxmp"}; boolean ok = true; for (int i = 0; i < protos.length; i++) { try { ok &= test(protos[i], mbs, on); System.out.println(); } catch (Exception e) { System.out.println("TEST FAILED WITH EXCEPTION:"); e.printStackTrace(System.out); ok = false; } } if (ok) System.out.println("Test passed"); else { System.out.println("TEST FAILED"); System.exit(1); } }
/** * adds a URL to the classloader. * * @param url the new classpath element */ public void addURL(URL url) { super.addURL(url); }
private static LaunchablePlugin[] findLaunchablePlugins(LoggerChannelListener listener) { // CAREFUL - this is called BEFORE any AZ initialisation has been performed and must // therefore NOT use anything that relies on this (such as logging, debug....) List res = new ArrayList(); File app_dir = getApplicationFile("plugins"); if (!(app_dir.exists()) && app_dir.isDirectory()) { listener.messageLogged(LoggerChannel.LT_ERROR, "Application dir '" + app_dir + "' not found"); return (new LaunchablePlugin[0]); } File[] plugins = app_dir.listFiles(); if (plugins == null || plugins.length == 0) { listener.messageLogged(LoggerChannel.LT_ERROR, "Application dir '" + app_dir + "' empty"); return (new LaunchablePlugin[0]); } for (int i = 0; i < plugins.length; i++) { File plugin_dir = plugins[i]; if (!plugin_dir.isDirectory()) { continue; } try { ClassLoader classLoader = PluginLauncherImpl.class.getClassLoader(); ClassLoader root_cl = classLoader; File[] contents = plugin_dir.listFiles(); if (contents == null || contents.length == 0) { continue; } // take only the highest version numbers of jars that look versioned String[] plugin_version = {null}; String[] plugin_id = {null}; contents = getHighestJarVersions(contents, plugin_version, plugin_id, true); for (int j = 0; j < contents.length; j++) { classLoader = addFileToClassPath(root_cl, classLoader, contents[j]); } Properties props = new Properties(); File properties_file = new File(plugin_dir, "plugin.properties"); // if properties file exists on its own then override any properties file // potentially held within a jar if (properties_file.exists()) { FileInputStream fis = null; try { fis = new FileInputStream(properties_file); props.load(fis); } finally { if (fis != null) { fis.close(); } } } else { if (classLoader instanceof URLClassLoader) { URLClassLoader current = (URLClassLoader) classLoader; URL url = current.findResource("plugin.properties"); if (url != null) { props.load(url.openStream()); } } } String plugin_class = (String) props.get("plugin.class"); // don't support multiple launchable plugins if (plugin_class == null || plugin_class.indexOf(';') != -1) { continue; } Class c = classLoader.loadClass(plugin_class); Plugin plugin = (Plugin) c.newInstance(); if (plugin instanceof LaunchablePlugin) { preloaded_plugins.put(plugin_class, plugin); res.add(plugin); } } catch (Throwable e) { listener.messageLogged("Load of plugin in '" + plugin_dir + "' fails", e); } } LaunchablePlugin[] x = new LaunchablePlugin[res.size()]; res.toArray(x); return (x); }