You are on page 1of 93

Chapter 9

RMI
Remote Method Invocation
GV: Nguyn Th Thanh Vn

Ni dung
Gii

thiu
Hot ng ca RMI
Hot ng ca lp trung gian
Thit k v ci t mt chng trnh RMI
Thc thi h chng trnh RMI, ex
Chuyn tham s trong RMI, ex
Tham tr
Tham chiu

Tun

t ha i tng, ex
Factory Object, ex
RMI vi firewall
Java Simplified / Session 22 / 2 2
of 45

Gii thiu
Lp

trnh HT phn tn:

Mi trng hp tc
Tn dng ngun ti nguyn phn tn trn mng
Java:

gii quyt vn lp trnh phn tn

C .NET ca Microsoft
Trong

Java, s dng k thut RMI ci t


cc i tng phn tn.
KT xuyn sut trong ton b kin trc ca Java

Java Simplified / Session 22 / 3 3


of 45

Gii thiu
Local

method Invocation: m lnh ca hm


(hay th tc) c np thng vo b nh v
thc thi ngay trn my cc b

Mun np ni dung hm hay i tng 1


my no gi chng t mt my khc?
Remote

Method Invocation (RMI) : l cch


thc giao tip gia cc i tng Java c m
lnh ci t nm trn my khc nhau c th
gi ln nhau.
Java Simplified / Session 22 / 4 4
of 45

M hnh triu gi cc i tng t xa


Computer A

Computer B

A2

B2

A1

B2
B3

Computer C
C1
Java Simplified / Session 22 / 5 5
of 45

RMI v RPC (Remote Procedure Calling)


Like

RPC ,RMI has the following similarities

Remote calls can be made


Client/server contract based on interface
Unlike

RPC : h tr a ngn ng
RMI: ch h tr cc ng dng c vit bng
Java

Java Simplified / Session 22 / 6 6


of 45

RMI Client/Server
Client

Server

Client (ni gi phng thc ca cc i tng xa)


Server (ni i tng tht s c ci t thc thi
m lnh ca phng thc).
Java Simplified / Session 22 / 7 7
of 45

Mc ch ca RMI
H

tr gi phng thc t xa trn cc i


tng trong cc my o (JVM) khc nhau

Tch hp m hnh i tng phn tn vo ngn


ng lp trnh Java theo mt cch t nhin, c tin
cy trong khi vn duy tr cc ng cnh i tng
ca ngn ng lp trnh Java
Lm cho m hnh i tng phn tn v m hnh
i tng cc b khng c s khc bit.

Java Simplified / Session 22 / 8 8


of 45

Vn pht sinh
Vic

gi phng thc ca i tng t xa


lun phc tp hn gi phng thc cc b:
Vic tham chiu n bin, a ch ca i tng
khc nhau cc my khc nhau
Cc tham s truyn cho phng thc ca i
tng xa phi c ng gi v chuyn qua
mng n phng thc thc s. (local-stack)
Li gi phng thc t xa phi thng qua mng
v c th b ngt ngang do mng gp s c

Ph

thuc vo kt ni mng
Java Simplified / Session 22 / 9 9
of 45

Gii php
i

tng trn hai my khc nhau khng


gi trc tip m thng qua lp trung gian.
Lp trung gian tn ti c hai pha Client
v Server.
Lp my Client gi l Stub,
Lp my Server gi l Skel(Skeletion)
Lp

trung gian Stub s bit cch thng


bo li khi c cc s c v mng cho
Client
Java Simplified / Session 22 / 10 10
of 45

A2
A1

Computer B
B1_Skel
B1_Skel

Computer A

B1_Stub
B1_Stub

Lp trung gian Stub v Skeletion


B1

C1_Skel
C1_Skel

C1_Stub
Computer C
C1
Java Simplified / Session 22 / 11 11
of 45

Lp trung gian Stub v Skeletion


Trnh

bin dch Java (rmic.exe) s to ra 2 lp trung

gian:
Lp Stub (lp mc): chuyn v cho client
Lp Skeleton (lp ni): Pha Server
Stub

v Skeletion s gip cc i tng xa giao


dch vi nhau ?
i tng Server (trn my Server) cn cung cp mt giao
din tng ng vi cc phng thc ca n (Server
Object) cho php i tng Client gi n trn my Client
d dng.
i tng client s lun ngh rng n ang hot ng trc
tip vi i tng server trn my cc b.
Java Simplified / Session 22 / 12 12
of 45

Lp trung gian Stub v Skeletion


V d:
Phng thc A truyn cho phng thc B hai s a,b.
Phng thc B s cng hai s a,b cho ra kt qu c
v tr v phng thc A.
Qu trnh din ra nh sau:

a,b
c
Java Simplified / Session 22 / 13 13
of 45

Kin trc ca RMI

The Stub and Skeleton layer, which intercepts method calls made
by the client to the interface reference variable and redirects these
calls to a remote RMI service.
The Remote Reference layer understands how to interpret and
manage references made from clients to the remote service objects.
The Transport layer, which is based on TCP/IP connections between
machines in a network. It provides basic connectivity, as well as some
firewall penetration strategies.
Java Simplified / Session 22 / 14 14
of 45

Kin trc ca RMI

Java Simplified / Session 22 / 15 15


of 45

Qu trnh hot ng ca RMI


Remote Machine (Server)
RMI Server

Skeleton
return

bind

Registry

lookup

call

Stub

RMI Client

Local Machine (Client)

Java Simplified / Session 22 / 16 16


of 45

Qu trnh hot ng ca RMI


