diff options
author | Mark Wielaard <mark@gcc.gnu.org> | 2005-11-15 23:20:01 +0000 |
---|---|---|
committer | Mark Wielaard <mark@gcc.gnu.org> | 2005-11-15 23:20:01 +0000 |
commit | 8f523f3a1047919d3563daf1ef47ba87336ebe89 (patch) | |
tree | a5eb7cf42a51869cc8aa1fad7ad6a90cca47fdd8 /libjava/classpath/java/rmi | |
parent | 02e549bfaaec38f68307e7f34e46ea57ea1809af (diff) | |
download | gcc-8f523f3a1047919d3563daf1ef47ba87336ebe89.zip gcc-8f523f3a1047919d3563daf1ef47ba87336ebe89.tar.gz gcc-8f523f3a1047919d3563daf1ef47ba87336ebe89.tar.bz2 |
Imported GNU Classpath 0.19 + gcj-import-20051115.
* sources.am: Regenerated.
* Makefile.in: Likewise.
* scripts/makemake.tcl: Use glob -nocomplain.
From-SVN: r107049
Diffstat (limited to 'libjava/classpath/java/rmi')
5 files changed, 198 insertions, 240 deletions
diff --git a/libjava/classpath/java/rmi/activation/ActivationGroup_Stub.java b/libjava/classpath/java/rmi/activation/ActivationGroup_Stub.java new file mode 100644 index 0000000..249137b --- /dev/null +++ b/libjava/classpath/java/rmi/activation/ActivationGroup_Stub.java @@ -0,0 +1,110 @@ +/* ActivationGroup_Stub.java -- Stub class for ActivationGroup impls. + Copyright (C) 2005 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +General Public License for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + + +package java.rmi.activation; + +import java.lang.reflect.Method; +import java.rmi.MarshalledObject; +import java.rmi.Remote; +import java.rmi.RemoteException; +import java.rmi.UnexpectedException; +import java.rmi.server.RemoteRef; +import java.rmi.server.RemoteStub; + +/** + * A stub class for {@link ActivationGroup} implementations. + * + * @author Roman Kennke (kennke@aicas.com) + */ +public class ActivationGroup_Stub extends RemoteStub + implements ActivationInstantiator, Remote +{ + private static final long serialVersionUID = 2L; + + /** + * Creates a new instance of ActivationGroup_Stub. + * + * @param ref the remote reference + */ + public ActivationGroup_Stub(RemoteRef ref) + { + super(ref); + } + + /** + * Stub method for <code>ActivationGroup.newInstance()</code>. + * + * @param id the activation ID + * @param desc the activation description + * + * @return the return value of the invocation + * + * @throws RemoteException if the invocation throws a RemoteException + * @throws ActivationException if the invocation throws an + * ActivationException + */ + public MarshalledObject newInstance(ActivationID id, ActivationDesc desc) + throws RemoteException, ActivationException + { + try + { + Method method = ActivationGroup_Stub.class.getDeclaredMethod + ("newInstance", new Class[]{ ActivationID.class, + ActivationDesc.class }); + return (MarshalledObject) ref.invoke(this, method, + new Object[]{id, desc}, + -5274445189091581345L); + } + catch (RuntimeException ex) + { + throw ex; + } + catch (RemoteException ex) + { + throw ex; + } + catch (ActivationException ex) + { + throw ex; + } + catch (Exception ex) + { + throw new UnexpectedException("Unexpected exception", ex); + } + } +} diff --git a/libjava/classpath/java/rmi/server/LoaderHandler.java b/libjava/classpath/java/rmi/server/LoaderHandler.java index 1890857..0489cd1 100644 --- a/libjava/classpath/java/rmi/server/LoaderHandler.java +++ b/libjava/classpath/java/rmi/server/LoaderHandler.java @@ -45,7 +45,11 @@ import java.net.URL; */ public interface LoaderHandler { - String packagePrefix = ""; + /** + * For binary compatibility with the JDK, the string "sun.rmi.server". + * Not actually used for anything. + */ + String packagePrefix = "sun.rmi.server"; /** * @deprecated diff --git a/libjava/classpath/java/rmi/server/RMIClassLoader.java b/libjava/classpath/java/rmi/server/RMIClassLoader.java index a7a7cb8..f8997fd 100644 --- a/libjava/classpath/java/rmi/server/RMIClassLoader.java +++ b/libjava/classpath/java/rmi/server/RMIClassLoader.java @@ -38,14 +38,10 @@ exception statement from your version. */ package java.rmi.server; +import gnu.java.rmi.server.RMIClassLoaderImpl; + import java.net.MalformedURLException; import java.net.URL; -import java.net.URLClassLoader; -import java.util.ArrayList; -import java.util.Hashtable; -import java.util.Map; -import java.util.StringTokenizer; - /** * This class provides a set of public static utility methods for supporting @@ -60,221 +56,77 @@ public class RMIClassLoader */ private RMIClassLoader() {} - private static class MyClassLoader extends URLClassLoader - { - // Package-private to avoid a trampoline constructor. - MyClassLoader (URL[] urls, ClassLoader parent, String annotation) - { - super (urls, parent); - this.annotation = annotation; - } - - private MyClassLoader (URL[] urls, ClassLoader parent) - { - super (urls, parent); - this.annotation = urlToAnnotation (urls); - } - - public static String urlToAnnotation (URL[] urls) - { - if (urls.length == 0) - return null; - - StringBuffer annotation = new StringBuffer (64 * urls.length); - - for (int i = 0; i < urls.length; i++) - { - annotation.append (urls [i].toExternalForm()); - annotation.append (' '); - } - - return annotation.toString(); - } - - public final String getClassAnnotation() - { - return annotation; - } - - private final String annotation; - } - - /** - * This class is used to identify a cached classloader by its codebase and - * the context classloader that is its parent. - */ - private static class CacheKey - { - private String mCodeBase; - private ClassLoader mContextClassLoader; - - public CacheKey (String theCodebase, ClassLoader theContextClassLoader) - { - mCodeBase = theCodebase; - mContextClassLoader = theContextClassLoader; - } - - /** - * @return true if the codebase and the context classloader are equal - */ - public boolean equals (Object theOther) - { - if (theOther instanceof CacheKey) - { - CacheKey key = (CacheKey) theOther; - - return (equals (this.mCodeBase,key.mCodeBase) - && equals (this.mContextClassLoader, key.mContextClassLoader)); - } - return false; - } - - /** - * Test if the two objects are equal or both null. - * @param theOne - * @param theOther - * @return - */ - private boolean equals (Object theOne, Object theOther) - { - return theOne != null ? theOne.equals (theOther) : theOther == null; - } - - /** - * @return hashCode - */ - public int hashCode() - { - return ((mCodeBase != null ? mCodeBase.hashCode() : 0) - ^(mContextClassLoader != null ? mContextClassLoader.hashCode() : -1)); - } - - public String toString() - { - return "[" + mCodeBase + "," + mContextClassLoader + "]"; - } - - } - - private static Map cacheLoaders; //map annotations to loaders - private static Map cacheAnnotations; //map loaders to annotations - - //defaultAnnotation is got from system property - // "java.rmi.server.defaultAnnotation" - private static String defaultAnnotation; - - //URL object for defaultAnnotation - private static URL defaultCodebase; - - //class loader for defaultAnnotation - private static MyClassLoader defaultLoader; - - static - { - // 89 is a nice prime number for Hashtable initial capacity - cacheLoaders = new Hashtable (89); - cacheAnnotations = new Hashtable (89); - - defaultAnnotation = System.getProperty ("java.rmi.server.defaultAnnotation"); - - try - { - if (defaultAnnotation != null) - defaultCodebase = new URL (defaultAnnotation); - } - catch (Exception _) - { - defaultCodebase = null; - } - - if (defaultCodebase != null) - { - defaultLoader = new MyClassLoader (new URL[] { defaultCodebase }, null, - defaultAnnotation); - cacheLoaders.put (new CacheKey (defaultAnnotation, - Thread.currentThread().getContextClassLoader()), - defaultLoader); - } - } - /** * @deprecated */ - public static Class loadClass (String name) + public static Class loadClass(String name) throws MalformedURLException, ClassNotFoundException { - return loadClass ("", name); + return loadClass("", name); } - public static Class loadClass (String codebases, String name) + public static Class loadClass(String codebase, String name) throws MalformedURLException, ClassNotFoundException { - ClassLoader loader = Thread.currentThread().getContextClassLoader(); - - //try context class loader first - try - { - return Class.forName(name, false, loader); - } - catch (ClassNotFoundException e) - { - // class not found in the local classpath - } + RMIClassLoaderSpi spi = getProviderInstance(); + if (spi == null) + spi = getDefaultProviderInstance(); + return spi.loadClass(codebase, name, null); + } - if (codebases.length() == 0) //=="" - { - loader = defaultLoader; - } - else - { - loader = getClassLoader(codebases); - } + public static Class loadClass(String codebase, String name, + ClassLoader defaultLoader) + throws MalformedURLException, ClassNotFoundException + { + RMIClassLoaderSpi spi = getProviderInstance(); + if (spi == null) + spi = getDefaultProviderInstance(); + return spi.loadClass(codebase, name, defaultLoader); + } - if (loader == null) - { - //do not throw NullPointerException - throw new ClassNotFoundException ("Could not find class (" + name + - ") at codebase (" + codebases + ")"); - } - - return Class.forName(name, false, loader); + /** + * Loads a class from <code>codeBase</code>. + * + * This method delegates to + * {@link RMIClassLoaderSpi#loadClass(String, String, ClassLoader)} and + * passes <code>codeBase.toString()</code> as first argument, + * <code>name</code> as second argument and <code>null</code> as third + * argument. + * + * @param codeBase the code base from which to load the class + * @param name the name of the class + * + * @return the loaded class + * + * @throws MalformedURLException if the URL is not well formed + * @throws ClassNotFoundException if the requested class cannot be found + */ + public static Class loadClass(URL codeBase, String name) + throws MalformedURLException, ClassNotFoundException + { + RMIClassLoaderSpi spi = getProviderInstance(); + if (spi == null) + spi = getDefaultProviderInstance(); + return spi.loadClass(codeBase.toString(), name, null); } /** * Gets a classloader for the given codebase and with the current * context classloader as parent. * - * @param codebases + * @param codebase * * @return a classloader for the given codebase * * @throws MalformedURLException if the codebase contains a malformed URL */ - public static ClassLoader getClassLoader (String codebases) + public static ClassLoader getClassLoader(String codebase) throws MalformedURLException { - ClassLoader loader; - CacheKey loaderKey = new CacheKey - (codebases, Thread.currentThread().getContextClassLoader()); - loader = (ClassLoader) cacheLoaders.get (loaderKey); - - if (loader == null) - { - //create an entry in cacheLoaders mapping a loader to codebases. - // codebases are separated by " " - StringTokenizer tok = new StringTokenizer (codebases, " "); - ArrayList urls = new ArrayList(); - - while (tok.hasMoreTokens()) - urls.add (new URL (tok.nextToken())); - - loader = new MyClassLoader ((URL[]) urls.toArray (new URL [urls.size()]), - Thread.currentThread().getContextClassLoader(), - codebases); - cacheLoaders.put (loaderKey, loader); - } - - return loader; + RMIClassLoaderSpi spi = getProviderInstance(); + if (spi == null) + spi = getDefaultProviderInstance(); + return spi.getClassLoader(codebase); } /** @@ -286,47 +138,12 @@ public class RMIClassLoader * @return a space seperated list of URLs where the class-definition * of cl may be found */ - public static String getClassAnnotation (Class cl) + public static String getClassAnnotation(Class cl) { - ClassLoader loader = cl.getClassLoader(); - - if (loader == null - || loader == ClassLoader.getSystemClassLoader()) - { - return System.getProperty ("java.rmi.server.codebase"); - } - - if (loader instanceof MyClassLoader) - { - return ((MyClassLoader) loader).getClassAnnotation(); - } - - String s = (String) cacheAnnotations.get (loader); - - if (s != null) - return s; - - if (loader instanceof URLClassLoader) - { - URL[] urls = ((URLClassLoader) loader).getURLs(); - - if (urls.length == 0) - return null; - - StringBuffer annotation = new StringBuffer (64 * urls.length); - - for (int i = 0; i < urls.length; i++) - { - annotation.append (urls [i].toExternalForm()); - annotation.append (' '); - } - - s = annotation.toString(); - cacheAnnotations.put (loader, s); - return s; - } - - return System.getProperty ("java.rmi.server.codebase"); + RMIClassLoaderSpi spi = getProviderInstance(); + if (spi == null) + spi = getDefaultProviderInstance(); + return spi.getClassAnnotation(cl); } /** @@ -336,4 +153,25 @@ public class RMIClassLoader { throw new Error ("Not implemented"); } + + /** + * Returns the default service provider for <code>RMIClassLoader</code>. + * + * @return the default provider for <code>RMIClassLoader</code> + */ + public static RMIClassLoaderSpi getDefaultProviderInstance() + { + return RMIClassLoaderImpl.getInstance(); + } + + /** + * Chooses, instantiates and returns a service provider. + * + * @return a service provider + */ + private static RMIClassLoaderSpi getProviderInstance() + { + // TODO: Do something more useful here. + return null; + } } diff --git a/libjava/classpath/java/rmi/server/RemoteObject.java b/libjava/classpath/java/rmi/server/RemoteObject.java index 0b3c229..60e57dc 100644 --- a/libjava/classpath/java/rmi/server/RemoteObject.java +++ b/libjava/classpath/java/rmi/server/RemoteObject.java @@ -120,7 +120,9 @@ public boolean equals(Object obj) { in.read (); //some unknown UnicastRef2 field } - cname = RemoteRef.packagePrefix + '.' + cname; + // It would be nice to use RemoteRef.packagePrefix here, but for binary + // compatibility with the JDK that has to contain "sun.rmi.server"... + cname = "gnu.java.rmi.server." + cname; try { Class cls = Class.forName(cname); diff --git a/libjava/classpath/java/rmi/server/RemoteRef.java b/libjava/classpath/java/rmi/server/RemoteRef.java index 7e34db3..f33f9d3 100644 --- a/libjava/classpath/java/rmi/server/RemoteRef.java +++ b/libjava/classpath/java/rmi/server/RemoteRef.java @@ -48,7 +48,11 @@ public interface RemoteRef extends Externalizable { long serialVersionUID = 3632638527362204081L; - String packagePrefix = "gnu.java.rmi.server"; + /** + * For binary compatibility with the JDK, the string "sun.rmi.server". + * Not actually used for anything. + */ + String packagePrefix = "sun.rmi.server"; /** * @deprecated |