560 likes | 664 Views
JavaSpaces. Prabhaker Mateti Wright State University. Ack. Ken Arnold Jan Newmarch Susanne Hupfer And many other sources on the Web. public interface JavaSpace.
E N D
JavaSpaces Prabhaker Mateti Wright State University
Ack • Ken Arnold • Jan Newmarch • Susanne Hupfer • And many other sources on the Web Mateti on "JavaSpace"
public interface JavaSpace public interface JavaSpace {Lease write(Entry entry, Transaction txn, long lease);Entry read(Entry tmpl, Transaction txn, long timeout);Entry readIfExists(Entry tmpl, Transaction txn, long timeout);Entry take(Entry tmpl, Transaction txn, long timeout);Entry takeIfExists(Entry tmpl, Transaction txn, long timeout);EventRegistration notify(Entry tmpl, Transaction txn, RemoteEventListener ln, long lease, MarshalledObject handback);Entry snapshot(Entry e) } // throws clauses not shown Mateti on "JavaSpace"
MP3Request implements Entry public class MP3Request implements Entry { public String channelName; // recipient of the request public Integer position; // position # of request in channel public String inputName; // file path public byte[] data; // content of the file public String from; // who sent the request public MP3Request() {} public MP3Request(String channelName) { this.channelName = channelName; } public MP3Request (String channelName, Integer position) { this.channelName = channelName; this.position = position; } public MP3Request(String channelName, Integer position, String inputName, byte[] data, String from) { this.channelName = channelName; this.position = position; this.inputName = inputName; this.data = data; this.from = from; } } Mateti on "JavaSpace"
From Jini … import net.jini.transaction.*; import net jini.event.*; import net.jini.lease.*; Mateti on "JavaSpace"
JavaSpaces Technology basis • Built on core JDK facilities • RMI • Object serialization • Part of Sun’s Jini package • Leasing • Transaction • Distributed events Mateti on "JavaSpace"
Jini … services … JavaSpace Other Lookup Service Discovery/Join Java RMI Mateti on "JavaSpace"
JavaSpace v. Linda • write: put an entry in the space (out) • read: return a matching entry from the space (rd) • take: remove a matching entry from the space (in) • notify: send event when a matching entry is written (?) • JavaSpace has No Linda eval() Mateti on "JavaSpace"
JavaSpaces architecture • Entry/Template • Serialization • JavaSpace Scenario • JavaSpaces/JavaSpace server • JavaSpace Interface Mateti on "JavaSpace"
JavaSpace Service • A simple service for distributed computing • A shared object repository • Persistent • Template-matching lookup • Transactions (multi-space) • Stores entries (tuples of objects) • Distributed (RMI-based) • Concurrent • What a JavaSpace service isn't • A relational database • An object oriented database Mateti on "JavaSpace"
Why Use a JavaSpace? • Cooperative, loosely-coupled systems scale well Mateti on "JavaSpace"
JavaSpaces Suitability • JVM • All users should link to a JVM • use Java RMI • Transport among JVMs via JINI • Interoperability • interoperable with other language • via RMI/IIOP and CORBA Mateti on "JavaSpace"
JavaSapces Concepts: A mechanism for distributed computing • dynamic sharing, communication and coordination of Java Objects • Loosely coupled, cooperative marketplace model • producer store objects in the space • consumer lookup and take objects from the space • 100% pure Java language based Mateti on "JavaSpace"
JavaSapces Concepts: A networked repository for Java Objects • Store Entries (Serialized Java objects) • Both data and behaviors • Lookup entries by using Templates • Type matching (same class?) • Value matching: lookup and compare the specific fields Mateti on "JavaSpace"
Service Provider • Implements the objects that provide a service • Finds the lookup services • Registers the service object with lookup services • Service object gets downloaded to clients • A typical service object is a proxy Mateti on "JavaSpace"
A Service Provider Example public class AServer implements DiscoveryListener { protected LeaseRenewalManager lm = new LeaseRenewalManager(); public static void main(String argv[]) { new AServer(); Thread.currentThread().sleep(Lease.FOREVER); } public AServer() { LookupDiscovery di = new LookupDiscovery(LookupDiscovery.ALL_GROUPS); di.addDiscoveryListener(this); } public void discovered(DiscoveryEvent evt) { ServiceRegistrar rg = evt.getRegistrars()[0]; ServiceItem item = new ServiceItem(null, new AServerImpl(), null); ServiceRegistration sr = rg.register(item, Lease.FOREVER); lm.renewUntil(sr.getLease(), Lease.FOREVER, this); } } Mateti on "JavaSpace"
Lookup Services • Listening on port 4160 • Unicast TCP; Multicast UDP • Sends a registrar object to requestor • Registering == storing a copy of the service object in the lookup service • 4160 == 0xCAFE – 0xBABE Mateti on "JavaSpace"
Entry Class • Implements interface: public interface Entry extends java.io.serializable { } • All fields must be public • Fields must be objects, not builtins (no int, etc.) • Must have a public null-arg constructor Mateti on "JavaSpace"
An Example Entry class User implements Entry { public String login; public String homeHost; public String fullName; public Long lastLogin; // ... } Mateti on "JavaSpace"
Entry Methods • write -- put a copy of entry into the space • read, readIfExists -- return a matching entry from the space • take, takeIfExists -- remove the matching entry from the space • notify -- send an event when the matching entry is written • snapshot -- return another entry object that contains the snapshot of the original one Mateti on "JavaSpace"
Lease write (Entry e, Transaction t, long lease) • Write a copy of e into Space • returns a Lease object • limited persistence with time-outs • exceptions Mateti on "JavaSpace"
Entry snapshot (Entry e) • Returns an Entry object with a copy of the original unmodified object • Modification on the original entry will not affect snapshot • Works only within the same JavaSpaces Server where it is generated Mateti on "JavaSpace"
Template • Entry object • Some/all fields set to specific values • Null fields act as wildcards • Exact value match of each non-null field Mateti on "JavaSpace"
Template • Type matching and subtype matching • Only public fields are considered for matching • Fields should refer to serializable objects • Fields must have properties Mateti on "JavaSpace"
Entry Matching • Matching requires a template • The service is searched for one entry that... Is at least the template's type Has all values matching Mateti on "JavaSpace"
Templates match entries iff … each field in template is • either null or • match the entry field via MarshalledObject.equals. • That is, the serialized forms of the objects match exactly. Mateti on "JavaSpace"
public Entry read (Entry e, Transaction t,long timeout) • A copy of the matching entry is returned. • read vs. readIfExists: read will wait until a match is found or until transaction settles, up to time out period • Null returned, if nothing matches Mateti on "JavaSpace"
Entry take(Entry tmpl, Transaction t, long timeout) • Matching object is removed from space • RemoteException: Entry may or may not be removed successfully • Other Exceptions mean failure • Subtype matching: returns may be more than anticipated Mateti on "JavaSpace"
Serialization • Entries are not stored in JavaSpaces • Serialized form of the class and fields • java.rmi.MarshalledObject • MashalledObject.equals() • Field in template has null value as wildcard • set fields/un-set fields • Object graph map reference Mateti on "JavaSpace"
notify EventRegistration notify(Entry tmplt, Transaction t, RemoteEventListener l, long lease, MarshalledObject handback) RemoteEvent • RemoteEventListener • EventRegistraion{ evID fromWhom seqNo } • retry to notify listeners Mateti on "JavaSpace"
JaveSpaces Scenario Transaction Distributed Event JavaSpaces Leasing Entry RMI Mateti on "JavaSpace"
Leasing • Used in distributed environments to solve partial failure of resources and services • Resources are leased and freed when the time of the lease expires • Get rid off debris easily • Negotiation among related parties • Lease can be renewed or canceled Mateti on "JavaSpace"
Lease “ a time period during which the grantor of the lease insures that the holder of the lease will have access to its resources.” Typical Grantor: lookup service Typical Grantee: component Mateti on "JavaSpace"
package net.jini.core; public interface Lease {void cancel() throws UnknownLeaseException,java.rmi.RemoteException; long getExpiration(); void renew(long duration) throws LeaseDeniedException, UnknownLeaseException, java.rmi.RemoteException; } Mateti on "JavaSpace"
ACID properties of transactions • Atomicity • All the operations of a transaction must take place, or none of them do • Consistency • The completion of a transaction must leave the participants in a ``consistent'' state. • Isolation • The activities of one transaction must not affect any other transactions • Durability • The results of a transaction must be persistent Mateti on "JavaSpace"
Two-phase commit protocol • Participants tentatively carry out the operations. • All participants then vote. • If all agree, the transaction commits. • If any disagree, transaction aborts in all. Mateti on "JavaSpace"
Jini Transaction • Two phase commit model • Transaction ID supplied by the manager • Based on RMI for communication • Dependent on Leasing • Mahalo transaction manager is part of Jini Mateti on "JavaSpace"
Distributed Event • Events in multi-address spaces • Desired delay • Network failure/Delay • Third-party agents perform notification • Non-Java third-party agents Mateti on "JavaSpace"
Multiple JavaSpaces • Multiple JavaSpaces cooperate, and transactions span multiple spaces. • Partitions provide minimal protection. Mateti on "JavaSpace"
Scale It Up Mateti on "JavaSpace"
JavaSpaces is not a database • All entries are copies of original objects • No general query language • No way to return sets of objects • Not a transparent persistence mechanism (can not modify data) • Understand entry by type and serialized fields Mateti on "JavaSpace"
Applications (Model) Identities read JavaSpaces server Client write Security Check writeEvent Client write notify Event Catcher Transaction proxy take notify write JavaSpaces server notify JavaSpaces server Mateti on "JavaSpace"
Live feed applet buyer bid entry read Write JavaSpaces Server graphic applet Write entry seller Notify An application scenario: Stock trading system • Entry fields: • securities, owners price offers, quantities, ... • GUI: • applets • Many sellers and buyers can be involved • concurrent accesses are handled by the space Mateti on "JavaSpace"
Applications • Workflow systems • Customer management systems • Supply chain management • Auction systems • Trading service • Agent systems • Publish and subscribe service • …... Mateti on "JavaSpace"
JavaSpaces Server • Not a remote interface • invocations of methods of JavaSpace throw RemoteException • JavaSpaces server exports objects implementing javaspace interface to clients Mateti on "JavaSpace"
JavaSpace Server Client JavaSpace Server Server Interface JavaSpace JavaSpace Client Mateti on "JavaSpace"
Entry implementation Example import net.jini.space.Entry public class MyEntry implements Entry { public String name; public GIFImage value; public MyEntry(){ } } Mateti on "JavaSpace"
Sample implementation • Requirements • Entry implementation • Sample invocation Mateti on "JavaSpace"