diff options
| author | aph <aph@138bc75d-0d04-0410-961f-82ee72b054a4> | 2005-02-16 18:51:25 +0000 |
|---|---|---|
| committer | aph <aph@138bc75d-0d04-0410-961f-82ee72b054a4> | 2005-02-16 18:51:25 +0000 |
| commit | a0134f4f9a316a9d8e34ea25238187c047ecce1f (patch) | |
| tree | 72b158fdd213cd3c9d1c1c7c1c11b22e22998ca2 /libjava/java/rmi | |
| parent | 96793571f3db37e64efb866a2264400239fd3459 (diff) | |
| download | ppe42-gcc-a0134f4f9a316a9d8e34ea25238187c047ecce1f.tar.gz ppe42-gcc-a0134f4f9a316a9d8e34ea25238187c047ecce1f.zip | |
2005-02-08 Andrew Haley <aph@redhat.com>
* javax/security/auth/Subject.java (doAsPrivileged): If acc is
null, create a new AccessControlContext.
* java/security/SecureClassLoader.java (protectionDomainCache):
new field.
(defineClass): Create a new protection domain and add it to our
cache.
* java/rmi/server/UnicastRemoteObject.java (exportObject): Call
addStub() to keep track of the stub we've exported.
(unexportObject): Call deleteStub().
* java/rmi/server/RemoteObject.java (stubs): New field.
(addStub): New method.
(deleteStub): New method.
(toStub): Rewrite.
* java/lang/VMCompiler.java (loadSharedLibrary): Pass
true to findHelper (tryParents).
* gnu/gcj/runtime/SharedLibLoader.java (SharedLibLoader):
Likewise.
* java/net/URLClassLoader.java (SoURLLoader): Likewise.
* gnu/gcj/runtime/SharedLibHelper.java (SharedLibHelper): Pass
ProtectionDomain.
If tryParents is false, don't scan parent class loaders.
* java/security/Permissions.java (PermissionsHash.implies):
Iterate over the collection and invoke implies() on each
element.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@95111 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libjava/java/rmi')
| -rw-r--r-- | libjava/java/rmi/server/RemoteObject.java | 32 | ||||
| -rw-r--r-- | libjava/java/rmi/server/UnicastRemoteObject.java | 11 |
2 files changed, 27 insertions, 16 deletions
diff --git a/libjava/java/rmi/server/RemoteObject.java b/libjava/java/rmi/server/RemoteObject.java index 1bc7648c8fc..374fee85797 100644 --- a/libjava/java/rmi/server/RemoteObject.java +++ b/libjava/java/rmi/server/RemoteObject.java @@ -45,6 +45,7 @@ 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 { @@ -53,6 +54,8 @@ public 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() { diff --git a/libjava/java/rmi/server/UnicastRemoteObject.java b/libjava/java/rmi/server/UnicastRemoteObject.java index 6e8fb253820..ed296f03341 100644 --- a/libjava/java/rmi/server/UnicastRemoteObject.java +++ b/libjava/java/rmi/server/UnicastRemoteObject.java @@ -98,7 +98,9 @@ public static RemoteStub exportObject(Remote obj) throws RemoteException { { sref = new UnicastServerRef(new ObjID (), port, ssf); } - return (sref.exportObject (obj)); + Remote stub = sref.exportObject (obj); + addStub(obj, stub); + return stub; } /** @@ -116,12 +118,15 @@ public static RemoteStub exportObject(Remote obj) throws RemoteException { { if (obj instanceof RemoteObject) { + deleteStub(obj); UnicastServerRef sref = (UnicastServerRef)((RemoteObject)obj).getRef(); return sref.unexportObject(obj, force); } else - //FIX ME - ; + { + //FIX ME + ; + } return true; } |