B1: RMI-server ng k tn ca i tng vi b q.l Registry.
B2: B qun l Registry tr v tham chiu n i tng xa
(RMI Server) thng qua lp giao tip
B3-4: RMI-client lin lc vi b Registry ly v tham chiu
n i tng trn Server.
Cc qu trnh ng k v truy tm tn i tng c Java
qun l bng cc hm giao tip API JNDI
B5-7: Client s gi cc phng thc ca i tng trn Server
Khi mt phng thc c gi, s c chuyn tip n
lp trung gian Stub, ri gi n lp Skeleton (h Stub).
B8-10: Lp Skeleton s trc tip yu cu i tng thc thi
phng thc v tr kt qu cho Client (h Skeletion)
Java Simplified / Session 22 / 17 17
of 45

Trnh (b qun l)ng k Registry


l

mt chng trnh dch v chy hu


Registry
trng (rmiregistry.exe), thc hin m cm
socket v lng nghe
Client cc yu cu gi n
cng mc nh 1099, c th ch nh mt
Server
cng khc vi cng 1099.
V d: C:\j2sdk1.4.0\bin\ rmiregistry.exe 9999

ng

vai tr nh l mt DNS nh cho cc i


tng t xa thc hin tm kim dch v,
Java Simplified / Session 22 / 18 18
of 45

Hot ng ca Stub, Skeleton


Client gi mt phng thc t xa, li gi
ny c chuyn tip n Stub.
Stub c nhim v gi tip li yu cu
ny n Skeleton pha server bng cch
Stub m mt socket n server,
ng gi cc tham s:
Gi nhn dng i tng t xa
Gi phng php nhn dng

truyn lung d liu ny n Skeleton.

Skeleton cha ng mt phng thc


nhn cc li yu cu t xa,
m gi tham s,
gi hm thc s trn server tnh ton
tr kt qu v Stub pha client.

Java Simplified / Session 22 / 19 19


of 45

Cc lp v cc giao tip trong gi java.rmi


Giao

tip Remote

Giao tip ny khng khai bo bt k phng thc no. Cc phng thc


c khai bo trong phng thc ny l cc giao tip c th c gi t
xa.
Lp

Naming

Lp java.rmi.Naming truyn tin trc tip vi mt trnh ng k ang chy


trn server nh x cc URL rmi://hostname/Objectname thnh cc
i tng t xa c th trn host xc nh:
Rmi l giao thc dng ng k.
Hostname v port l /c IP v s hiu cng ca Server ni b Registry ang
chy.
Objectname l tn t t, cc ct pha client s da vo tn ny truy tm tham
chiu n i tng cn dng.

URL rmi vs. URL http.


Java Simplified / Session 22 / 20 20
of 45

Naming class - methods


Lp

Naming cung cp cc phng thc sau:

public static String[] list(String url)


throws RemotException
tr v mt mng cc xu k t, mi xu l mt URL
c gn vi mt tham chiu. url l URL ca trnh ng k
Naming.
public static Remote lookup(String url)
throws RemotException, NotBoundException,
AccessException, MalformedURLException
Client lookup tm kim mt i tng t xa gn lin vi
tn i tng.
NotBoundException: server xa khng nhn ra tn ca
n.
21

Java Simplified / Session 22 / 21 of 45

Naming class - methods

Public static void bind(String url, Remote


object) throws RemotException,
AlreadyBoundException, MalformedURLException,
AccessException

lin kt mt tn vi mt i tng xa. Nu thnh cng th


client c th tm kim i tng stub t trnh ng k.

C rt nhiu tnh hung c th xy ra khi gn tn.


MalformedURLException: url khng ng c php.
RemoteException: khng th lin lc c vi trnh .k
AccessException: client khng c php gn cc i
tng trong trnh ng k.
AlreadyBoundException: nu i tng URL gn vi
mt i tng cc b

Java Simplified / Session 22 / 22 22


of 45

Naming class - methods


public static void rebind(String url,
Remote obj)throws RemoteException,
AccessException, MalformedURLException
Phng thc ny ging nh phng thc bind()
ngoi tr vic l n gn URL cho i tng ngay c
khi URL c gn.

Java Simplified / Session 22 / 23 23


of 45

RemoteObject class
RemoteObject

RemoteObject class
Cc i tng t xa l th hin ca cc lp con
ca RemoteObject.

RemoteServer class
l lp con ca lp RemoteObject;
l lp cha ca lp UnicastRemoteObject.

UnicastRemoteObject class
l mt lp con c th ca lp RemoteServer.
to ra mt i tng xa:
ta phi tha k lp UnicastRemoteServer
khai bo lp ny thc thi giao tip Remote
Phng thc exportObject(Object): lm cho my
o Java nhn din c i tng Object.

UnicastRemote
Server

Object

RemoteServer
UnicastRemote
Object
UnicastRemote
Server
Remote

Java Simplified / Session 22 / 24 24


of 45

Giao tip Registry


cho

php cc client tm kim cc i tng xa trn


mt server theo tn.

Cc

phng thc

Bind() gn mt tn vi mt i tng t xa c th
List() lit k tt c cc tn c ng k vi trnh ng k
Lookup() tm mt i tng t xa c th vi mt URL cho
trc gn vi n
Rebind() gn mt tn vi mt i tng xa khc
Unbind() loi b mt tn c gn cho mt i tng
xa trong trnh ng k
Registry.REGISTRY_PORT l cng mc nh lng nghe
cc cc yu cu. Gi tr mc nh l 1099.

Java Simplified / Session 22 / 25 25


of 45

