Facets, binding and services

As we know, netlets provide services. In programming terms, a consumer is given a service interface by a netlet. See Figure [*](c) which is a refinement of Figure [*].

Figure: A refinement of Figure [*]. As we've seen, (a) a consumer netlet binds to a ``generally available'' service which (b) is really accessed via another netlet. But really (c) the consumer gets an interface representing the service. Following this (d) the consumer netlet binds to facets which allow use of the service's features.
 

\resizebox*{0.9\textwidth}{!}{\includegraphics{images/binding-detail-a-b-c-d-colour.eps}}

A facet is an interface to use a feature of a service.

A service can be quite complex and may need serveral facets. For example, a service may offer two facets: one facet for general use and one for usage accounting. A storage service may offer one facet for file read/writes and one for transactions. Our hello world service offers one facet, through which the message is obtained.

Just like services, a facet needs to be bound. A netlet cannot get a hold of a facet without binding to it, but once bound it can use it just like any other object.

So the general procedure for a netlet to grasp a facet is: (1) bind to a service; (2) get its list of facets; (3) bind to one of them. Step (1) is achieved just by presenting a warrant to a node, and if the netlet already knows the name of facet it wants then it can skip step (2), so the the procedure is really (1) bind to service; (2) bind to facet.

Figure [*](d) is a refinement of Figure [*](c). It shows how netlets provide services which provide facets.

Nik Silver 2002-03-09