You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by rs...@apache.org on 2002/08/23 02:15:26 UTC

cvs commit: jakarta-commons/discovery/src/java/org/apache/commons/discovery/jdk JDK11Hooks.java PsuedoSystemClassLoader.java JDKHooks.java JDK12Hooks.java

rsitze      2002/08/22 17:15:26

  Added:       discovery/src/java/org/apache/commons/discovery/jdk
                        JDK11Hooks.java PsuedoSystemClassLoader.java
                        JDKHooks.java JDK12Hooks.java
  Log:
  Oops.. forgot to drop this with the other changes..
  
  Revision  Changes    Path
  1.1                  jakarta-commons/discovery/src/java/org/apache/commons/discovery/jdk/JDK11Hooks.java
  
  Index: JDK11Hooks.java
  ===================================================================
  /*
   * $Header$
   * $Revision$
   * $Date$
   *
   * ====================================================================
   *
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 1999-2002 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution, if
   *    any, must include the following acknowlegement:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowlegement may appear in the software itself,
   *    if and wherever such third-party acknowlegements normally appear.
   *
   * 4. The names "The Jakarta Project", "Commons", and "Apache Software
   *    Foundation" must not be used to endorse or promote products derived
   *    from this software without prior written permission. For written
   *    permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache"
   *    nor may "Apache" appear in their names without prior written
   *    permission of the Apache Group.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   *
   */
  
  package org.apache.commons.discovery.jdk;
  
  import java.util.Enumeration;
  import java.io.IOException;
  
  
  /**
   * @author Richard A. Sitze
   */
  class JDK11Hooks extends JDKHooks {
      private static final ClassLoader systemClassLoader
          = new PsuedoSystemClassLoader();
  
  
      /**
       * The thread context class loader is available for JDK 1.2
       * or later, if certain security conditions are met.
       * 
       * @return The thread context class loader, if available.
       *         Otherwise return null.
       */
      public ClassLoader getThreadContextClassLoader() {
          return null;
      }
      
      /**
       * The system class loader is available for JDK 1.2
       * or later, if certain security conditions are met.
       * 
       * @return The system class loader, if available.
       *         Otherwise return null.
       */
      public ClassLoader getSystemClassLoader() {
          return systemClassLoader;
      }
  
      /**
       * Implement ClassLoader.getResources for JDK 1.1
       * 
       * On JDK1.1 there is no getResources() method. We emulate this by
       * using introspection and doing the lookup ourself, using the list
       * of URLs, via getURLs().
       */
      public Enumeration getResources(ClassLoader loader,
                                      String resourceName)
          throws IOException
      {
          /**
           * Not yet implemented...
           */
          return null;
      }
  }
  
  
  
  1.1                  jakarta-commons/discovery/src/java/org/apache/commons/discovery/jdk/PsuedoSystemClassLoader.java
  
  Index: PsuedoSystemClassLoader.java
  ===================================================================
  /*
   * $Header$
   * $Revision$
   * $Date$
   *
   * ====================================================================
   *
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 1999-2002 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution, if
   *    any, must include the following acknowlegement:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowlegement may appear in the software itself,
   *    if and wherever such third-party acknowlegements normally appear.
   *
   * 4. The names "The Jakarta Project", "Commons", and "Apache Software
   *    Foundation" must not be used to endorse or promote products derived
   *    from this software without prior written permission. For written
   *    permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache"
   *    nor may "Apache" appear in their names without prior written
   *    permission of the Apache Group.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   *
   */
  
  package org.apache.commons.discovery.jdk;
  
  import java.io.InputStream;
  import java.net.URL;
  
  
  /**
   * JDK 1.1.x compatible?
   * There is no direct way to get the system class loader
   * in 1.1.x, but this should be a good work around...
   */
  class PsuedoSystemClassLoader extends ClassLoader {
      protected Class loadClass(String className, boolean resolve)
          throws ClassNotFoundException
      {
          return findSystemClass(className);
      }
      
      public URL getResource(String resName) {
          return getSystemResource(resName);
      }
      
      public InputStream getResourceAsStream(String resName) {
          return getSystemResourceAsStream(resName);
      }
  }
  
  
  
  1.1                  jakarta-commons/discovery/src/java/org/apache/commons/discovery/jdk/JDKHooks.java
  
  Index: JDKHooks.java
  ===================================================================
  /*
   * $Header$
   * $Revision$
   * $Date$
   *
   * ====================================================================
   *
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 1999-2002 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution, if
   *    any, must include the following acknowlegement:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowlegement may appear in the software itself,
   *    if and wherever such third-party acknowlegements normally appear.
   *
   * 4. The names "The Jakarta Project", "Commons", and "Apache Software
   *    Foundation" must not be used to endorse or promote products derived
   *    from this software without prior written permission. For written
   *    permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache"
   *    nor may "Apache" appear in their names without prior written
   *    permission of the Apache Group.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   *
   */
  
  package org.apache.commons.discovery.jdk;
  
  import java.util.Enumeration;
  import java.io.IOException;
  
  
  /**
   * @author Richard A. Sitze
   */
  public abstract class JDKHooks {
      private static final JDKHooks jdkHooks;
      
      static {
          jdkHooks = new JDK12Hooks();
      }
      
      protected JDKHooks() { }
      
      /**
       * Return singleton object representing JVM hooks/tools.
       * 
       * TODO: add logic to detect JDK level.
       */
      public static final JDKHooks getJDKHooks() {
          return jdkHooks;
      }
  
      /**
       * The thread context class loader is available for JDK 1.2
       * or later, if certain security conditions are met.
       * 
       * @return The thread context class loader, if available.
       *         Otherwise return null.
       */
      public abstract ClassLoader getThreadContextClassLoader();
  
      /**
       * The system class loader is available for JDK 1.2
       * or later, if certain security conditions are met.
       * 
       * @return The system class loader, if available.
       *         Otherwise return null.
       */
      public abstract ClassLoader getSystemClassLoader();
      
      public abstract Enumeration getResources(ClassLoader loader,
                                               String resourceName)
          throws IOException;
  }
  
  
  
  1.1                  jakarta-commons/discovery/src/java/org/apache/commons/discovery/jdk/JDK12Hooks.java
  
  Index: JDK12Hooks.java
  ===================================================================
  /*
   * $Header$
   * $Revision$
   * $Date$
   *
   * ====================================================================
   *
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 1999-2002 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution, if
   *    any, must include the following acknowlegement:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowlegement may appear in the software itself,
   *    if and wherever such third-party acknowlegements normally appear.
   *
   * 4. The names "The Jakarta Project", "Commons", and "Apache Software
   *    Foundation" must not be used to endorse or promote products derived
   *    from this software without prior written permission. For written
   *    permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache"
   *    nor may "Apache" appear in their names without prior written
   *    permission of the Apache Group.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   *
   */
  
  package org.apache.commons.discovery.jdk;
  
  import java.util.Enumeration;
  import java.io.IOException;
  
  
  /**
   * @author Richard A. Sitze
   */
  class JDK12Hooks extends JDKHooks {
      /**
       * The thread context class loader is available for JDK 1.2
       * or later, if certain security conditions are met.
       * 
       * @return The thread context class loader, if available.
       *         Otherwise return null.
       */
      public ClassLoader getThreadContextClassLoader() {
          ClassLoader classLoader;
          
          try {
              classLoader = Thread.currentThread().getContextClassLoader();
          } catch (SecurityException e) {
              /**
               * SecurityException is thrown when
               * a) the context class loader isn't an ancestor of the
               *    calling class's class loader, or
               * b) if security permissions are restricted.
               * 
               * For (a), ignore and keep going.  We cannot help but also
               * ignore (b) with the logic below, but other calls elsewhere
               * (to obtain a class loader) will re-trigger this exception
               * where we can make a distinction.
               */
              classLoader = null;  // ignore
          }
          
          // Return the selected class loader
          return classLoader;
      }
      
      /**
       * The system class loader is available for JDK 1.2
       * or later, if certain security conditions are met.
       * 
       * @return The system class loader, if available.
       *         Otherwise return null.
       */
      public ClassLoader getSystemClassLoader() {
          ClassLoader classLoader;
          
          try {
              classLoader = ClassLoader.getSystemClassLoader();
          } catch (SecurityException e) {
              /**
               * Ignore and keep going.
               */
              classLoader = null;  // ignore
          }
          
          // Return the selected class loader
          return classLoader;
      }
  
      /**
       * Implement ClassLoader.getResources for JDK 1.1
       */
      public Enumeration getResources(ClassLoader loader,
                                      String resourceName)
          throws IOException
      {
          return loader.getResources(resourceName);
      }
  }
  
  
  

--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>