Cc bc thit k v ci t RMI
1. c t mt giao tip t xa (remote interface) trn
server.
2. Hin thc giao tip t xa (remote interface) Xy
dng mt i tng t xa (remote object) .
3. Sinh ra cc Stub pha client v Skeleton pha server.
4. Xy dng chng trnh pha Server
5. Xy dng chng trnh pha Client.
6. Khi ng b ng k RMI (RMI registry)
7. Khi ng cc i tng t xa pha server
8. Chy chng trnh pha client.
Java Simplified / Session 22 / 26 26
of 45

Ex, Ci t chng trinhg cng 2 s nguyn


Triu

gi i tng RMI gia trnh khch v


i tng ch xa

Java Simplified / Session 22 / 27 27


of 45

1. c t mt Remote Interface (at Srv)


Cc

i tng trong Remote Inteface phi c kh


nng giao tip vi cc i tng xa (K tha
Remote class)
Cc phng thc phi c kh nng pht ra ngoi
l Remote Exception.
// Calculator.java
im p ort java.rm i.*;
p u b lic in terface C alcu lator exten d s R em ote
{
p u b lic in t ad d N u m (in t x,in t y) th row s
R em oteExcep tion ;
}
Bin dch
Java Simplified / Session 22 / 28 28
of 45

2. Hin thc Remote Interface


T

giao tip RI nh ngha, i tng thc s phi


c ci t:

/* CalculatorIm pl.java*/
im p ort java.rm i.*;
p u b lic class C alcu latorIm p l im p lem en ts
C alcu lator {
p u b lic in t ad d N u m (in t x,in t y) th row s
R em oteExcep tion {
System .out.println("Client request to calculate");
retu rn (x+ y);
}
}
Bin dch

Java Simplified / Session 22 / 29 29


of 45

3. Sinh trung gian Stub v Skeleton


Da

vo lp ci t CalImpl.class, trnh bin


dch rmic.exe ca Java s cung cp hai lp
trung gian
C:\RMI>rmic CalculatorImpl
Kt qu
CalculatorImpl_Stub.class
CalculatorImpl_Skel.class //ko

Java Simplified / Session 22 / 30 30


of 45

4. Xy dng chng trnh trn Server


/* CalServer.java*/
p u b lic class C alcu latorS erver{
p u b lic static void m ain (S trin g [] arg s) th row s
A lread yB ou n d Excep tion {
try{
//tao doituong Calculator thuc su
CalculatorIm plc= n ew C alcu latorIm p l();
System .out.println("Exporting Calculator ! ");
//thng bo s hin din c l
itng c kha
nng Rem ote cho JVM
U nicastRem oteO bject.exportO bject (c);
//ng ky doituong vitrnh qua
n l rm i
N am ing.bind("rm i://localhost/Van",c);
System .out.println("Register Calculator!");
} catch (Excep tion e)
{ System .out.println(e); }
}
}

Bin dch

Java Simplified / Session 22 / 31 31


of 45

5. Xy dng chng trnh trn Client

Chng trnh pha bn my client c kh nng gi v s


dng i tng Cal trn my server:

/* CalculatorClient.java*/
im p ort java.rm i.*;
p u b lic class C alcu latorC lien t {
p u b lic static void m ain (S trin g [] arg s){
try{
System .out.println("Finding O bject ");
// tm
itng c
n truy xu
t theo tn
Calculator c= (C alcu lator)N am ing.lookup ("rm i://localhost/Van");
// goiphuong thuc cua doituong
System .out.println(c.addN um (5,10));
} catch (Excep tion e) { S ystem .ou t.p rin tln (e); }
}
}

Bin dch
Java Simplified / Session 22 / 32 32
of 45

6. Kch hot b ng k
C:\RMI>rmiregistry.exe
N

c nhim v n nhn (lun trong trng thi


sn sng phc v) cc kt ni cha thng tin v
i tng do phng thc Naming.bind() gi
n.
Mc nh rmiregistry.exe lng nghe cc kt ni
gi n cng 1099, c th ch nh li:
C:\RMI>rmiregistry.exe 2012
rmiregistry.exe c trong ..\Java\jdk1.7.0_05\bin
Khng

cn chy service trn nu c:


LocateRegistry.createRegistry(1099);
trong main ca trnh Server

Java Simplified / Session 22 / 33 33


of 45

7. K.ng cc i tng pha Server


C:\RMI>java CalculatorServer
Exporting Calculator
Register Calculator!
Cng nh rmiregistry.exe, sau khi Calculator
Server c gi, hm Naming.bind() s
i vo vng lp v tn ch nhn yu cu
t client n.

Java Simplified / Session 22 / 34 34


of 45

8. Chy chng trnh pha Client


C:\RMI>java CalculatorClient
Finding Object
15
-> kt qu tr v l li gi n phng thc
addNum() ca i tng CalculatorImpl.
Quay li ca s DOS trn Server thy:
Client request to calculate
-> hm addNum() c gi thc hin

Java Simplified / Session 22 / 35 35


of 45

Test

Java Simplified / Session 22 / 36 36


of 45

Review

Java Simplified / Session 22 / 37 37


of 45

Lu cch vn hnh
Da

vo JVM ta c th to ty cc my
tnh o (cho cc ct chy trn cc ca s
DOS khc nhau) giao tip vi nhau gi lp
mng.
c im: cng IP, cng chung th vin
Java, cng 1 chnh sch bo mt -> d vn
hnh.
Khi vn hnh trn cc my tnh vt l khc
nhau cn ch v th vin, security policy
Java Simplified / Session 22 / 38 38
of 45

RMI trn JVM

Java Simplified / Session 22 / 39 39


