// ********************************************************************** // // Copyright (c) 2003-2010 ZeroC, Inc. All rights reserved. // // This copy of Ice is licensed to you under the terms described in the // ICE_LICENSE file included in this distribution. // // ********************************************************************** package IceInternal; public final class Util { public static Instance getInstance(Ice.Communicator communicator) { Ice.CommunicatorI p = (Ice.CommunicatorI)communicator; return p.getInstance(); } public static ProtocolPluginFacade getProtocolPluginFacade(Ice.Communicator communicator) { return new ProtocolPluginFacadeI(communicator); } // // Given a path name, first try to open it as a class path resource (the path is // treated as absolute). If that fails, fall back to the file system. Returns null // if the file does not exist and raises IOException if an error occurs. // public static java.io.InputStream openResource(ClassLoader cl, String path) throws java.io.IOException { // // Calling getResourceAsStream on the class loader means all paths are absolute, // whereas calling it on the class means all paths are relative to the class // unless the path has a leading forward slash. We call it on the class loader. // // getResourceAsStream returns null if the resource can't be found. // java.io.InputStream stream = cl.getResourceAsStream(path); if(stream == null) { try { java.io.File f = new java.io.File(path); if(f.exists()) { stream = new java.io.FileInputStream(f); } } catch(java.lang.SecurityException ex) { // Ignore - a security manager may forbid access to the local file system. } } return stream; } public static Class<?> findClass(String className, ClassLoader cl) throws LinkageError { // // Try to load the class using the given class loader (if any). If that fails (or // none is provided), we try to load the class a few more ways before giving up. // // Calling Class.forName() doesn't always work. For example, if Ice.jar is installed // as an extension (in $JAVA_HOME/jre/lib/ext), calling Class.forName(name) uses the // extension class loader, which will not look in CLASSPATH for the target class. // Class<?> c = null; if(cl != null) { c = loadClass(className, cl); } // // Try using the system class loader (which knows about CLASSPATH). // if(c == null) { try { cl = ClassLoader.getSystemClassLoader(); if(cl != null) { c = loadClass(className, cl); } } catch(SecurityException ex) { } } // // Try using the current thread's class loader. // if(c == null) { try { cl = Thread.currentThread().getContextClassLoader(); if(cl != null) { c = loadClass(className, cl); } } catch(SecurityException ex) { } } // // Fall back to Class.forName(). // try { if(c == null) { c = Class.forName(className); } } catch(ClassNotFoundException ex) { // Ignore } return c; } private static Class<?> loadClass(String className, ClassLoader cl) throws LinkageError { if(cl != null) { try { return cl.loadClass(className); } catch(ClassNotFoundException ex) { // Ignore } } return null; } public static int getThreadPriorityProperty(Ice.Properties properties, String prefix) { String pri = properties.getProperty(prefix + ".ThreadPriority"); if(pri.equals("MIN_PRIORITY") || pri.equals("java.lang.Thread.MIN_PRIORITY")) { return java.lang.Thread.MIN_PRIORITY; } else if(pri.equals("NORM_PRIORITY") || pri.equals("java.lang.Thread.NORM_PRIORITY")) { return java.lang.Thread.NORM_PRIORITY; } else if(pri.equals("MAX_PRIORITY") || pri.equals("java.lang.Thread.MAX_PRIORITY")) { return java.lang.Thread.MAX_PRIORITY; } try { return Integer.parseInt(pri); } catch(NumberFormatException ex) { } return java.lang.Thread.NORM_PRIORITY; } }