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

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

Embed Size (px)

Citation preview

Page 1: Mini project - 2001/2 Jini - a new computing paradigm

Mini project - 2001/2

Jini - a new computing paradigm

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

Our first jini steps…basic topics:

1.RMI overview.

2.a first jini application: “hello world”.

rmirmi rmi

Page 3: Mini project - 2001/2 Jini - a new computing paradigm

RMI-remote method invocation

provides a way for Java applications

running on different JVM’s/host computers to “talk” to each other.

Page 4: Mini project - 2001/2 Jini - a new computing paradigm

basic ideas/concepts:

1.remote interface.

2.stubs and skeletons - rmic.

client server

Remote interface

Remote impl

stub skeleton

Page 5: Mini project - 2001/2 Jini - a new computing paradigm

3.serialization.

4.parameters and return values.

5.dynamic code loading.

6.security implications.

7.marshaled objects.

8.the activation framework - rmid.

Page 6: Mini project - 2001/2 Jini - a new computing paradigm

Jini basics

Page 7: Mini project - 2001/2 Jini - a new computing paradigm

3 main components

1.service

2.client

3.jini environment - rmi,web

server, lookup service...

Page 8: Mini project - 2001/2 Jini - a new computing paradigm

service• Device that shares its capabilities with other

devices

• Devices Requirement– Memory & CPU– Connection to Network

• E.g. TV, Microwave,Printer,PC,Software

Page 9: Mini project - 2001/2 Jini - a new computing paradigm

client• A device that uses services• Requirement

– Memory & CPU– Connection to Network

• E.g. PDA, WAP Phone, PC, Coke Machine

Page 10: Mini project - 2001/2 Jini - a new computing paradigm

The Jini environment

ServiceConsumer

ServiceProvider

Jini LookupService

Page 11: Mini project - 2001/2 Jini - a new computing paradigm

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.

Page 12: Mini project - 2001/2 Jini - a new computing paradigm

Our first jini application - hello world!

1.compiling & running the jini env.

2.compiling & running

a)server. b)client.

Page 13: Mini project - 2001/2 Jini - a new computing paradigm

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)

Page 14: Mini project - 2001/2 Jini - a new computing paradigm

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...

Page 15: Mini project - 2001/2 Jini - a new computing paradigm

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

Page 16: Mini project - 2001/2 Jini - a new computing paradigm

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/HelloWorldServiceInterface.java /users/studs/bsc/2000/liyboviz/files/corejini/chapter5/HelloWorldService.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/HelloWorldServiceInterface.java /users/studs/bsc/2000/liyboviz/files/corejini/chapter5/HelloWorldClient.java

Page 17: Mini project - 2001/2 Jini - a new computing paradigm

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&

Page 18: Mini project - 2001/2 Jini - a new computing paradigm

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&

Page 19: Mini project - 2001/2 Jini - a new computing paradigm

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!

Page 20: Mini project - 2001/2 Jini - a new computing paradigm

What’s behind the screen?

Page 21: Mini project - 2001/2 Jini - a new computing paradigm

The client/server known interface:// This is the interface that the service's proxy

// implements

package corejini.chapter5;

public interface HelloWorldServiceInterface {

public String getMessage();

}

Page 22: Mini project - 2001/2 Jini - a new computing paradigm

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;

Page 23: Mini project - 2001/2 Jini - a new computing paradigm

// 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!";

}

}

Page 24: Mini project - 2001/2 Jini - a new computing paradigm

// 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]);

}}}

Page 25: Mini project - 2001/2 Jini - a new computing paradigm

// 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()); }

Page 26: Mini project - 2001/2 Jini - a new computing paradigm

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); }

Page 27: Mini project - 2001/2 Jini - a new computing paradigm

// 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());}}}

Page 28: Mini project - 2001/2 Jini - a new computing paradigm

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;

Page 29: Mini project - 2001/2 Jini - a new computing paradigm

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) {

}

}

Page 30: Mini project - 2001/2 Jini - a new computing paradigm

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());

}

Page 31: Mini project - 2001/2 Jini - a new computing paradigm

// 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;}

Page 32: Mini project - 2001/2 Jini - a new computing paradigm

// 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());

}}}

Page 33: Mini project - 2001/2 Jini - a new computing paradigm

A policy file examplegrant {

// Allow everything for now

permission java.security.AllPermission;

};

Page 34: Mini project - 2001/2 Jini - a new computing paradigm

The

EndTo be continued...