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

  1. package sun.rmi.transport;
  2.  
  3. import java.rmi.Remote;
  4. import java.rmi.dgc.VMID;
  5. import java.rmi.server.LogStream;
  6. import java.rmi.server.RemoteStub;
  7. import java.rmi.server.Unreferenced;
  8. import java.util.Hashtable;
  9. import java.util.Vector;
  10. import sun.rmi.server.Dispatcher;
  11.  
  12. public final class Target {
  13.    private boolean permanent = false;
  14.    private WeakRef weakImpl;
  15.    private Dispatcher disp;
  16.    private RemoteStub stub;
  17.    private Vector refSet = new Vector();
  18.    private Hashtable sequenceTable = new Hashtable(5);
  19.  
  20.    public Target(Remote var1, Dispatcher var2, RemoteStub var3) {
  21.       this.weakImpl = new WeakRef(var1);
  22.       this.disp = var2;
  23.       this.stub = var3;
  24.    }
  25.  
  26.    public RemoteStub getStub() {
  27.       return this.stub;
  28.    }
  29.  
  30.    WeakRef getWeakImpl() {
  31.       return this.weakImpl;
  32.    }
  33.  
  34.    Dispatcher getDispatcher() {
  35.       return this.disp;
  36.    }
  37.  
  38.    synchronized Remote getImpl() {
  39.       return (Remote)this.weakImpl.get();
  40.    }
  41.  
  42.    boolean isPermanent() {
  43.       return this.permanent;
  44.    }
  45.  
  46.    synchronized void pinImpl() {
  47.       this.weakImpl.pin();
  48.    }
  49.  
  50.    synchronized void unpinImpl() {
  51.       if (!this.permanent && this.refSet.isEmpty()) {
  52.          this.weakImpl.unpin();
  53.       }
  54.  
  55.    }
  56.  
  57.    public synchronized void setPermanent(boolean var1) {
  58.       this.permanent = var1;
  59.       if (this.permanent) {
  60.          this.pinImpl();
  61.       } else {
  62.          this.unpinImpl();
  63.       }
  64.    }
  65.  
  66.    synchronized void referenced(long var1, VMID var3) {
  67.       SequenceEntry var4 = (SequenceEntry)this.sequenceTable.get(var3);
  68.       if (var4 == null) {
  69.          this.sequenceTable.put(var3, new SequenceEntry(var1));
  70.       } else {
  71.          if (var4.sequenceNum >= var1) {
  72.             return;
  73.          }
  74.  
  75.          var4.update(var1);
  76.       }
  77.  
  78.       if (DGCImpl.logLevel >= 20) {
  79.          LogStream.log("dgc").println("Target.referenced: add to dirty set: " + var3);
  80.       }
  81.  
  82.       if (!this.refSet.contains(var3)) {
  83.          this.refSet.addElement(var3);
  84.          DGCImpl.getDGCImpl().registerTarget(var3, this);
  85.       }
  86.    }
  87.  
  88.    synchronized void unreferenced(long var1, VMID var3, boolean var4) {
  89.       SequenceEntry var5 = (SequenceEntry)this.sequenceTable.get(var3);
  90.       if (var5 != null && var5.sequenceNum <= var1) {
  91.          if (var4) {
  92.             var5.retain(var1);
  93.          } else if (!var5.keep) {
  94.             this.sequenceTable.remove(var3);
  95.          }
  96.  
  97.          if (DGCImpl.logLevel >= 20) {
  98.             LogStream.log("dgc").println("Target.unreferenced: remove from dirty set: " + var3);
  99.          }
  100.  
  101.          this.refSetRemove(var3);
  102.       }
  103.    }
  104.  
  105.    private synchronized void refSetRemove(VMID var1) {
  106.       DGCImpl.getDGCImpl().unregisterTarget(var1, this);
  107.       if (this.refSet.removeElement(var1) && this.refSet.isEmpty()) {
  108.          if (DGCImpl.logLevel >= 20) {
  109.             LogStream.log("dgc").println("Target.unreferenced: reference set is empty: target = " + this);
  110.          }
  111.  
  112.          this.unpinImpl();
  113.          Remote var2 = this.getImpl();
  114.          if (var2 instanceof Unreferenced) {
  115.             new UnreferencedObj((Unreferenced)var2);
  116.          }
  117.       }
  118.  
  119.    }
  120.  
  121.    boolean isEmpty() {
  122.       return this.refSet.isEmpty();
  123.    }
  124.  
  125.    public synchronized void vmidDead(VMID var1) {
  126.       if (DGCImpl.logLevel >= 10) {
  127.          LogStream.log("dgc").println("Target.notify: removing endpoint " + var1 + " from reference set");
  128.       }
  129.  
  130.       this.sequenceTable.remove(var1);
  131.       this.refSetRemove(var1);
  132.    }
  133. }
  134.