DISCO SERVICE COMPONENT MANAGER

The class edu.nyu.cs.pdsg.disco.Disco is intended to provide a library-like static interface to common methods for discovering, deploying, and installing distributed service components using Trust, Switchboard, and PDSG's locality-aware discovery mechanism.

Disco.init() expects a String containing the path to a java.util.Properties-formatted file (like dRBAC; the same file can be passed to both Disco and dRBAC). The Properties file should include the keys_file property and a disco_host_name so that a given Disco installation can retrieve its KeyPair from the KeyDirectory.

Disco.publish(), Disco.advertise() and Disco.find() all implement trampoline calls to functions of edu.nyu.cs.pdsg.discovery.*

Disco.install() follows an set protocol to download and start a service component that implements java.lang.Runnable and java.io.Serializable. It expects to make a SwitchboardRPC connection on behalf of the requestor (taking the requestor's Credentials, KeyPair, and Authorizer) to a bound service implementing edu.nyu.cs.pdsg.disco.Provider. It calls Provider.getService() on the remote service provider, casts the result to a Runnable and starts it. It then returns to the caller the SbRpcStack reference to the Switchboard connection. Further development efforts should include a version that downloads the component and returns it to the caller without starting it, allowing the caller to set run parameters, etc. Code also exists in the Disco class so that it will instantiate and serve over Switchboard a DiscoListener that can be used by a remote deployment manager to tell Disco to download and install components. This code is currently undergoing refinement.


Nodes can utilize the Activator class to allow those with appropriate permissions and delegations to notify an Activator node to connect to, execute, and run a component on a host. Activator nodes can be started through the use of the CreateActivator class. Services that will be downloaded by activators should implement Runnable. Nodes that access Activator nodes will receive, through SwitchboardRPC, an ActivatorInterface. To activate a service on an Activator node, create an Activatable object from the service to be sent, and then call the activate method from the ActivatorInterface. This will load the service on the Activator node.