diff options
author | Audrius Meskauskas <audriusa@Bioinformatics.org> | 2006-03-23 16:12:56 +0000 |
---|---|---|
committer | Audrius Meskauskas <audriusa@Bioinformatics.org> | 2006-03-23 16:12:56 +0000 |
commit | 099e62c20e8d1f65234d6a99ccafc7fcba1d901f (patch) | |
tree | 73437f714da7ad4d8f5fb4cacfbf15dfd8303a62 /java | |
parent | 0fcfee9e2f7c1a68ed31399cba3ed83a9446104b (diff) | |
download | classpath-099e62c20e8d1f65234d6a99ccafc7fcba1d901f.tar.gz |
2006-03-23 Audrius Meskauskas <AudriusA@Bioinformatics.org>
* gnu/java/rmi/activation/ActivationSystemTransient.java
(debug): Made public. (constructor): Made protected.
(activate, getActivationDesc): Throw more informative exceptions.
* gnu/java/rmi/server/UnicastConnectionManager.java (toString):
New method.
* gnu/java/rmi/server/UnicastRef.java (remoteToString):
Stub, implemented.
* gnu/java/rmi/server/UnicastServer.java (incomingMessageCall):
Documented.
* gnu/java/rmi/server/UnicastServerRef.java (incomingMessageCall):
Better exception.
* java/rmi/activation/Activatable.java (obtainId): Use the activation
system, passed in the activation descriptor field.
* java/rmi/activation/ActivationGroup.java (createGroup): Likewise.
* java/rmi/activation/ActivationGroupID.java (system, uid): Changed
to package private final. (equals): Compare uid, not the system.
(hashCode): Forward to uid.hashCode(). toString(): New method.
* java/rmi/activation/ActivationID.java (readObject, writeObject):
Rewritten. (equals): Compare UID only. toString(): New method.
* java/rmi/server/ObjID.java (eq): New method. (equals): Compare also
UID (space). (hashCode, toString): Rewritten.
* java/rmi/server/RemoteObjectInvocationHandler.java (noArgs):
New method. (invoke): Treat null as an empty array for parameters.
* java/rmi/server/UID.java (toString): Rewritten. (hashCode):
Include count, do not include the static machineId.
Diffstat (limited to 'java')
-rw-r--r-- | java/rmi/activation/Activatable.java | 15 | ||||
-rw-r--r-- | java/rmi/activation/ActivationGroup.java | 23 | ||||
-rw-r--r-- | java/rmi/activation/ActivationGroupID.java | 27 | ||||
-rw-r--r-- | java/rmi/activation/ActivationID.java | 14 | ||||
-rw-r--r-- | java/rmi/server/ObjID.java | 24 | ||||
-rw-r--r-- | java/rmi/server/RemoteObjectInvocationHandler.java | 10 | ||||
-rw-r--r-- | java/rmi/server/UID.java | 11 |
7 files changed, 93 insertions, 31 deletions
diff --git a/java/rmi/activation/Activatable.java b/java/rmi/activation/Activatable.java index 82de6ff0c..f7fe1ad55 100644 --- a/java/rmi/activation/Activatable.java +++ b/java/rmi/activation/Activatable.java @@ -215,13 +215,20 @@ public abstract class Activatable } /** - * Obtain the activation Id from the activation descriptor bu registering + * Obtain the activation Id from the activation descriptor by registering * within the current group. */ - static ActivationID obtainId(ActivationDesc descriptor) throws RemoteException, - UnknownGroupException, ActivationException + static ActivationID obtainId(ActivationDesc descriptor) + throws RemoteException, UnknownGroupException, ActivationException { - return ActivationGroup.currentGroupID().getSystem().registerObject(descriptor); + ActivationGroupID id = descriptor.getGroupID(); + ActivationSystem system; + + if (id != null) + system = id.getSystem(); + else + system = ActivationGroup.currentGroupID().getSystem(); + return system.registerObject(descriptor); } /** diff --git a/java/rmi/activation/ActivationGroup.java b/java/rmi/activation/ActivationGroup.java index 27a0185d0..f90300acc 100644 --- a/java/rmi/activation/ActivationGroup.java +++ b/java/rmi/activation/ActivationGroup.java @@ -162,6 +162,11 @@ public abstract class ActivationGroup long incarnation) throws ActivationException { + // If the activation system is not yet set, set it to the system. + // passed in the group id. + if (system == null) + system = id.system; + ActivationGroup group = null; // TODO at the moment all groups are created on the current jre and the @@ -177,9 +182,9 @@ public abstract class ActivationGroup } catch (ClassNotFoundException e) { - ActivationException acex = new ActivationException("Cannot load " - + desc.className); - acex.initCause(e); + ActivationException acex = new ActivationException( + "Cannot load " + desc.className); + acex.detail = e; throw acex; } } @@ -189,16 +194,14 @@ public abstract class ActivationGroup try { Constructor constructor = groupClass.getConstructor(cConstructorTypes); - group = (ActivationGroup) constructor.newInstance(new Object[] { - id, - desc.data }); + group = (ActivationGroup) constructor.newInstance( + new Object[] { id, desc.data }); } catch (Exception e) { ActivationException acex = new ActivationException( - "Cannot instantiate " - + desc.className); - acex.initCause(e); + "Cannot instantiate " + desc.className); + acex.detail = e; throw acex; } @@ -211,7 +214,7 @@ public abstract class ActivationGroup catch (RemoteException e) { ActivationException acex = new ActivationException("createGroup"); - acex.initCause(e); + acex.detail = e; throw acex; } } diff --git a/java/rmi/activation/ActivationGroupID.java b/java/rmi/activation/ActivationGroupID.java index 941499aa8..e54b2a05d 100644 --- a/java/rmi/activation/ActivationGroupID.java +++ b/java/rmi/activation/ActivationGroupID.java @@ -39,6 +39,7 @@ exception statement from your version. */ package java.rmi.activation; import java.io.Serializable; +import java.rmi.server.UID; /** * This identifier identifies the activation group inside the scope of its @@ -58,17 +59,23 @@ public class ActivationGroupID /** * The associated activation system. */ - private ActivationSystem system; + final ActivationSystem system; + + /** + * The object identifier, making the ID unique. + */ + final UID uid; /** * Create the new activation group id in the scope of the given activation * system * - * @param system the activation system + * @param aSystem the activation system */ - public ActivationGroupID(ActivationSystem system) + public ActivationGroupID(ActivationSystem aSystem) { - this.system = system; + system = aSystem; + uid = new UID(); } /** @@ -86,7 +93,7 @@ public class ActivationGroupID */ public int hashCode() { - return system.hashCode(); + return uid.hashCode(); } /** @@ -98,10 +105,18 @@ public class ActivationGroupID if (obj instanceof ActivationGroupID) { ActivationGroupID that = (ActivationGroupID) obj; - return system.equals(that.system); + return uid.equals(that.uid); } else return false; } + + /** + * Get the string representation + */ + public String toString() + { + return uid.toString(); + } } diff --git a/java/rmi/activation/ActivationID.java b/java/rmi/activation/ActivationID.java index 09ce8352c..c4bbcd285 100644 --- a/java/rmi/activation/ActivationID.java +++ b/java/rmi/activation/ActivationID.java @@ -141,7 +141,7 @@ public class ActivationID if (obj instanceof ActivationID) { ActivationID that = (ActivationID) obj; - return eq(uid, that.uid) && eq(activator, that.activator); + return eq(uid, that.uid); } else return false; @@ -159,7 +159,7 @@ public class ActivationID ClassNotFoundException { uid = (UID) in.readObject(); - // TODO not complete! + activator = (Activator) in.readObject(); } /** @@ -173,7 +173,7 @@ public class ActivationID ClassNotFoundException { out.writeObject(uid); - // TODO not complete! + out.writeObject(activator); }; /** @@ -188,4 +188,12 @@ public class ActivationID return a.equals(b); } + /** + * Return the content based string representation. + */ + public String toString() + { + return uid.toString(); + } + } diff --git a/java/rmi/server/ObjID.java b/java/rmi/server/ObjID.java index ea4c8a928..1aaa22360 100644 --- a/java/rmi/server/ObjID.java +++ b/java/rmi/server/ObjID.java @@ -157,7 +157,7 @@ public final class ObjID */ public int hashCode() { - return ((int) objNum); + return space == null ? (int) objNum : space.hashCode() ^ (int) objNum; } /** @@ -165,19 +165,33 @@ public final class ObjID */ public boolean equals(Object obj) { - if (obj instanceof ObjID && this.objNum == ((ObjID) obj).objNum) + if (obj instanceof ObjID) { - return (true); + ObjID that = (ObjID) obj; + return that.objNum == objNum && eq(that.space, space); } - return (false); + else + return false; } /** + * Compare by .equals if both a and b are not null, compare directly if at + * least one of them is null. + */ + static final boolean eq(Object a, Object b) + { + if (a == null || b == null) + return a == b; + else + return a.equals(b); + } + + /** * Get the string representation. */ public String toString() { - return ("[objNum: " + objNum + ", " + space + "]"); + return (objNum + ":" + space); } } diff --git a/java/rmi/server/RemoteObjectInvocationHandler.java b/java/rmi/server/RemoteObjectInvocationHandler.java index afd1d5927..2c19cd5af 100644 --- a/java/rmi/server/RemoteObjectInvocationHandler.java +++ b/java/rmi/server/RemoteObjectInvocationHandler.java @@ -90,6 +90,11 @@ public class RemoteObjectInvocationHandler extends RemoteObject implements static final Class[] anObjectC = new Class[] { Object.class }; /** + * The empty object array to replace null when no args are passed. + */ + static final Object[] noArgs = new Object[0]; + + /** * Construct the remote invocation handler that forwards calls to the given * remote object. * @@ -143,6 +148,9 @@ public class RemoteObjectInvocationHandler extends RemoteObject implements throw new IllegalAccessException(name + " does not implement " + Remote.class.getName()); } + + if (parameters == null) + parameters = noArgs; String name = method.getName(); switch (name.charAt(0)) @@ -172,7 +180,7 @@ public class RemoteObjectInvocationHandler extends RemoteObject implements break; case 't': if (parameters.length == 0 && name.equals("toString")) - return proxyInstance.toString(); + return "Proxy stub:"+ref.remoteToString(); break; default: break; diff --git a/java/rmi/server/UID.java b/java/rmi/server/UID.java index 75cb9f6be..359630422 100644 --- a/java/rmi/server/UID.java +++ b/java/rmi/server/UID.java @@ -149,7 +149,7 @@ public final class UID */ public int hashCode() { - return (int) (unique ^ time ^ machineId); + return (int) (unique ^ time ^ count); } /** @@ -212,9 +212,16 @@ public final class UID /** * Get the string representation of this UID. + * + * @return a string, uniquely identifying this id. */ public String toString() { - return ("[UID: " + unique + "," + time + "," + count + "]"); + int max = Character.MAX_RADIX; + // Translate into object count, counting from 0. + long lc = (count + Short.MIN_VALUE) & 0xFFFF; + return Long.toString(time, max) + ":" + + Long.toString(unique, max) + ":" + + Long.toString(lc, max); } } |