org.erights.e.elib.serial
Class RemoteDelivery

java.lang.Object
  |
  +--org.erights.e.elib.ref.Ref
        |
        +--org.erights.e.elib.ref.StemCell
              |
              +--org.erights.e.elib.serial.RemoteDelivery
All Implemented Interfaces:
Amplifiable, Callable, Marker, ObjectInputValidation, PassByConstruction, Persistent, Serializable

public class RemoteDelivery
extends StemCell

Safe: A RemoteDelivery unserializes into the result of


     recipient <- verb(args...)
 
allowing arbitrary execution *after* deserialization, but only within capability constraints. All pointers serialized as pointers to the RemoteDelivery will be deserialized as pointing to the promise for the result of the send. This may violate static types or other constraints, and cause deserialization to fail.

Author:
Mark S. Miller
See Also:
Serialized Form

Field Summary
private  Object[] myArgs
           
private  Object myRecipient
           
private  String myVerb
           
private static long serialVersionUID
           
 
Fields inherited from class org.erights.e.elib.ref.StemCell
myOptResolver
 
Fields inherited from class org.erights.e.elib.ref.Ref
BROKEN, EVENTUAL, NEAR
 
Fields inherited from interface org.erights.e.elib.serial.PassByConstruction
HONORARY, HONORED_NAMES
 
Fields inherited from interface org.erights.e.elib.serial.Persistent
HONORARY, HONORED_NAMES
 
Constructor Summary
RemoteDelivery(Object recipient, String verb, Object[] args)
          Enabled: Descibe an invocation to be run on the other side of a serialization barrier of some sort.
 
Method Summary
 void __printOn(TextWriter out)
          Suppressed:
private  Object readResolve()
          Invoked directly by the ObjectInputStream following desrialization of the entire RemoteDelivery to get the object to use instead.
 
Methods inherited from class org.erights.e.elib.ref.StemCell
callAll, isResolved, optProblem, sendAll, sendAllOnly, state, validateObject
 
Methods inherited from class org.erights.e.elib.ref.Ref
broken, disconnected, getAllegedType, getOptProxyHandler, GetRefMaker, ignore, isBroken, isDeepFrozen, isDeepPassByCopy, isEventual, isFar, isNear, isPassByProxy, isPBC, isPersistent, isResolved, isSameEver, isSelfish, isSelfless, isSettled, makeBufferingPromise, makeSwitchablePromise, optBroken, optProblem, optSealedDispatch, optSealedDispatch, optShorten, promise, resolution, resolution, respondsTo, sendMsg, state, toCallable, toRef, toString, whenBroken, whenBrokenOnly, whenResolved, whenResolvedOnly
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

serialVersionUID

private static final long serialVersionUID

myRecipient

private final Object myRecipient

myVerb

private final String myVerb

myArgs

private final Object[] myArgs
Constructor Detail

RemoteDelivery

public RemoteDelivery(Object recipient,
                      String verb,
                      Object[] args)
Enabled: Descibe an invocation to be run on the other side of a serialization barrier of some sort.

Parameters:
recipient - receives the message
verb - the message name (selector, method name)
args - the message arguments
Method Detail

readResolve

private Object readResolve()
                    throws ObjectStreamException
Invoked directly by the ObjectInputStream following desrialization of the entire RemoteDelivery to get the object to use instead.

ObjectStreamException

__printOn

public void __printOn(TextWriter out)
               throws IOException
Suppressed:

IOException


comments?