of 45

RMI trn my thc

ci t ca i tng

Java Simplified / Session 22 / 40 40


of 45

T to b ng k (ko dng rmiregistry.exe


T

to b ng k v t ng k i tng:

Dng: createRegistry()ca lp LocateRegistry.


ng k mt i tng khc:
LocateRegistry.createRegistry(1234);
N am ing.bind("rm i://localhost:1234/m yCal",c2);

LocateRegistry.createRegistry(1099);
Calculator cal= n ew C alcu latorIm p l();
System .out.println("Exporting Calculator ! ");
U nicastRem oteO bject.exportO bject(cal);
System .out.println("Registering object ");
N am ing.bind("rm i://localhost/m yCal", cal);
System .out.println(Register Calculator");
System .out.println("W aiting for client request ");
Java Simplified / Session 22 / 41 41
of 45

Cc lp c to ra trong RMI
Cc

lp v phm vi s dng

Server

Client

Cal.class

Cal.class

CalImpl.class

CalClient.class

CalServer.class

CalImpl_Stub.class

CalImpl_Stub.class
CalImpl_Skel.class

Java Simplified / Session 22 / 42 42


of 45

Bin Classpath v ty chn Codebase


CLASSPATH:

Java da vo bin mi trng CLASSPATH


truy tm cc tp tin .class.
Nu CLASSPATH ch sai ng dn ti li xy ra:
java.lang.ClassNotFoundException:ClassName
thay i gi tr cho CLASSPATH, dng lnh:
Set Classpath. V d:
Set Classpath=.;C:\RMI\

Java Simplified / Session 22 / 43 43


of 45

Bin Classpath v ty chn Codebase


Codebase

(HTML)

[CODEBASE = URLDirectory] //xc nh v tr tp t xa

Codebase cho php np t ng cc lp _Stub.class


t xa. (khi ng k i tng vi rmiregistry trn my
ch)
Thc

hin:

my ch phi h tr thm dch v WebServer chy


trn my ni rmiregistry ang chy .
chp tp tin (_Stub.class) vo th mc (myclass) ca
trnh ch web server.
bin Classpath trn my o ni rmiregistry ang chy
khng c tr n cng th mc cha class
Java Simplified / Session 22 / 44 44
of 45

Np stub t xa xung client thng qua web server


2.
registry
nhn
cu, tr
truyv
tm
stubchiu
trongi tng,
3. RMI
Client
yu cu
rmiyu
registry
tham
4.
yu
cu
cung
cp
stub
1.
Server
ng
k webserver
i
tng
vi
rmi
registry,
yu
cu
rmi
CLASSPATH
nhng
khng
c,
theo
s
ch
dn
ca
server
nhng
rmiregistry
client
s
cha
hng
c
dn
stub,
my
rmi
khch
registry
t
cho
ng
n
np
bit
lp
a
ch
5.
Client
s
dng
stub

giao
tip
vi
server
registry
truy
tm
i
quav,
web
server
n
tmt
n
web
thng
ly
stub
thi ghi nh
webserver
_Stub
a
ch
nserver
codebase:
lnstub
download
http://172.16.11.12/myclass/
stub
vng
li ng dn n web server
(IP: 172.16.11.12

Java Simplified / Session 22 / 45 45


of 45

Np file t xa v security policy pha client


Vi

Java tt c cc thao tc kt ni v chp


tp tin l t mt my khc v mt my u
phi thng qua lp bo v:

SecurityManager
Khi

np lp Stub t ng, chng trnh ca


client cn b sung thit lp lp phng v:
System.setSecurityManager(new
RMISecurityManager()); //sau try{

Java Simplified / Session 22 / 46 46


of 45

Np file t xa v security policy pha client


/* CalculatorClient.java*/
im p ort java.rm i.*;
p u b lic class C alcu latorC lien t {
p u b lic static void m ain (S trin g [] arg s){
try{
System .setSecurityM anager(n ew
R M IS ecu rityM an ag er());
System .out.println("Finding O bject ");
// tm
itng c
n truy xu
t theo tn
Calculator c= (Calculator)N am ing.lookup
("rm i://localhost/Van");
// goiphuong thuc cua doituong
System .out.println(c.addN um (5,10));
} catch (Excep tion e) { S ystem .ou t.p rin tln (e); }
}
}
Java Simplified / Session 22 / 47 47
of 45

Np file t xa v security policy pha client


H

thng phng v RMISecurityManager s cho


php hoc cm cc kt ni t xa da trn thit lp
trong file:
..\java\jdk1.7.0_05\jre\lib\security\java.policy
M tp tin java.policy, edit:
grant {
permission java.security.AllPermission;

// ko phng v
permission java.net.SocketPermission
"*:1099", "connect, accept, resolve";
// This allows RMI clients to contact the
RMIRegistry of any host
};

Java Simplified / Session 22 / 48 48


of 45

Chuyn tham s trong RMI

i vi vic truyn tham s qua mng theo c


ch RMI th c hai nguyn tc sau:
Tt c cc kiu d liu n gin nh int, char, u
c truyn theo tham tr.
Tt c cc d liu kiu i tng mun truyn qua
mng u buc phi ci t mt trong hai tip l
Remote hoc Serializable.
Cc i tng ci giao tip Remote s c truyn theo
tham chiu
Cc i tng ci t giao tip Serializable s c truyn
theo tham tr.
Cc i tng ko c ci t giao tip Serializable hay
Remote th ko th dng lm tham s truyn qua mng c
Java Simplified / Session 22 / 49 49
of 45

Chuyn i tng theo tham tr


Giao

tip Serializable dng cho mc ch bo

hiu:
Tt c cc lp i tng ci t trong giao tip
Serializable u c kh nng tun t ha.
Khi

gi mt phng thc ca i tng t xa,


nu trong li gi c y/c tham s kiu i tng:
i tng s c ng gi v chuyn ton b n
server (ni tip nhn v thc thi phng thc).
Ti Server, i tng c bung ra li trng thi ban
u v c s dng

Java Simplified / Session 22 / 50 50


of 45

Ex: truyn tham s qua mng s dng


giao tip Serializable
RMI_Ball

Java Simplified / Session 22 / 51 51


of 45

Output

Java Simplified / Session 22 / 52 52


of 45

Chuyn i tng theo tham chiu


Khi

i tng cn chuyn i qu ln -> ng


gi chuyn qua mng s nh hng tc
thc thi ct.
Khi trnh ch c th tham chiu v x l trc
tip i tng ang nm trn my client ->
chuyn i tng theo tham chiu t ch
n khch -> c ch callback.

Java Simplified / Session 22 / 53 53


of 45

Thit k ct chuyn i i tng qua mng


theo tham chiu
1.

c t giao tip cho i tng Client

2.

c t giao tip cho i tng Server

3.

Ci t chi tit cho i tng Client

4.

Ci t chi tit cho i tng Server

5.

Xy dng chng trnh cho i tng Server trn Server


v ng k vi Registry

6.

Thit k chng trnh Client gi phng thc ca i


tng Server

7.

To lp trung gian cho c 2 i tng Server v CLient

8.

Khi ng rmiregistry

9.

Ci t i tng trn Server

10.

Chy trnh khch trn Client

Java Simplified / Session 22 / 54 54


of 45

1,2. c t g.tip cho i tng Client, Server


im p ort java.rm i.*;
p u b lic in terface A tC lien t exten d s R em ote {
//pt ny c gib
i.tng AtServer trn m y chu

p u b lic void callC lien tM eth od (S trin g m essag e)


th row s R em oteExcep tion ;
}
p u b lic in terface A tS erver exten d s R em ote {
//Ti
p nhn tham chi
u
n
itng AtClient trn trnh
khch
p u b lic void reg isterC lien t(A tC lien t c) th row s
R em oteExcep tion ;
//Cung c
p dch v cho cc trnh khch
p u b lic void callS erverM eth od (S trin g
m essag e)th row s R em oteExcep tion ;
55
}

Java Simplified / Session 22 / 55 of 45

3.4. Ci t chi tit cho i tng Client, Srv


p u b lic class A tC lien tIm p l im p lem en ts A tC lien t {
p u b lic void callC lien tM eth od (S trin g m es) th row s
R em oteExcep tion {
System .out.println(m es);
}
}
p u b lic class A tS erverIm p l im p lem en ts A tS erver {
AtClient client;//lu gi tham chi
u
n
itng trn m y khch
// trnh khch triu gipt ng k AtC lient vitrnh chu

p u b lic void reg isterC lien t(A tC lien t c) th row s R em oteExcep tion
{
client = c;
}
p u b lic void callS erverM eth od (S trin g m es)th row s
R em oteExcep tion {
System .out.println(m es);
for (in t i= 1; i< 10; i+ + ){
String m sg= "Server response "+ i;
//triu giphng thc cu
a
itng chy trn m y khch
Java Simplified / Session 22 / 56 56
of 45
client.callC lientM ethod(m sg); }

5. Xy dng chng trnh cho i tng


Server trn Server v ng k vi Registry
p u b lic class S erver_S etu p {
p u b lic static void m ain (S trin g arg s[]) th row s Excep tion {

//Kh
ito
itng chu

AtServer server= n ew A tS erverIm p l();

//thng bo kha
nng giao ti
p c t xa
U nicastRem oteO bject.exportO bject(server);

// ng k
itng vi RM I
N am ing.bind("rm i://localhost/serverobject",server);
System .out.println("W aiting for clientrequest ...");
}
}

Java Simplified / Session 22 / 57 57


of 45

6. Thit k chng trnh Client gi phng


thc ca i tng Server
p u b lic class C lien t_S etu p {
p u b lic static void m ain (S trin g arg s[]) th row s Excep tion {

//K h
i to
i t n g kh ch
AtClient client= n ew A tC lien tIm p l();

//th n g b o kh a
n n g g iao ti
p c t xa
U nicastRem oteO bject.exportO bject(client);
AtServer server=
(AtServer)N am ing.lookup("rm i://localhost/serverobject");

//Tru y
n t.ch i
u cu
a A tC lien t t trn h kh ch ln ch u

//Trn h ch u
ko c
n .looku p tru y tm tc
n A tC lien t
server.registerClient(client);
server.callServerM ethod("Client ContactServer");
}
}
Java Simplified / Session 22 / 58 58
of 45

7. To lp trung gian cho c 2 i tng


Server v Client. 8. Khi ng
rmiregistry

Java Simplified / Session 22 / 59 59


of 45

9. Ci t i tng trn Server


10. Chy trnh khch trn Client

Java Simplified / Session 22 / 60 60


of 45

Note
Java

cho php 1 i tng c th ci t mt


lc nhiu Interface.
Nu i tng ci c Remote v
Serialization th i tng c truyn theo
tham chiu hay tham tr?

Java Simplified / Session 22 / 61 61


of 45

Tun t ha i tng

Tun t ha l qu trnh chuyn (read/write) tp


hp cc th hin i tng cha cc tham chiu ti
cc i tng khc thnh mt lung byte tuyn tnh
(tun t),

lung ny c th c:
gi i qua mt Socket,
lu vo tp tin hoc c
x l di dng mt lung d liu.

Vic lu i tng trn a, d liu trn tp tin l


loi d liu tun t (tri phng i tng ra theo
th t)
Java Simplified / Session 22 / 62 62
of 45

Serialization

Java Simplified / Session 22 / 63 63


of 45

Tun t ha i tng
Java

cung cp kh nng ghi ton b i


tng xung mt tp tin. Sau c th em
tp tin cha i tng i khp ni nu cn
th khi phc i tng v trng thi ban
u.
i tng trong b nh c th quan h
chng cht vi nhau nhng khi c ghi
xung tp tin th bt buc phi tri phng i
tng theo th t.
Java Simplified / Session 22 / 64 64
of 45

Tun t ha i tng

Java Simplified / Session 22 / 65 65


of 45

kh tun t ha
Ch

c i tng thc thi giao din


Serializable mi c th c ghi li v c
phc hi bi cc tin ch tun t ha
mt lp thc thi giao din Serializable th lp
c kh nng tun t ha->kh tun t
ha

Java Simplified / Session 22 / 66 66


of 45

Example Serialization
p u b lic class w riteO b j {
p u b lic static void m ain (S trin g [] arg s) th row s Excep tion {
Junk obj1 = n ew Ju n k("L X u n A n h ");
Junk obj2 = n ew Ju n k("L Q u
c B a");
O bjectO utputStream objectO ut = n ew O b jectO u tp u tS tream (n ew
B uf f
e red O u tp u tS tream (n ew FileO u tp u tS tream ("b .txt")));
objectO ut.w riteO bject(obj1); // W rite object
class Ju n k im p lem en ts
objectO ut.w riteO bject(obj2); // W rite object
S erializab le {
objectO ut.close(); // Close the output stream
String str;
O bjectInputStream objectIn = n u ll;
p u b lic Ju n k(S trin g s) {
in t C ou n t = 0;
str = s; }
Junk object = n u ll;
p u b lic S trin g toS t(){
objectIn = n ew O b jectIn p u tS tream (
retu
rn
n ew B u f f
e red In p u tS tream (n ew FileIn p u tS tream ("b.
txt")
)); str; }
}
w h ile (C ou n t < 2) {
object = (Junk) objectIn.readO bject(); Count+ + ;
System .out.println("O bject " + Count + ": " + object.toStr()); }
objectIn.close();
}
}
Java Simplified / Session 22 / 67 67
of 45

ng k nhiu i tng vi RMIRegistry

Java Simplified / Session 22 / 68 68


of 45

Qun l nhiu i tng vi RMIRegistry


Trong

java cng cho php ta ly v danh


sch cc i tng m rmiregistry ang nm
gi
String hostAdd = "127.0.0.1";
//k
t n
ivib RM IRegistry
Registry reg =
LocateRegistry.getRegistry(hostAdd);
//L
y danh sch cc
itng v
String O bjlist[] = reg.list();

Java Simplified / Session 22 / 69 69


of 45

Factory Object
Khi

nhiu i tng c to ra v c ng k vi
rmiregistry => Hn ch:
rmiregistry phi qun l nhiu i tng.
Trnh khch phi nh cc tn i tng.

Gii

php: Java cho php xy dng:

Mt i tng c ng k rmiregistry v ch dng to


ra cc i tng con khc gi l Factory object: c th coi

l xng ch tc v cung cp cc i tng con


cho my khch
Factory Object l cch thc giao tip kh thng dng,
c a vo trong EJB ca Java
Java Simplified / Session 22 / 70 70
of 45

M hnh hot ng ca Factory Object


3.
khch
triu
gi
i
tng
Factory
Object
5.Trnh
Datng
vo
tham
chiu
dormiregistry
Factory
Object
trv
v
4.
2.
1.
i
Trnh
i
tng
khch
ch
Factory
lin
to
h
ra
Object
vi
v
tr
ng
v tham
k
tn
chiu
ly
mnh
ca
y/c
to
ra Object
vn
choi
tham
chiu
n
Object
A
Object
tham
vi
rmiregistry.
chiu
A,
Bphp
theo
tng
yu
Factory
cu
Object
trnh
trnh
khch
thc
hin
li
gi
nca
Object
Akhch
hoc
or Object B
Object B

Java Simplified / Session 22 / 71 71


of 45

Ci t ng dng Factory Object


C

i tng Factory dng to ra hai i


tng con:
FactoryServerImpl:
createNews(): to ra i tng News khi trnh khch gi
createTimer(): to ra i tng Timer khi trnh khch
gi

NewsImpl
getTodayNews() dng ly v thng tin

TimerImpl.
getCurrentTime(): dng ly ngy gi hin ti trn
Server
M

hnh
Java Simplified / Session 22 / 72 72
of 45

Cc bc trin khai
1.
2.
3.
4.

c t giao tip v ci t i tng Timer


c t giao tip v ci t i tng New
c t v ci t i tng FactoryService
Xy dng trnh ci t v ng k i tng
FactoryService vi rmiregistry

Server_setup: to t FactoryService, k vi rmi


5.

Xy dng trnh khch triu gi i tng trn


my ch. Client_Setup:

- lin h vi t FactoryService,
- y/c to 2 t News v Timer (createNews, createTimer)
- gi phng thc ca 2 t (getTodayNews(), getCurrentTime()
6.

Bin dch v chy chng trnh

Java Simplified / Session 22 / 73 73


of 45

c t g.tip cho News, Timer, FactoryService


p ackag e Factory;
p u b lic in terface N ew s exten d s R em ote{
p u b lic S trin g g etTod ayN ew s() th row s
R em oteExcep tion ;
}
p ackag e Factory;
p u b lic in terface Tim er exten d s R em ote{
p u b lic D ate g etC u rren tTim e() th row s
R em oteExcep tion ;
}
p ackag e Factory;
p u b lic in terface FactoryS ervice exten d s R em ote{
p u b lic N ew s createN ew s() th row s
R em oteExcep tion ;
p u b lic Tim er createTim er() th row s
R em oteExcep tion ;

Java Simplified / Session 22 / 74 74


of 45

Ci t cho News, Timer


p ackag e Factory;
p u b lic class N ew sIm p im p lem en ts N ew s{
String new slist [] = {"The fi
rst N ew s", "The second N ew s",
"The third N ew s"};
static in t in d ex= 0;
p u b lic S trin g g etTod ayN ew s() th row s R em oteExcep tion {
System .out.println("C lient request new s");
index+ + ;
if (in d ex > 2) in d ex= 0;
retu rn n ew slist[in d ex];
}
}
p ackag e Factory;
p u b lic class Tim erIm p im p lem en ts Tim er{
p u b lic D ate g etC u rren tTim e() th row s R em oteExcep tion {
System .out.println("C lient request tim e ");
retu rn n ew D ate();
}
}
Java Simplified / Session 22 / 75 75
of 45

Ci t cho FactoryService
p ackag e Factory;
p u b lic class FactoryS erviceIm p im p lem en ts FactoryS ervice{
N ew s new sobject = n ew N ew sIm p ();
Tim er tim erobject = n ew Tim erIm p ();
p u b lic FactoryS erviceIm p (){
try {
U nicastRem oteO bject.exportO bject(new sobject);
U nicastRem oteO bject.exportO bject(tim erobject);
} catch (R em oteExcep tion e) {
e.printStackTrace();
System .out.println(e); }
}
p u b lic N ew s createN ew s() th row s R em oteExcep tion {
retu rn n ew sob ject;
}
p u b lic Tim er createTim er() th row s R em oteExcep tion {
retu rn tim erob ject;
}
}
Java Simplified / Session 22 / 76 76
of 45

Xy dng trnh Server, Client


p u b lic class S erver_S etu p {
p u b lic static void m ain (S trin g [] arg s) th row s Excep tion {
System .out.println("Factory Service ready...");
FactoryService obj= n ew FactoryS erviceIm p ();
U nicastRem oteO bject.exportO bject(obj);
N am ing.bind("rm i://localhost/Factory", obj);
}
}
p u b lic class C lien t_S etu p {
p u b lic static void m ain (S trin g [] arg s) th row s Excep tion {
FactoryService objFac= (FactoryService)
N am ing.lookup("rm i://localhost/Factory");
N ew s new s = objFac.createN ew s();
Tim er tim er= objFac.createTim er();
System .out.println("1. Curent tim e: " + tim er.getCurrentTim e());
System .out.println("1. There is new s: " + new s.getTodayN ew s());
}
}
Java Simplified / Session 22 / 77 77
of 45

Output

Java Simplified / Session 22 / 78 78


of 45

Static Method Invocation


Cch

gi hm tnh:

i tng xa phi cung cp lp giao tip ca bn thn


i tng
Trnh khch ly tham chiu n i tng bng hm
Naming.lookup().
Trnh khch gi cc phng thc ca i tng ch.
Trnh khch s da vo lp giao tip ny chuyn kiu
i tng dng tng minh (sau khi nhn c) Ex:
FactoryService objFac= (FactoryS ervice)
N am ing.lookup("rm i://localhost/Factory");

-> Khi c th truy xut i tng xa theo cch


thng thng (local)
Java Simplified / Session 22 / 79 79
of 45

Dynamic Method Invocation


Nu

khng c lp giao tip ca i tng t xa:

Khng th chuyn kiu


Dng

k thut reflect triu gi phng thc

ng.
Trnh khch ly tham chiu n i tng bng hm
Naming.lookup() dng tng qut Object, ex
O bject obj= N am ing.lookup("rm i://localhost/O bj");

Sau , kho st i tng


Truy tm xut x class: getclass()
Truy tm phng thc ca i tng: getMethod()
Thc thi phng thc bn trong i tng: invoke()
Java Simplified / Session 22 / 80 80
of 45

c t v ci t mt Remote Interface
// Friend.java
im p ort java.rm i.*;
p u b lic in terface Frien d exten d s R em ote {
p u b lic S trin g g reetin g (S trin g n am e) th row s
R em oteExcep tion ;
}
// Friend.java
p u b lic class Frien d Im p im p lem en ts Frien d {
p u b lic S trin g g reetin g (S trin g n am e) th row s
R em oteExcep tion ;
retu rn (H i" + nam e + N ice to m eet you ");
}
}

Java Simplified / Session 22 / 81 81


of 45

Xy dng chng trnh trn Server


/* Server_Setup.java*/
p u b lic class S erver_S etu p {
p u b lic static void m ain (S trin g [] arg s) th row s
Excep tion {
//tao doituong Calculator thuc su
Friend f= n ew Frien d Im p l();
//thng bo s hin din f l
itng c kha
nng
Rem ote cho JVM
U nicastRem oteO bject.exportO bject (f);
System .out.println(Friend w aitting ..");
//ng ky doituong vitrnh qua
n l rm i
N am ing.bind("rm i://localhost/Friend",f);
}
Java Simplified / Session 22 / 82 82
of 45

Xy dng chng trnh trn Client


/* Client_Setup.java*/
im p ort java.rm i.*;
im p ort java.lan g .ref l
e ct.*;
p u b lic class C lien t_S etu p {
p u b lic static void m ain (S trin g [] arg s) th row s Excep tion {
System .out.println("Finding O bject ");
O bject f= N am ing.lookup ("rm i://localhost/Friend");
// Truy tm class
Class cls= f.getclass();
Class [] TypeCls = new Class [] {String.class};
M ethod m thd = f.getM ethod(greeting, Typecls);
O bject [] arg = new O bject [] {Q uoc Anh};
String result = (String) m thd.invoke(f, arg);
S ystem .ou t.p rin tln (resu lt);
}
Friend f= (Friend) N am ing.lookup ("rm i://localhost/Friend");
}String result = f.greeting(Q uoc Anh);
Java Simplified / Session 22 / 83 83
of 45

RMIRegistry v vn Firewall

Kt ni gia trnh khch v RMIRegistry b chn bi


firewall:

Java Simplified / Session 22 / 84 84


of 45

Gii php
Yu

cu admin (of firewall) cung cp 1 s


cng s dng
S dng c ch trung gian thng qua cng
80 ca dch v WebServer truy xut v gi
i tng: c ch Tunneling
(cn m hnh lp trnh Web services & nghi
thc giao tip SOAP da trn XML)

Java Simplified / Session 22 / 85 85


of 45

Tunneling
1.
i
tng
Object
ng
k
vi
RMIRegistry.
3.
4.
Web
Servlet
server
lin
y/c
h
mt
ti
RMIRegistry
i
tng
trung
ly
gian
tham
Servlet
5.
2.
Servlet
My
khch
triu
gi
gi
y/c
Object
truy
xut
Object
quachiu
giao
6.
tr Webserver
v kt qu cho
Webserver
7. Servlet
Cui cng
tr kt
qu vthng
cho trnh
khch
trn
ca my
Object
x l
thc
http ch
n (server)
Webserver.

Java Simplified / Session 22 / 86 86


of 45

Web services & SOAP


Web

services:

cung cp c ch triu gi cc i tng t xa thng qua


web v giao thc HTTP.
Cung cp c ch truyn ti nh dng i tng theo
XML.

Giao thc SOAP (Simple Object Access Protocol):


h tr Web services.
c nh ngha da trn giao thc HTTP,
cho php d liu chuyn i bng HTTP v nh dng
chun theo XML.
Cc li gi hm, tham s, d liu u c chuyn thnh
dng XML => d dng x l bi bt c ngn ng no
Java Simplified / Session 22 / 87 87
of 45

Lp trnh phn tn vi CORBA


Khc

vi RMI:

Cc i tng c xy dng trn nn CORBA c p


dng cho nhiu ngn ng khc nhau.
B pht trin J2SDK cng h tr RMI-CORBA, cho php
mt i tng Java gi mt i tng CORBA s dng
hai cch tip cn khc nhau
CORBA

(Common Object Request Broker Architecture) :

kin trc mi gii gi cc i tng thng dng - l


ngn ng c t giao tip (Interface Definition
Language - IDL):
Cc i tng vit bng ngn ng khc nhau c th triu
gi ln nhau theo m hnh i tng phn tn
Java Simplified / Session 22 / 88 88
of 45

Triu gi i tng Corba thng qua ORB

ORB giao tip vi i


tng thng qua cc
thng tin c c t
theo IDL

Java Simplified / Session 22 / 89 89


of 45

Giao tip gia trnh khch v i tng


Corba trn Server

Java Simplified / Session 22 / 90 90


of 45

Giao tip gia trnh khch v i tng


Corba trn Server
a. Phn ci t i tng Corba trn my ch:
c

t i tng X bng IDL ca Corba


Chuyn c t X thnh mt ngn ng c th (dng 1 trnh
bin dch tng ng:
ex: idlj.exe -> java; idl2cpp.exe-> C++)
Trnh bin dch s to ra lp _Skel
Ci t i tng bng ngn ng (Java)

b. Phn kt ni vi i tng khch:


S

dng IDL ca X y/c trnh bin dch to ra _Stub (trnh


bin dch tng ng vi trnh khch)
Trnh khch gi i tng ch (-> _Stub -> ORB khch ->
IIOP -> ORB ch -> _Skel -> CorbaObject
Java Simplified / Session 22 / 91 91
of 45

Java Simplified / Session 22 / 92 92


of 45

Summary
1. xy dng i tng xa ta phi:
-

Thit lp mt giao tip ca i tng.

Ci t giao tip ca i tng,

Sau to ra cc lp trung gian _Stub v _Skel tng ng.


o Giao tip trnh khch vi i tng ch thng qua lp _Stub.
o Giao tip ca i tng ch vi vi trnh khch thng qua lp _Skel

i tng ch phi ng k tn vi tring rmiRegistry trnh khch c th truy tm


tham chiu ca i tng t xa (Naming.bind)

Trnh khch truy tm i tng theo tn (Naming.lookup) v gi phng thc ca


i tng.

2. Chuyn tham s trong RMI:


-

Truyn d liu gia trnh khch v i tng trn my ch c th thng qua tham tr
v tham chiu:
o Tham chiu: cc i tng phi ci t giao tip Remote
o Tham tr: cc i tng phi ci t giao tip Serialization

Tham chiu t i tng ch n i tng trn trnh khch: tham chiu ngc

(trnh ch c th ch ng gi v iu khin trnh khch)

Java Simplified / Session 22 / 93 93


of 45

You might also like