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 / DGCImpl.class (.txt) < prev    next >
Encoding:
Java Class File  |  1997-07-08  |  5.3 KB  |  175 lines

  1. package sun.rmi.transport;
  2.  
  3. import java.rmi.RemoteException;
  4. import java.rmi.dgc.DGC;
  5. import java.rmi.dgc.Lease;
  6. import java.rmi.dgc.VMID;
  7. import java.rmi.server.LogStream;
  8. import java.rmi.server.ObjID;
  9. import java.rmi.server.RemoteServer;
  10. import java.rmi.server.RemoteStub;
  11. import java.rmi.server.ServerNotActiveException;
  12. import java.util.Enumeration;
  13. import java.util.Hashtable;
  14. import sun.rmi.server.UnicastServerRef;
  15.  
  16. final class DGCImpl implements DGC {
  17.    static int logLevel = LogStream.parseLevel(Utils.getProperty("sun.rmi.dgc.logLevel"));
  18.    static final long leaseCheckInterval = Utils.getLong("sun.rmi.dgc.checkInterval", 300000L);
  19.    private static ObjID dgcID;
  20.    private static DGCImpl dgc;
  21.    private Hashtable leaseTable = new Hashtable();
  22.    private Thread checker;
  23.  
  24.    static DGCImpl getDGCImpl() {
  25.       return dgc;
  26.    }
  27.  
  28.    private DGCImpl() {
  29.    }
  30.  
  31.    public Lease dirty(ObjID[] var1, long var2, Lease var4) {
  32.       VMID var5 = var4.getVMID();
  33.       long var6 = var4.getValue();
  34.       if (logLevel >= 20) {
  35.          LogStream.log("dgc").println("DGCImpl.dirty: vmid = " + var5);
  36.       }
  37.  
  38.       if (var5 == null) {
  39.          var4 = new Lease(var5 = new VMID(), var6);
  40.          if (logLevel >= 10) {
  41.             String var8;
  42.             try {
  43.                var8 = RemoteServer.getClientHost();
  44.             } catch (ServerNotActiveException var14) {
  45.                var8 = "<unknown host>";
  46.             }
  47.  
  48.             LogStream.log("dgc").println("DGCImpl.dirty: assigning vmid " + var5 + " to client " + var8);
  49.          }
  50.       }
  51.  
  52.       Hashtable var15 = this.leaseTable;
  53.       synchronized(var15){}
  54.  
  55.       try {
  56.          LeaseInfo var10 = (LeaseInfo)this.leaseTable.get(var5);
  57.          if (var10 == null) {
  58.             this.leaseTable.put(var5, new LeaseInfo(var5, var6));
  59.             if (this.checker == null) {
  60.                this.checker = RMIThread.newThread(new LeaseChecker(), "LeaseChecker", true);
  61.                this.checker.start();
  62.             }
  63.          } else {
  64.             var10.renew(var6);
  65.          }
  66.       } catch (Throwable var13) {
  67.          throw var13;
  68.       }
  69.  
  70.       for(int var16 = 0; var16 < var1.length; ++var16) {
  71.          if (logLevel >= 20) {
  72.             LogStream.log("dgc").println("DGCImpl.dirty: id = " + var1[var16] + ", vmid = " + var5 + ", duration = " + var6);
  73.          }
  74.  
  75.          ObjectTable.referenced(var1[var16], var2, var5);
  76.       }
  77.  
  78.       return var4;
  79.    }
  80.  
  81.    public void clean(ObjID[] var1, long var2, VMID var4, boolean var5) {
  82.       for(int var6 = 0; var6 < var1.length; ++var6) {
  83.          if (logLevel >= 20) {
  84.             LogStream.log("dgc").println("DGCImpl.clean: id = " + var1[var6] + ", vmid = " + var4 + ", strong = " + var5);
  85.          }
  86.  
  87.          ObjectTable.unreferenced(var1[var6], var2, var4, var5);
  88.       }
  89.  
  90.    }
  91.  
  92.    void registerTarget(VMID var1, Target var2) {
  93.       Hashtable var3 = this.leaseTable;
  94.       synchronized(var3){}
  95.  
  96.       try {
  97.          LeaseInfo var5 = (LeaseInfo)this.leaseTable.get(var1);
  98.          if (var5 == null) {
  99.             var2.vmidDead(var1);
  100.          } else if (!var5.notifyList.contains(var2)) {
  101.             var5.notifyList.addElement(var2);
  102.          }
  103.       } catch (Throwable var7) {
  104.          throw var7;
  105.       }
  106.  
  107.    }
  108.  
  109.    void unregisterTarget(VMID var1, Target var2) {
  110.       Hashtable var3 = this.leaseTable;
  111.       synchronized(var3){}
  112.  
  113.       try {
  114.          LeaseInfo var5 = (LeaseInfo)this.leaseTable.get(var1);
  115.          if (var5 != null) {
  116.             var5.notifyList.removeElement(var2);
  117.          }
  118.       } catch (Throwable var7) {
  119.          throw var7;
  120.       }
  121.  
  122.    }
  123.  
  124.    boolean checkLeases() {
  125.       long var1 = System.currentTimeMillis();
  126.       Hashtable var4 = this.leaseTable;
  127.       synchronized(var4){}
  128.  
  129.       boolean var3;
  130.       try {
  131.          Enumeration var6 = this.leaseTable.elements();
  132.  
  133.          while(var6.hasMoreElements()) {
  134.             LeaseInfo var7 = (LeaseInfo)var6.nextElement();
  135.             if (var7.expired(var1)) {
  136.                this.leaseTable.remove(var7);
  137.             }
  138.          }
  139.  
  140.          if (!this.leaseTable.isEmpty()) {
  141.             var3 = true;
  142.             return var3;
  143.          }
  144.  
  145.          this.checker = null;
  146.          var3 = false;
  147.       } catch (Throwable var9) {
  148.          throw var9;
  149.       }
  150.  
  151.       return var3;
  152.    }
  153.  
  154.    static ObjID getID() {
  155.       return dgcID;
  156.    }
  157.  
  158.    static {
  159.       try {
  160.          dgc = new DGCImpl();
  161.          dgcID = new ObjID(2);
  162.          LiveRef var0 = new LiveRef(dgcID, 0);
  163.          UnicastServerRef var1 = new UnicastServerRef(var0);
  164.          RemoteStub var2 = var1.setSkeleton(dgc);
  165.          Target var3 = new Target(dgc, var1, var2);
  166.          var3.setPermanent(true);
  167.          ObjectTable.putTarget(dgcID, var3);
  168.       } catch (RemoteException var4) {
  169.          System.out.println("couldn't init remote garbage collector");
  170.          System.out.println(var4.getMessage());
  171.          ((Throwable)var4).printStackTrace();
  172.       }
  173.    }
  174. }
  175.