FileDocCategorySizeDatePackage
ObjID.javaAPI DocJava SE 6 API7774Tue Jun 10 00:25:44 BST 2008java.rmi.server

ObjID

public final class ObjID extends Object implements Serializable
An ObjID is used to identify a remote object exported to an RMI runtime. When a remote object is exported, it is assigned an object identifier either implicitly or explicitly, depending on the API used to export.

The {@link #ObjID()} constructor can be used to generate a unique object identifier. Such an ObjID is unique over time with respect to the host it is generated on. The {@link #ObjID(int)} constructor can be used to create a "well-known" object identifier. The scope of a well-known ObjID depends on the RMI runtime it is exported to.

An ObjID instance contains an object number (of type long) and an address space identifier (of type {@link UID}). In a unique ObjID, the address space identifier is unique with respect to a given host over time. In a well-known ObjID, the address space identifier is equivalent to one returned by invoking the {@link UID#UID(short)} constructor with the value zero.

If the system property java.rmi.server.randomIDs is defined to equal the string "true" (case insensitive), then the {@link #ObjID()} constructor will use a cryptographically strong random number generator to choose the object number of the returned ObjID.

author
Ann Wollrath
author
Peter Jones
version
1.31, 06/02/23
since
JDK1.1

Fields Summary
public static final int
REGISTRY_ID
Object number for well-known ObjID of the registry.
public static final int
ACTIVATOR_ID
Object number for well-known ObjID of the activator.
public static final int
DGC_ID
Object number for well-known ObjID of the distributed garbage collector.
private static final long
serialVersionUID
indicate compatibility with JDK 1.1.x version of class
private static final AtomicLong
nextObjNum
private static final UID
mySpace
private static final SecureRandom
secureRandom
private final long
objNum
private final UID
space
Constructors Summary
public ObjID()
Generates a unique object identifier.

If the system property java.rmi.server.randomIDs is defined to equal the string "true" (case insensitive), then this constructor will use a cryptographically strong random number generator to choose the object number of the returned ObjID.


                                                
      
	/*
	 * If generating random object numbers, create a new UID to
	 * ensure uniqueness; otherwise, use a shared UID because
	 * sequential object numbers already ensure uniqueness.
	 */
	if (useRandomIDs()) {
	    space = new UID();
	    objNum = secureRandom.nextLong();
	} else {
	    space = mySpace;
	    objNum = nextObjNum.getAndIncrement();
	}
    
public ObjID(int objNum)
Creates a "well-known" object identifier.

An ObjID created via this constructor will not clash with any ObjIDs generated via the no-arg constructor.

param
objNum object number for well-known object identifier

	space = new UID((short) 0);
	this.objNum = objNum;
    
private ObjID(long objNum, UID space)
Constructs an object identifier given data read from a stream.

	this.objNum = objNum;
	this.space = space;
    
Methods Summary
public booleanequals(java.lang.Object obj)
Compares the specified object with this ObjID for equality. This method returns true if and only if the specified object is an ObjID instance with the same object number and address space identifier as this one.

param
obj the object to compare this ObjID to
return
true if the given object is equivalent to this one, and false otherwise

	if (obj instanceof ObjID) {
	    ObjID id = (ObjID) obj;
	    return objNum == id.objNum && space.equals(id.space);
	} else {
	    return false;
	}
    
public inthashCode()
Returns the hash code value for this object identifier, the object number.

return
the hash code value for this object identifier

	return (int) objNum;
    
public static java.rmi.server.ObjIDread(java.io.ObjectInput in)
Constructs and returns a new ObjID instance by unmarshalling a binary representation from an ObjectInput instance.

Specifically, this method first invokes the given stream's {@link ObjectInput#readLong()} method to read an object number, then it invokes {@link UID#read(DataInput)} with the stream to read an address space identifier, and then it creates and returns a new ObjID instance that contains the object number and address space identifier that were read from the stream.

param
in the ObjectInput instance to read ObjID from
return
unmarshalled ObjID instance
throws
IOException if an I/O error occurs while performing this operation

	long num = in.readLong();
	UID space = UID.read(in);
	return new ObjID(num, space);
    
public java.lang.StringtoString()
Returns a string representation of this object identifier.

return
a string representation of this object identifier

	return "[" + (space.equals(mySpace) ? "" : space + ", ") +
	    objNum + "]";
    
private static booleanuseRandomIDs()

	String value = AccessController.doPrivileged(
	    new GetPropertyAction("java.rmi.server.randomIDs"));
	return value == null ? true : Boolean.parseBoolean(value);
    
public voidwrite(java.io.ObjectOutput out)
Marshals a binary representation of this ObjID to an ObjectOutput instance.

Specifically, this method first invokes the given stream's {@link ObjectOutput#writeLong(long)} method with this object identifier's object number, and then it writes its address space identifier by invoking its {@link UID#write(DataOutput)} method with the stream.

param
out the ObjectOutput instance to write this ObjID to
throws
IOException if an I/O error occurs while performing this operation

	out.writeLong(objNum);
	space.write(out);