Save This Page
Home » openjdk-7 » com.sun.corba.se.impl » util » [javadoc | source]
    1   /*
    2    * Copyright (c) 1995, 2004, Oracle and/or its affiliates. All rights reserved.
    3    * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    4    *
    5    * This code is free software; you can redistribute it and/or modify it
    6    * under the terms of the GNU General Public License version 2 only, as
    7    * published by the Free Software Foundation.  Oracle designates this
    8    * particular file as subject to the "Classpath" exception as provided
    9    * by Oracle in the LICENSE file that accompanied this code.
   10    *
   11    * This code is distributed in the hope that it will be useful, but WITHOUT
   12    * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
   13    * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
   14    * version 2 for more details (a copy is included in the LICENSE file that
   15    * accompanied this code).
   16    *
   17    * You should have received a copy of the GNU General Public License version
   18    * 2 along with this work; if not, write to the Free Software Foundation,
   19    * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
   20    *
   21    * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
   22    * or visit www.oracle.com if you need additional information or have any
   23    * questions.
   24    */
   25   /*
   26    * Licensed Materials - Property of IBM
   27    * RMI-IIOP v1.0
   28    * Copyright IBM Corp. 1998 1999  All Rights Reserved
   29    *
   30    */
   31   
   32   package com.sun.corba.se.impl.util;
   33   
   34   import java.rmi.Remote;
   35   import java.rmi.NoSuchObjectException;
   36   import java.rmi.server.RMIClassLoader;
   37   import java.rmi.server.UnicastRemoteObject;
   38   import org.omg.CORBA.BAD_PARAM;
   39   import org.omg.CORBA.CompletionStatus;
   40   import java.util.Properties;
   41   import java.io.File;
   42   import java.io.FileInputStream;
   43   import java.security.AccessController;
   44   import java.security.PrivilegedAction;
   45   import java.net.MalformedURLException;
   46   import com.sun.corba.se.impl.orbutil.GetPropertyAction;
   47   
   48   /**
   49    *  Utility methods for doing various method calls which are used
   50    *  by multiple classes
   51    */
   52   public class JDKBridge {
   53   
   54       /**
   55        * Get local codebase System property (java.rmi.server.codebase).
   56        * May be null or a space separated array of URLS.
   57        */
   58       public static String getLocalCodebase () {
   59           return localCodebase;
   60       }
   61   
   62       /**
   63        * Return true if the system property "java.rmi.server.useCodebaseOnly"
   64        * is set, false otherwise.
   65        */
   66       public static boolean useCodebaseOnly () {
   67           return useCodebaseOnly;
   68       }
   69   
   70       /**
   71        * Returns a class instance for the specified class.
   72        * @param className the name of the class
   73        * @param remoteCodebase a space-separated array of urls at which
   74        * the class might be found. May be null.
   75        * @param loader a ClassLoader who may be used to
   76        * load the class if all other methods fail.
   77        * @return the <code>Class</code> object representing the loaded class.
   78        * @exception throws ClassNotFoundException if class cannot be loaded.
   79        */
   80       public static Class loadClass (String className,
   81                                      String remoteCodebase,
   82                                      ClassLoader loader)
   83           throws ClassNotFoundException {
   84   
   85           if (loader == null) {
   86               return loadClassM(className,remoteCodebase,useCodebaseOnly);
   87           } else {
   88               try {
   89                   return loadClassM(className,remoteCodebase,useCodebaseOnly);
   90               } catch (ClassNotFoundException e) {
   91                   return loader.loadClass(className);
   92               }
   93           }
   94       }
   95   
   96       /**
   97        * Returns a class instance for the specified class.
   98        * @param className the name of the class
   99        * @param remoteCodebase a space-separated array of urls at which
  100        * the class might be found. May be null.
  101        * @return the <code>Class</code> object representing the loaded class.
  102        * @exception throws ClassNotFoundException if class cannot be loaded.
  103        */
  104       public static Class loadClass (String className,
  105                                      String remoteCodebase)
  106           throws ClassNotFoundException {
  107           return loadClass(className,remoteCodebase,null);
  108       }
  109   
  110       /**
  111        * Returns a class instance for the specified class.
  112        * @param className the name of the class
  113        * @return the <code>Class</code> object representing the loaded class.
  114        * @exception throws ClassNotFoundException if class cannot be loaded.
  115        */
  116       public static Class loadClass (String className)
  117           throws ClassNotFoundException {
  118           return loadClass(className,null,null);
  119       }
  120   
  121       private static final String LOCAL_CODEBASE_KEY = "java.rmi.server.codebase";
  122       private static final String USE_CODEBASE_ONLY_KEY = "java.rmi.server.useCodebaseOnly";
  123       private static String localCodebase = null;
  124       private static boolean useCodebaseOnly;
  125   
  126       static {
  127           setCodebaseProperties();
  128       }
  129   
  130       public static final void main (String[] args) {
  131           System.out.println("1.2 VM");
  132   
  133           /*
  134                    // If on 1.2, use a policy with all permissions.
  135                    System.setSecurityManager (new javax.rmi.download.SecurityManager());
  136                    String targetClass = "[[Lrmic.Typedef;";
  137                    System.out.println("localCodebase =  "+localCodebase);
  138                    System.out.println("Trying to load "+targetClass);
  139                    try {
  140                    Class clz = loadClass(targetClass,null,localCodebase);
  141                    System.out.println("Loaded: "+clz);
  142                    } catch (ClassNotFoundException e) {
  143                    System.out.println("Caught "+e);
  144                    }
  145           */
  146       }
  147   
  148       /**
  149        * Set the codebase and useCodebaseOnly properties. This is public
  150        * only for test code.
  151        */
  152       public static synchronized void setCodebaseProperties () {
  153           String prop = (String)AccessController.doPrivileged(
  154               new GetPropertyAction(LOCAL_CODEBASE_KEY)
  155           );
  156           if (prop != null && prop.trim().length() > 0) {
  157               localCodebase = prop;
  158           }
  159   
  160           prop = (String)AccessController.doPrivileged(
  161               new GetPropertyAction(USE_CODEBASE_ONLY_KEY)
  162           );
  163           if (prop != null && prop.trim().length() > 0) {
  164               useCodebaseOnly = Boolean.valueOf(prop).booleanValue();
  165           }
  166       }
  167   
  168       /**
  169        * Set the default code base. This method is here only
  170        * for test code.
  171        */
  172       public static synchronized void setLocalCodebase(String codebase) {
  173           localCodebase = codebase;
  174       }
  175   
  176       private static Class loadClassM (String className,
  177                               String remoteCodebase,
  178                               boolean useCodebaseOnly)
  179           throws ClassNotFoundException {
  180   
  181           try {
  182               return JDKClassLoader.loadClass(null,className);
  183           } catch (ClassNotFoundException e) {}
  184           try {
  185               if (!useCodebaseOnly && remoteCodebase != null) {
  186                   return RMIClassLoader.loadClass(remoteCodebase,
  187                                                   className);
  188               } else {
  189                   return RMIClassLoader.loadClass(className);
  190               }
  191           } catch (MalformedURLException e) {
  192               className = className + ": " + e.toString();
  193           }
  194   
  195           throw new ClassNotFoundException(className);
  196       }
  197   }

Save This Page
Home » openjdk-7 » com.sun.corba.se.impl » util » [javadoc | source]