Presentation is loading. Please wait.

Presentation is loading. Please wait.

Mini project - 2001/2 Jini - a new computing paradigm.

Similar presentations


Presentation on theme: "Mini project - 2001/2 Jini - a new computing paradigm."— Presentation transcript:

1

2 Mini project - 2001/2 Jini - a new computing paradigm

3 Our first jini steps … basic topics: 1.RMI overview. 2.a first jini application: “ hello world ”. rmi

4 RMI-remote method invocation provides a way for Java applications running on different JVM ’ s/host computers to “ talk ” to each other.

5 basic ideas/concepts: 1.remote interface. 2.stubs and skeletons - rmic. client server Remote interface Remote impl stubskeleton

6 3.serialization. 4.parameters and return values. 5.dynamic code loading. 6.security implications. 7.marshaled objects. 8.the activation framework - rmid.

7 Jini basics

8 3 main components 1.service 2.client 3.jini environment - rmi,web server, lookup service...

9 service Device that shares its capabilities with other devices Devices Requirement –Memory & CPU –Connection to Network E.g. TV, Microwave,Printer,PC,Software

10 client A device that uses services Requirement –Memory & CPU –Connection to Network E.g. PDA, WAP Phone, PC, Coke Machine

11 The Jini environment Service Consumer Service Provider Jini Lookup Service

12 How does it works? 1.create the jini environment-lookup server online. 2.services discover,join and register on lookup servers. 3.clients discover and finds matching and downloading services, then using them.

13 Our first jini application - hello world! 1.compiling & running the jini env. 2.compiling & running a)server. b)client.

14 Creating The jini environment: 1.run a http server (jini provides a simple but efficient one) 2.run a rmi daemon (exists on Java 2) 3.run a lookup server (supplied with the reggie.jar files in jini)

15 Running the environment command lines: http server: java -jar java archive /usr/local/Java/jini1_1/lib/tools.jar jini’s http -port 8087 -dir /usr/local/Java/jini1_1/lib the server’s root directory -verbose& Rmi daemon: rmid -J-Dsun.rmi.activation.execPolicy=none -port 1100 -log /tmp/rmid_log& rmi log directory-recvering...

16 Running the environment command lines: Lookup server: java -Djava.security.policy=/usr/local/Java/jini1_1 /example/lookup/policy.all policy -jar /usr/local/Java/jini1_1/lib/reggie.jar lookup service http://silver.cs.bgu.ac.il:8087/reggie-dl.jar codebase /usr/local/Java/jini1_1/example/lookup/policy.all /tmp/reggie_log1 public& policy

17 Compiling the server and client programs: Compile the server class: javac -classpath /usr/local/Java/jini1_1/lib/jini- core.jar:/usr/local/Java/jini1_1/lib/jini- ext.jar:/usr/local/Java/jini1_1/lib/sun- util.jar:/users/studs/bsc/2000/liyboviz/files/service -d /users/studs/bsc/2000/liyboviz/files/service /users/studs/bsc/2000/liyboviz/files/corejini/chapter5/HelloWorldS erviceInterface.java /users/studs/bsc/2000/liyboviz/files/corejini/chapter5/HelloWorldS ervice.java Compile the client class: javac -classpath /usr/local/Java/jini1_1/lib/jini- core.jar:/usr/local/Java/jini1_1/lib/jini- ext.jar:/usr/local/Java/jini1_1/lib/sun-util.jar: -d /users/studs/bsc/2000/liyboviz/files/client /users/studs/bsc/2000/liyboviz/files//corejini/chapter5/HelloWorld ServiceInterface.java /users/studs/bsc/2000/liyboviz/files/corejini/chapter5/HelloWorldC lient.java

18 Running - first the server, then the client: Server http: java -jar /usr/local/Java/jini1_1/lib/tools.jar -port 8085 -dir /users/studs/bsc/2000/liyboviz/files/service-dl -verbose& The Service: java -cp /usr/local/Java/jini1_1/lib/jini- core.jar:/usr/local/Java/jini1_1/lib/jini- ext.jar:/usr/local/Java/jini1_1/lib/sun- util.jar:/users/studs/bsc/2000/liyboviz/files/service -Djava.rmi.server.codebase=http://silver.cs.bgu.ac.il:8085/ -Djava.security.policy=/usr/local/Java/jini1_1/example/lookup /policy.all corejini.chapter5.HelloWorldService&

19 Running – then, the client: The Client: java -cp /usr/local/Java/jini1_1/lib/jini-core.jar: /usr/local/Java/jini1_1/lib/jini-ext.jar: /usr/local/Java/jini1_1/lib/sun-util.jar: /users/studs/bsc/2000/liyboviz/files/client -Djava.security.policy=/usr/local/Java/jini1_1/example/lookup /policy.all corejini.chapter5.HelloWorldClient&

20 Screen output From the service: >discovered a lookup service! >set serviceID to e91bb-53434-ty7554 From the client: >Got matching service. >Its message is: Hello, world!

21 What ’ s behind the screen?

22 The client/server known interface: // This is the interface that the service's proxy // implements package corejini.chapter5; public interface HelloWorldServiceInterface { public String getMessage(); }

23 The server ’ s code: // This is the first iteration of a Hello, World // service--it publishes a proxy that returns // a string when asked by clients. package corejini.chapter5; import net.jini.discovery.DiscoveryListener; import net.jini.discovery.DiscoveryEvent; import net.jini.discovery.LookupDiscovery; import net.jini.core.lookup.ServiceItem; import net.jini.core.lookup.ServiceRegistrar; import net.jini.core.lookup.ServiceRegistration; import java.util.Hashtable; import java.io.IOException; import java.io.Serializable; import java.rmi.RemoteException; import java.rmi.RMISecurityManager;

