A Look at Jini Richard Chapman Sept. 30, 1999 Jini Motivation • Why must everyone be a sysadmin? • Why can’t computers scale like the phone system: added complexity without added configuration work? • Why can’t devices/services enter and leave the network without explicit reconfiguration? Jini Goals • Very robust software infrastructure • No configuration/administration required • Software must be evolvable • Devices can form spontaneous communities Jini History • Fulfillment of original Java goals of an environment for embedded systems (Oak, 1990) • The word “Jini” does not stand for anything • Went public too soon, NYT reporter John Markoff broke story in 1998 Jini is intended to be used by: • Information appliances (thin clients, set top boxes, PDA’s) • Desktop machines can benefit from a reduction in sysadmin duties • Enterprise systems (servers) also benefit Getting Jini • Source code distributed under Sun community source license (open source) • Need Java 2 • Requires web server, RMI activation daemon, lookup service • http://www.javasoft.com/products/jini/ Networked vs Distributed Systems • Move the data or move the code? • Conventional wisdom: since code has to be compiled and installed, move the data, and call a routine on the remote machine • Thus: make the remote function call look like a local function call as much as possible (RPC, CORBA, DCOM) The network cannot be ignored • Very high latency (orders of magnitude) • High variability in latency (has a component failed or is the link just very slow?) • New failure modes that do not exist on local machine (router down, nameserver crash, cable came loose) Handling Partial Failures • Partial Failures do not exist on local machines -- you know the state, for better or worse • Partial failures arise when some, but not all hosts, receive a message from a sender • May be difficult for sender to detect which hosts received message Handling Partial Failures, Cont’d. • Even if server can detect which hosts have not received a message, what does it do • Can’t keep trying forever -- you run out of disk drives storing old messages you are trying to send • Don’t want to give up and cut off the host that failed to get a message Why CORBA isn’t enough • Ignores network performance issues (makes remote call look like local call) • An add-on to existing languages (not all machines implement C++ the same way) • Example problems: endianness, size of int, float, char, etc. Peter Deutch’s Seven Network Fallacies • The network is reliable • Latency is zero • Bandwidth is infinite • The network is secure • Topology doesn’t matter • There is one administrator • Transport cost is zero Jini adopts the programming model of Java • One lanuage everywhere • Data in the same format everywhoere (objects represented by bytecodes) • Strongly typed interfaces • Separate interface and implementation • Plus: a distributed storage model based on Linda (Gelernter, Yale) Conventional wisdom is no longer valid. • Code can easily move from machine to machine • Servers can be dynamically updated • Systems can evolve by updating interfaces with new code as needed, no need for recompilation Strong typing is important • In Java, an RMI defines the interface, while in CORBA, an IDL description is a wrapper around the interface • Polymorphism works in RMI -- you can define subinterfaces; you can pass an ojbect of a subtype to remote server and the subtype methods are appropriately used (doesn’t work in CORBA). Jini is built on Java RMI • RMI = Remote Method Invocation Public interface RemoteServer extends Remote { public int getlength(String S) throws RemoteException; } Java RMI, cont’d • If you change the (Java) interface declaration in Java, you are really changing the way the interface works • If you change the Java interface declaration in a CORBA system, you just break the interface, since the Java interface is generated automatically from the IDL description Java RMI, cont’d • Thus from a software engineering point of view, the CORBA implementation is more complicated and error-prone • However, CORBA outperfromed RMI empirically (no longer true?) • For enterprise solutions, CORBA is essential -- we will always need glue to connect heterogeneous systems Strong typing, cont’d • “Remoteness” is inherently part of the interface, not an implementation detail • Every interface must extend java.rmi.remote • Permits a reasonable definition of equality for remote objects -- you care if the remote objects are the same, not the local stubs What Jini is not • Jini is not a name server: lookup service is similar, but does more than provide references to objects • Jini is not Java Beans: beans communication based on direct method invocation, not remote. Also, beans do not automatically become aware of each other as do Jini objects What Jini is not, cont’d • Jini is not Enterprise Java Beans: Enterprise Java Beans function across multiple address spaces well, but they put Java wrappers around legacy systems • Jini is not RMI: built on top of RMI • Jini is not a distributed OS Five Key Concepts of Jini • • • • • Discovery Lookup Leasing Remote Events Transactions Discovery • Services=Devices or Software • Services collect themselves into communities • The resources available to a community are kept track of by a lookup service • No one-to-one mapping between communities and lookup services • Discovery=finding available lookup services Discovery, cont’d • Several discovery protocols • Multicast finds nearby lookup services (on the same LAN) • Multicast Announcement declares that a new lookup service has started up • Unicast used to talk to a particular lookup service Lookup • Lookup server does more than nameserver • Nameserver provides pointers to objects when given names • Lookup server does that also, plus supports searching for services that meet certain criteria, e.g. those that have a particular Java type Lookup cont’d • Lookup returns a service item when queried successfully. • Service item contains proxy object (local stub for remote object) and attributes that describe the service Lookup, cont’d Service item Proxy attribute attribute Lookup service Service item Lookup, cont’d • Downloadable proxy provided with each service item • When any entity wants to use your service it downloads the proxy and runs it -- the proxy handles sending the remote server the necessary pieces • Proxy can be used as a secure, network-aware device driver Proxy scenarios • Proxy may perform the service by itself, without any remote method invocation • Proxy may be an RMI stub that knows how to talk to a remote service (e.g. IMAP mail server) • Proxy uses private communication protocol to talk to legacy (non-Java) systems. Using a Jini Service Lookup service Downloads proxy Service Client communicates with service via proxy Client “How does client x know to call method y?” • Objects must have some understanding of the services they are going to use • Industry will have to define a common set of standards for interfaces to things like cell phones, printers, scanners, digital cameras • My opinion: these interfaces will need updating, and may prove to be Jini’s undoing Leasing • Suppose a service provider dies at some point • How do you keep dead services from accumulating in the lookup servers over time • Solution: a service is only provided for a certain amount of time unless the provider re-registers it (renews the lease) Leasing, cont’d • No sysadmin needs to comb through the lookup service database to remove long-dead services • Cleans up partial failures • Similarly, resource is not granted to a consumer for indefinite period, but “leased” for a finite time Leasing, cont’d • Consumer must renew the lease if the resource continues to be needed • Unreliable code thus does not do permanent damage -- after a while the resource is freed automatically • No maintenance required of persistent storage Third party leasing • Jini leases can be negotiated by a third party • Example: long-lived but rarely active process such as monthly disk backup routine • Example: process that does not want to be bothered with extra code complexity of lease management Delegation • Similar to Java Beans delegation • Allows events to be handled by a third party rather than the actual object to which the event was sent Lease mechanics • Discovery returns an object that implements lookup interface (called ServiceRegistrar) • Server calls method register() of ServiceRegistrar with service item object as argument -- describes the service to be registered Lease mechanics, cont’d • Client calls ServiceRegistrar lookup() method to find if a service meeting its’ criteria is registered. • Service registrar returns a service item object, whose proxy is then used to access object • Lease is handled by an argument to register, which says how long (long int) the server plans to provide the service Lease mechanics, cont’d • Only one round of negotiation needed for a lease • Lease done in terms of duration, not absolute time • Leasing is not garbage collection Events • Used for asynchronous notification • Event is an object containing information about external state change the recipient may be interested in • Same as Java Foundation Classes and Java Beans model of events Remote Events • Remote events may not arrive in order sent • Remote events may not arrive at all • Remote events more expensive to send than local events • What does sender do if receiver has crashed -- keep trying? How long? Remote Events, cont’d • Example: want to print an image taken with a digital camera to a printer • Suppose digital camera is connected to network and there are no printers (want to “grey out” the print button on camera GUI) • When a printer is connected, the cameras should be notified Remote events, cont’d • RemoteEventListener() is a remote interface used by objects waiting for events • Method notify() invoked via RMI by objects that want to send events • Very simple: one class, one interface, one method. Contrast to Java Foundation Classes • Jini can implement generic 3rd party Remote Events, contd • Process interested in receving events leases that service just like any other • Hence if a service dies, it is not sent events forever, only until its lease expires Transactions • Used to handle partial failures -- gives a way of deducing state of the system after a partial failure • Used to guarantee data integrity( atomicity, consistency, isolation, durability) Two-phase commit • Transaction manager collects all constituent operations of a transaction • Participants go to pre-commit status (compute all results they would compute if transaction were successful, but do not make them permanent) • Send acknowledgement of successful transition to pre-commit status back to transaction manager Two-phase commit, cont’d • If any participant fails, transaction manager instructs all components to abort, else notifies all to commit • State of all components of system is predictable in the presence of failures Jini implementation of twophase commit • All participants implement TransactionParticipant interface. • Three methods: prepare(), commit() abort() • Jini transaction manager doesn’t care how the participants implement the methods, it just steps through the protocol.