home *** CD-ROM | disk | FTP | other *** search
/ Symantec Visual Cafe for Java 2.5 / symantec-visual-cafe-2.5-database-dev-edition.iso / VPage / Java.bin / CLASSES.ZIP / sun / rmi / transport / ObjectTable.class (.txt) < prev    next >
Encoding:
Java Class File  |  1997-07-08  |  3.3 KB  |  113 lines

  1. package sun.rmi.transport;
  2.  
  3. import java.rmi.Remote;
  4. import java.rmi.dgc.VMID;
  5. import java.rmi.server.ExportException;
  6. import java.rmi.server.LogStream;
  7. import java.rmi.server.ObjID;
  8. import java.util.Enumeration;
  9. import java.util.Hashtable;
  10. import sun.misc.Ref;
  11.  
  12. public final class ObjectTable {
  13.    private static Hashtable objTable = new Hashtable();
  14.    private static Hashtable implTable = new Hashtable();
  15.    private static Reaper reaper = null;
  16.    private static Thread keepAlive = null;
  17.  
  18.    private ObjectTable() {
  19.    }
  20.  
  21.    static Target getTarget(ObjID var0) {
  22.       return (Target)objTable.get(var0);
  23.    }
  24.  
  25.    public static Target getTarget(Remote var0) {
  26.       return (Target)implTable.get(var0);
  27.    }
  28.  
  29.    static synchronized void putTarget(ObjID var0, Target var1) throws ExportException {
  30.       if (DGCImpl.logLevel >= 20) {
  31.          LogStream.log("dgc").println("ObjectTable.putTarget: add object " + var0 + ", target = " + var1);
  32.       }
  33.  
  34.       WeakRef var2 = var1.getWeakImpl();
  35.       if (!objTable.containsKey(var0) && !implTable.containsKey(var2)) {
  36.          objTable.put(var0, var1);
  37.          implTable.put(var2, var1);
  38.          if (reaper == null) {
  39.             reaper = new Reaper();
  40.             Thread var3 = RMIThread.newThread(reaper, "Reaper", true);
  41.             var3.start();
  42.          }
  43.  
  44.          if (keepAlive == null && !var1.isPermanent()) {
  45.             keepAlive = RMIThread.newThread(new KeepAlive(), "KeepAlive", false);
  46.             keepAlive.start();
  47.          }
  48.  
  49.       } else {
  50.          throw new ExportException("Object ID already in use");
  51.       }
  52.    }
  53.  
  54.    static synchronized void referenced(ObjID var0, long var1, VMID var3) {
  55.       Target var4 = getTarget(var0);
  56.       if (var4 != null) {
  57.          var4.referenced(var1, var3);
  58.       }
  59.  
  60.    }
  61.  
  62.    static synchronized void unreferenced(ObjID var0, long var1, VMID var3, boolean var4) {
  63.       Target var5 = getTarget(var0);
  64.       if (var5 != null) {
  65.          var5.unreferenced(var1, var3, var4);
  66.       }
  67.  
  68.    }
  69.  
  70.    static void reap() {
  71.       Enumeration var0 = objTable.keys();
  72.  
  73.       while(var0.hasMoreElements()) {
  74.          ObjID var1 = (ObjID)var0.nextElement();
  75.          Target var2 = getTarget(var1);
  76.          if (var2 != null) {
  77.             WeakRef var3 = var2.getWeakImpl();
  78.             if (((Ref)var3).get() == null) {
  79.                if (DGCImpl.logLevel >= 20) {
  80.                   LogStream.log("dgc").println("ObjectTable.reap: remove object " + var1);
  81.                }
  82.  
  83.                if (!var2.isEmpty()) {
  84.                   throw new Error("Reaping an object with references");
  85.                }
  86.  
  87.                implTable.remove(var3);
  88.                objTable.remove(var1);
  89.             }
  90.          }
  91.       }
  92.  
  93.       checkKeepAlive();
  94.    }
  95.  
  96.    private static synchronized void checkKeepAlive() {
  97.       if (keepAlive != null) {
  98.          Enumeration var0 = objTable.elements();
  99.  
  100.          while(var0.hasMoreElements()) {
  101.             Target var1 = (Target)var0.nextElement();
  102.             if (!var1.isPermanent()) {
  103.                return;
  104.             }
  105.          }
  106.  
  107.          keepAlive.stop();
  108.          keepAlive = null;
  109.       }
  110.  
  111.    }
  112. }
  113.