home *** CD-ROM | disk | FTP | other *** search
/ Programming Languages Suite / ProgLangD.iso / VCAFE.3.0A / Main.bin / ObjID.java < prev    next >
Text File  |  1998-09-22  |  3KB  |  126 lines

  1. /*
  2.  * @(#)ObjID.java    1.7 98/07/01
  3.  *
  4.  * Copyright 1995-1998 by Sun Microsystems, Inc.,
  5.  * 901 San Antonio Road, Palo Alto, California, 94303, U.S.A.
  6.  * All rights reserved.
  7.  * 
  8.  * This software is the confidential and proprietary information
  9.  * of Sun Microsystems, Inc. ("Confidential Information").  You
  10.  * shall not disclose such Confidential Information and shall use
  11.  * it only in accordance with the terms of the license agreement
  12.  * you entered into with Sun.
  13.  */
  14. package java.rmi.server;
  15.  
  16. import java.io.ObjectInput;
  17. import java.io.ObjectOutput;
  18.  
  19. /**
  20.  * The class ObjID is used to identify remote objects uniquely in a VM
  21.  * over time. Each identifier contains an object number and an address
  22.  * space identifier that is unique with respect to a specific host. An
  23.  * object identifier is assigned to a remote object when it is
  24.  * exported.
  25.  */
  26. public final class ObjID implements java.io.Serializable {
  27.     /** well-known id for the registry */
  28.     public static final int REGISTRY_ID = 0;
  29.     /** well-known id for the distributed garbage collector */
  30.     public static final int DGC_ID = 2;
  31.  
  32.     /** object number */
  33.     private long objNum;
  34.     /** address space identifier (unique to host) */
  35.     private UID space;
  36.  
  37.     private static long nextNum = 0;
  38.     private static UID mySpace = new UID();
  39.  
  40.     /**
  41.      * Generate unique object identifier.
  42.      */
  43.     public ObjID () {
  44.     synchronized (mySpace) {
  45.         space = mySpace;
  46.         objNum = nextNum++;
  47.     }
  48.     }
  49.  
  50.     /**
  51.      * Generate a "well-known" object ID.  An object ID generated via
  52.      * this constructor will not clash with any object IDs generated
  53.      * via the default constructor.
  54.      * @param num a unique well-known object number
  55.      */
  56.     public ObjID (int num) {
  57.     space = new UID((short)0);
  58.     objNum = num;
  59.     }
  60.  
  61.     /**
  62.      * Private constructor for creating an object ID given its contents
  63.      * that is read from a stream.
  64.      */
  65.     private ObjID(long objNum, UID space) 
  66.     {
  67.     this.objNum = objNum;
  68.     this.space = space;
  69.     }
  70.     
  71.     /**
  72.      * Marshal object id to output stream.
  73.      */
  74.     public void write(ObjectOutput out) throws java.io.IOException
  75.     {
  76.     out.writeLong(objNum);
  77.     space.write(out);
  78.     }
  79.     
  80.     /**
  81.      * The read method constructs an object id whose contents is read
  82.      * from the specified input stream.
  83.      */
  84.     public static ObjID read(ObjectInput in)
  85.     throws java.io.IOException
  86.     {
  87.     long num = in.readLong();
  88.     UID space = UID.read(in);
  89.     return new ObjID(num, space);
  90.     }
  91.  
  92.     /**
  93.      * The hashcode is the object number.
  94.      */
  95.     public int hashCode() 
  96.     {
  97.     return (int) objNum;
  98.     }
  99.  
  100.     /**
  101.      * Two object identifiers are considered equal if they have the
  102.      * same contents.
  103.      */
  104.     public boolean equals(Object obj) 
  105.     {
  106.     if ((obj != null) && (obj instanceof ObjID)) {
  107.         ObjID id = (ObjID)obj;
  108.         return (objNum == id.objNum && space.equals(id.space));
  109.     } else {
  110.         return false;
  111.     }
  112.     }
  113.  
  114.     /**
  115.      * Returns a string containing the object id representation. The
  116.      * address space identifier is included in the string
  117.      * representation only if the object id is from a non-local
  118.      * address space.
  119.      */
  120.     public String toString()
  121.     {
  122.     return "[" + (space.equals(mySpace) ? "" : space + ", ") + 
  123.         objNum + "]";
  124.     }
  125. }
  126.