summaryrefslogtreecommitdiff
path: root/java/rmi
diff options
context:
space:
mode:
authorAudrius Meskauskas <audriusa@Bioinformatics.org>2006-03-23 16:12:56 +0000
committerAudrius Meskauskas <audriusa@Bioinformatics.org>2006-03-23 16:12:56 +0000
commit099e62c20e8d1f65234d6a99ccafc7fcba1d901f (patch)
tree73437f714da7ad4d8f5fb4cacfbf15dfd8303a62 /java/rmi
parent0fcfee9e2f7c1a68ed31399cba3ed83a9446104b (diff)
downloadclasspath-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/rmi')
-rw-r--r--java/rmi/activation/Activatable.java15
-rw-r--r--java/rmi/activation/ActivationGroup.java23
-rw-r--r--java/rmi/activation/ActivationGroupID.java27
-rw-r--r--java/rmi/activation/ActivationID.java14
-rw-r--r--java/rmi/server/ObjID.java24
-rw-r--r--java/rmi/server/RemoteObjectInvocationHandler.java10
-rw-r--r--java/rmi/server/UID.java11
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);
}
}