The Jini Technology Lookup Service
How Does It Work Services and clients find a lookup service using the discovery protocol Services advertise themselves by registering with the lookup service Clients query the lookup service to find the services they need Peer-to peer communication between client and service after that
Discovery/Join and Lookup Protocols Figure 1 Discovery
Discovery/Join and Lookup Protocols Figure 2 Join
Discovery/Join and Lookup Protocols Figure 3 Lookup
Discovery/Join and Lookup Protocols Figure 4 Service Invocation
Discovery and Join How does a client or service find lookup services How does a service join a lookup service How does a client know which ones to do lookups in
Initial Discovery Performed by both clients and services Send multicast request packet Groups you are looking for Host and TCP port to use contact you Waiting for lookup services to connect back Download lookup services proxy object Register with or do lookup in
Lookup Service Network service For finding other network services Workgroup-scale, not the entire Internet Not a naming or directory service Focus is on types, not names Yellow pages, not white pages Both programmatic and end-user access
Lookup Service 101 Each service registers its proxy object Client does lookup by interface type Instance of semantics API uses java.lang.Class instances, not strings Client gets proxy object back Needed classes are automatically downloaded Proxy communicates with remote service
Service Type Matching Can match on any type Interface or concrete class Including super interface or superclass Can get subinterface or subclass back Java.lang.Object match everything Can match using multiple types
Service Type Matching I want a combination TV/VCR org.Ce.TV AND org.Ce.VCR Yellow pages Automatic placement in all categories Base class and all interfaces All superclasses and superinterfaces
Attributes Service can also register with attributes Attributes allow further discrimination between services of the same type Lookup support matching on Just service types Just attributes Combinations
Example Generic Attributes Name Location Manufacturer Model
Example Printer Attributes (1) Monochrome or color Resolution Speed Paper size
Attribute Characteristics Some are defined by service itself e.g., manufacturer, model, resolution Some are defined by administrator e.g., Name, location Attributes can have multiple values
Example Printer Attributes (2) Printer supports these combinations Monochrome, 600 dpi, 10 ppm Monochrome, 300 dpi, 15 ppm Color, 300 dpi, 5 ppm For each combination, printer supports Letter Legal Envelope
Attribute Representation Each attribute is a public field of a class Attribute name = field name Attribute type = field type Each class defines an attribute set Co-dependent attributes in the same class Orthogonal attributes in different classes Each service has set of attribute sets Instances of multiple classes Multiple instances of the same class
Example Printer Attribute (3) PrintEngine{color: false, dpi: 600, ppm: 10} PrintEngine{color: false, dpi: 300, ppm: 15} PrintEngine{color: false, dpi: 300, ppm: 5} PaperSize{size: PaperType.Letter} PaperSize{size: PaperType.Legal} PaperSize{size: PaperType.Envelope} Location{floor: 3, room: 1234, building: A1} Name{name: rainbow}
Attribute Set Matching Match on attribute set class Including superclasses Match on attribute values (fields) Exact value match only java.rmi.MarshalledObject.equals Template is just an attribute set instance Null field = match any value (wildcard)
Matching Examples template PrintEngine{color: false, dpi: null, ppm: null} matches PrintEngine{color: false, dpi: 600, ppm: 10} and PrintEngine{color: false, dpi: 300, ppm: 15}
Matching Examples template PrintAttrs{} matches PrintEngine{color: true, dpi: 300, ppm: 5} and PageSize{size: Legal}
Service Registration Service registers by providing: Service id Every service has a universally unique id Lookup service will assign one if requested Proxy object Zero or more attribute sets
Service Registration public class ServiceItem implements java.io.Serializable { public ServiceID serviceID; public Object service; public Entry [ ] attributeSets; … }
Service Template Service template contains: Optional service id Null is wildcard = match any Zero or more service types Zero or more attribute set templates Null fields are wildcards = match any
Service Template public class ServiceTemplate implements java.io.Serializable { public ServiceID serviceID; public Class [ ] serviceTypes; public Entry [ ] attributeSetTemplates; … }
Template Matching Service registration matches template if: Service id matches, and Proxy is instance of each service type, and For each attribute set template: Service has a matching attribute set
Example Queries Any service named rainbow Any Printer named rainbow in A1 Any color envelope Printer All services on floor 3
Complex Queries Between 300 and 600 dpi On floor 1, 3, or 7 Letter or Legal Printer or Copier
Complex Queries Technique 1 Change ranges and ors to wildcards Do single template-based lookup Then do finer-grained match locally Technique 2 Query for actual values in ranges and ors Do multiple lookups
Attribute Modification Can only be done by service itself Allows service to control policy Internal state changes Administrative interfaces Service is responsible for persistent storage Add, modify, delete, replace all Attributes should change infrequently Primary search keys Query service directly for very dynamic state
Lookup Groups Each lookup service is configured with s set of group names Is in (is a member of) each group Each service is configured with a set of group names Registers with all lookup services in any of those groups Each client is configured with a set of group names Uses lookup service in any of those groups
Summary Service perspective Register with desired attributes Keep renewing registration lease Add, modify, delete attributes as desired Client perspective Lookup any 1 of Get just proxy object Lookup to N of Get proxies attributes, and service IDS