IKH331-07-java-rmi

21
Java RMI, 17 November 2011

description

 

Transcript of IKH331-07-java-rmi

Page 1: IKH331-07-java-rmi

Java RMI, 17 November 2011

Page 2: IKH331-07-java-rmi

Methods can be called by another JVM on a different host

Interface is remote if it extends Remote Remote object implements a remote

interface and extends UnicastRemoteObject

Pemrograman Terdistribusi 2 Sistem Terdistribusi (IKH331)

Page 3: IKH331-07-java-rmi

Primitive types are passed by value Objects (that are not remote)

They are serialized and then passed by value.

At the other end the objects are deserialized

Any references inside the object are also serialized

Remote Objects

Passed as remote references (stubs)

Pemrograman Terdistribusi 3 Sistem Terdistribusi (IKH331)

Page 4: IKH331-07-java-rmi

Obtain a reference for the remote object URL for the remote object is specified as

rmi://host:port/name

Pemrograman Terdistribusi 4 Sistem Terdistribusi (IKH331)

Page 5: IKH331-07-java-rmi

public class HiDunia {

public String sayHalo() {

return "Halo dunia!";

}

public static void main (String args[]) {

String response = this.sayHalo();

System.out.println(response); }

}

Pemrograman Terdistribusi Sistem Terdistribusi (IKH331) 5

Page 6: IKH331-07-java-rmi

public class Halo {

public String sayHalo() {

return "Hello, world!";

}

}

public class HaloDunia {

public static void main (String args[]) {

Halo kelas = new Halo();

String response = kelas.sayHalo();

System.out.println(response); }

}

Pemrograman Terdistribusi Sistem Terdistribusi (IKH331) 6

Page 7: IKH331-07-java-rmi

Satu address space

Code segment

Data segment

Stack segment

Pemrograman Terdistribusi Sistem Terdistribusi (IKH331) 7

Page 8: IKH331-07-java-rmi

Proses berbeda

class Halo

class HaloDunia

mungkin berjalan di node yang sama

atau node berbeda

Different address space stub method Remote object

Pemrograman Terdistribusi Sistem Terdistribusi (IKH331) 8

Page 9: IKH331-07-java-rmi

Mendefinisikan remote interface Mengimplementasikan interface (server)

Buat dan ekspor remote object

Registrasi remote object dengan Java RMI registry

Mengimplementasikan client Jalankan server Jalankan client

Pemrograman Terdistribusi Sistem Terdistribusi (IKH331) 9

Page 10: IKH331-07-java-rmi

import java.rmi.Remote;

import java.rmi.RemoteException;

public interface Hello extends Remote {

String sayHello() throws RemoteException;

}

Pemrograman Terdistribusi Sistem Terdistribusi (IKH331) 10

Page 11: IKH331-07-java-rmi

import java.rmi.Remote;

import java.rmi.registry.Registry;

import java.rmi.registry.LocateRegistry;

import java.rmi.RemoteException;

import java.rmi.server.UnicastRemoteObject;

public class Server implements Hello {

public Server() {}

public String sayHello() {

return "Hello, world!";

}

Pemrograman Terdistribusi Sistem Terdistribusi (IKH331) 11

Page 12: IKH331-07-java-rmi

public static void main(String args[]) {

try {

Server obj = new Server();

Hello stub = (Hello)

UnicastRemoteObject.exportObject(obj, 0);

// Bind the remote object's stub in the registry

Registry registry = LocateRegistry.getRegistry();

registry.bind("Hello", stub);

System.err.println("Server ready");

} catch (Exception e) {

System.err.println("Server exception: " +

e.toString());

e.printStackTrace();

}

}

}

Pemrograman Terdistribusi Sistem Terdistribusi (IKH331) 12

Page 13: IKH331-07-java-rmi

import java.rmi.registry.LocateRegistry;

import java.rmi.registry.Registry;

public class Client {

private Client() {}

public static void main(String[] args) {

String host = (args.length < 1) ? null : args[0];

try {

Registry registry = LocateRegistry.getRegistry(host);

Hello stub = (Hello) registry.lookup("Hello");

String response = stub.sayHello();

System.out.println("response: " + response);

} catch (Exception e) {

System.err.println("Client exception: " +

e.toString());

e.printStackTrace();

}

}

} Pemrograman Terdistribusi Sistem Terdistribusi (IKH331) 13

Page 14: IKH331-07-java-rmi

javac –d destDir Server.java

javac –d destDir Client.java

start rmiregistry

java –Djava.rmi.server.codebase=file:destDir/ Server

java –Djava.rmi.server.codebase=file:destDir/ Client

Pemrograman Terdistribusi Sistem Terdistribusi (IKH331) 14

Page 15: IKH331-07-java-rmi

Default pada port 1099 start rmiregistry 2011 Registry reg =

LocateRegistry.getRegistry(2011);

Pemrograman Terdistribusi Sistem Terdistribusi (IKH331) 15

Page 16: IKH331-07-java-rmi

Implementasikan sebuah aplikasi kalkulator sederhana dengan RMI

Client menerima ekspresi matematika (+, x, /, -)

Server mengimplementasikan method-method yang sesuai

Parsing ekspresi matematika dengan StringTokenizer

untuk menentukan method apa yang dipanggil

Pemrograman Terdistribusi Sistem Terdistribusi (IKH331) 16

Page 17: IKH331-07-java-rmi

Kerangka program Client

Baca ekspresi matematika

Tokenize, untuk mendapatkan ekspresi matematik yang digunakan

Jika operatornya +, panggil method RMI penjumlahan()

Jika operatornya x, panggil method RMI perkalian()

dst

Pemrograman Terdistribusi Sistem Terdistribusi (IKH331) 17

Page 18: IKH331-07-java-rmi

Program Server

Implementasikan method-method untuk operasi dasar matematika

int perkalian(int a, int b);

int pembagian(int a, int b);

int penjumlahan(int a, int b);

int pengurangan(int a, int b);

Pemrograman Terdistribusi Sistem Terdistribusi (IKH331) 18

Page 19: IKH331-07-java-rmi

Waktu pengerjaan

Dua pekan (30 November 2011, pukul 12.00 WIB)

By e-mail [email protected]

Subject "IKH331 RMI"

Bonus

Evaluasi ekspresi yang lebih kompleks

3 + 4 x 2

(3 + 4) x 2

Pengumpulan sebelum tenggat waktu Pemrograman Terdistribusi Sistem Terdistribusi (IKH331) 19

Page 20: IKH331-07-java-rmi

Java RMI Hello World, http://download.oracle.com/javase/6/docs/technotes/guides/rmi/hello/hello-world.html

Vijay Garg, "Concurrent and Distributed Programming in Java"

Source code http://users.ece.utexas.edu/~garg/jbk.html

http://tjerdastangkas.blogspot.com/search/label/ikh331

Pemrograman Terdistribusi Sistem Terdistribusi (IKH331) 20

Page 21: IKH331-07-java-rmi

Kamis, 17 November 2011