24 // This is the proxy object that will be downloaded // by clients. It's serializable and implements // our well-known HelloWorldServiceInterface. class HelloWorldServiceProxy implements Serializable, HelloWorldServiceInterface { public HelloWorldServiceProxy() { } public String getMessage() { return "Hello, world!"; }

25 // HelloWorldService is the "wrapper" class that // handles publishing the service item. public class HelloWorldService implements Runnable { // 10 minute leases protected final int LEASE_TIME = 10 * 60 * 1000; protected Hashtable registrations = new Hashtable(); protected ServiceItem item; protected LookupDiscovery disco; // Inner class to listen for discovery events class Listener implements DiscoveryListener { // Called when we find a new lookup service. public void discovered(DiscoveryEvent ev) { System.out.println("discovered a lookup service!"); ServiceRegistrar[] newregs = ev.getRegistrars(); for (int i=0 ; i<newregs.length ; i++) { if (!registrations.containsKey(newregs[i])) { registerWithLookup(newregs[i]); }}}

26 // Called ONLY when we explicitly discard a // lookup service, not "automatically" when a // lookup service goes down. Once discovered, // there is NO ongoing communication with a // lookup service. public void discarded(DiscoveryEvent ev) { ServiceRegistrar[] deadregs = ev.getRegistrars(); for (int i=0 ; i<deadregs.length ; i++) { registrations.remove(deadregs[i]);}}} public HelloWorldService() throws IOException { item = new ServiceItem(null, createProxy(), null); // Set a security manager if (System.getSecurityManager() == null) { System.setSecurityManager(new RMISecurityManager());} // Search for the "public" group, which by // convention is named by the empty string disco = new LookupDiscovery(new String[] { "" }); // Install a listener. disco.addDiscoveryListener(new Listener()); }

27 protected HelloWorldServiceInterface createProxy() { return new HelloWorldServiceProxy();} // This work involves remote calls, and may take a while to complete //Thus, since it's called from discovered(), it will prevent us // from responding in a timely fashion to new discovery events. An // improvement would be to spin off a separate short- // lived thread to do the work. protected synchronized void registerWithLookup(ServiceRegistrar registrar) { ServiceRegistration registration = null; try { registration = registrar.register(item, LEASE_TIME); } catch (RemoteException ex) { System.out.println("Couldn't register: " + ex.getMessage()); return;} if (item.serviceID == null) { item.serviceID = registration.getServiceID(); System.out.println("Set serviceID to " + item.serviceID);} registrations.put(registrar, registration); }

28 // This thread does nothing but sleep, but it // makes sure the VM doesn't exit. public void run() { while (true) { try { Thread.sleep(1000000); } catch (InterruptedException ex) { }}} // Create a new HelloWorldService and start // its thread. public static void main(String args[]) { try { HelloWorldService hws = new HelloWorldService(); new Thread(hws).start(); } catch (IOException ex) { System.out.println("Couldn't create service: " + ex.getMessage());}}}

29 The client ’ s code: // A simple Client to exercise the HelloWorldService package corejini.chapter5; import net.jini.discovery.DiscoveryListener; import net.jini.discovery.DiscoveryEvent; import net.jini.discovery.LookupDiscovery; import net.jini.core.lookup.ServiceRegistrar; import net.jini.core.lookup.ServiceTemplate; import java.util.Vector; import java.io.IOException; import java.rmi.RemoteException; import java.rmi.RMISecurityManager;

30 public class HelloWorldClient implements Runnable { protected ServiceTemplate template; protected LookupDiscovery disco; // An inner class to implement DiscoveryListener class Listener implements DiscoveryListener { public void discovered(DiscoveryEvent ev) { ServiceRegistrar[] newregs = ev.getRegistrars(); for (int i=0 ; i<newregs.length ; i++) { lookForService(newregs[i]); } public void discarded(DiscoveryEvent ev) { }

31 public HelloWorldClient() throws IOException { Class[] types = { HelloWorldServiceInterface.class }; template = new ServiceTemplate(null, types, null); // Set a security manager if (System.getSecurityManager() == null) { System.setSecurityManager(new RMISecurityManager()); } // Only search the public group disco = new LookupDiscovery(new String[] { "" }); // Install a listener disco.addDiscoveryListener(new Listener()); }

32 // Once we've found a new lookup service, search // for proxies that implement // HelloWorldServiceInterface protected Object lookForService(ServiceRegistrar lusvc) { Object o = null; try { o = lusvc.lookup(template); } catch (RemoteException ex) { System.err.println("Error doing lookup: " + ex.getMessage()); return null;} if (o == null) { System.err.println("No matching service."); return null; } System.out.println("Got a matching service."); System.out.println("It's message is: " + ((HelloWorldServiceInterface) o).getMessage()); return o;}

33 // This thread does nothing--it simply keeps the // VM from exiting while we do discovery. public void run() { while (true) { try { Thread.sleep(1000000); } catch (InterruptedException ex) { }}} // Create a HelloWorldClient and start its thread public static void main(String args[]) { try { HelloWorldClient hwc = new HelloWorldClient(); new Thread(hwc).start(); } catch (IOException ex) { System.out.println("Couldn't create client: " + ex.getMessage()); }}}

34 A policy file example grant { // Allow everything for now permission java.security.AllPermission; };

35 The End To be continued...


Download ppt "Mini project - 2001/2 Jini - a new computing paradigm."

Similar presentations


Ads by Google