diff options
Diffstat (limited to 'libjava/java/rmi/server/RemoteObject.java')
-rw-r--r-- | libjava/java/rmi/server/RemoteObject.java | 34 |
1 files changed, 20 insertions, 14 deletions
diff --git a/libjava/java/rmi/server/RemoteObject.java b/libjava/java/rmi/server/RemoteObject.java index 1bc7648c8fc..6dca07f8e1a 100644 --- a/libjava/java/rmi/server/RemoteObject.java +++ b/libjava/java/rmi/server/RemoteObject.java @@ -45,14 +45,17 @@ import java.lang.reflect.Constructor; import java.rmi.NoSuchObjectException; import java.rmi.Remote; import java.rmi.UnmarshalException; +import java.util.WeakHashMap; public abstract class RemoteObject implements Remote, Serializable { -public static final long serialVersionUID = -3215090123894869218l; +private static final long serialVersionUID = -3215090123894869218l; protected transient RemoteRef ref; +private static final WeakHashMap stubs = new WeakHashMap(); + protected RemoteObject() { this(null); } @@ -65,21 +68,24 @@ public RemoteRef getRef() { return (ref); } +synchronized static void addStub(Remote obj, Remote stub) +{ + stubs.put(obj, stub); +} + +synchronized static void deleteStub(Remote obj) +{ + stubs.remove(obj); +} + public static Remote toStub(Remote obj) throws NoSuchObjectException { - Class cls = obj.getClass(); - String classname = cls.getName(); - ClassLoader cl = cls.getClassLoader(); - try - { - Class scls = cl.loadClass(classname + "_Stub"); - // JDK 1.2 stubs - Class[] stubprototype = new Class[] { RemoteRef.class }; - Constructor con = scls.getConstructor(stubprototype); - return (Remote)(con.newInstance(new Object[]{obj})); - } - catch (Exception e) {} - throw new NoSuchObjectException(obj.getClass().getName()); + Remote stub = (Remote)stubs.get(obj); + + if (stub == null) + throw new NoSuchObjectException(obj.getClass().getName()); + + return stub; } public int hashCode() { |