Lập trình phân tán với java RMI - Pdf 62

Trang 222
Chng 10: LP TRÌNH PHÂN TÁN VI
JAVA RMI ( REMOTE METHOD INVOKE)
Lp trình phân tán vi RMI là mt trong nhng vn  nóng bng ca nn công
nghip phn mm ngày nay.  giúp các bn có các kin thc c bn v lp trình phân tán
và công ngh lp trình phân tán RMI. Chng này ta tho lun v các khía cnh ó.
Sau khi hc xong chng này ngi hc có th:
Hiu c khái nim v lp trình phân tán và công ngh RMI
ng dng công ngh RMI  xây dng các ng dng phân tán
Chuyn tham s cho phng thc triu gi t xa và nhn kt qu tr v t phng thc
triu gi t xa
I. RMI và lp trình phân tán i tng
Thông thng mã lnh ca mt chng trình khi thc thi c tp trung trên cùng
t máy, ây là cách lp trình truyn thng. S phát trin nh v bão ca mng máy tính
c bit là mng Internet toàn cu, ã khin các chng trình truyn thng này không còn
áp ng c yêu cu na. Các chng trình bây gi yêu cu phi có s hp tác x lý, tc
là mã lnh ca nó ã không tp trung trên mt máy mà c phân tán trên nhiu máy. Khi
t ng dng có mã lnh thc thi c phân tán trên nhiu máy thì chng trình ó c
i là chng trình phân tán và vic lp trình  to ra các chng trình này c gi là lp
trình phân tán. Có rt nhiu công ngh lp trình phân tán nh: DCOM, CORBA, RMI,
EJB.. trong ó RMI là công ngh thun Java và d lp trình nht.
Thông thng nu các i tng c tp trung trên cùng mt máy thì bn có th
triu gi các phng thc ca nó bng cách gu cho nó mt thông báo, câu hi t ra là
làm th nào  có th triu gi các phng thc ca mt i tng nm trên mt máy khác.
ây chính là ni dung ca lp trình phân tán mã lnh RMI (Remote Method Invoke – tm
ch là triu gi phng thc t xa). RMI là cách thc giao tip gia các i tng Java có
mã lnh cài t (bao gm c phng thc và thuc tính) nm trên các máy khác nhau có th
triu gi ln nhau.
Hình sau mô hình triu gi i tng phân tán. Trên máy A các i tng A1, A2
i các phng thc ca nhau c gi là triu gi phng thc cc b (local method
invoke) ây là cách lp trình hng i tng truyn thng vn s dng, tng t các i

Máy B
B1
B2
B3
Máy C
C
Hình 1: Mô hình triu gi các phng thc t xa
Trang 224
Trong hình trên bn có i tng C1 c cài t trên máy C. trình biên dch Java
giúp ta to ra hai lp trung gian C1_stub và C1_skel. Lp C1_stub c mang v máy A.
Khi A1 trên máy A triu gi phng thc ca i tng C1 nó s chuyn li gi phng
thc cho lp trung gian C1_stub. Lp trung gian C1_stub có trách nhim óng gói các tham
 chuyn tham s qua mng n phng thc c triu gi ca i tng C1. Trên máy
C lp trung gian C1_Skel có nhim v nhn các tham s và chuyn vào vùng a ch thích
p sau ó gi phng thc tng ng. Kt qu tr v (nu có) ca phng thc do C1 tr
 sc lp C1_Skel óng gói và chuyn ngc v cho trình khách. Trên máy khách lp
trung gian C1_Stub chuyn giao kt qu cui cùng li cho A1. Bng c ch này A1 luôn
ngh rng i tng C1 ang tn ti ngay trên cùng máy vi nó nh các i tng cc b
khác. Hn na nh có lp trung gian C1_Stub mà khi kt ni mng gp s c thì lp trung
gian stub s luôn bit cách thông báo li n i tng A1.
Thc t làm cách nào A1 tham chiu c n C1, mt khi không có i tng C1 c
cài t trên máy A? C1_Stub trên máy A ch thc hin vic chuyn tham s, nhn kt qu
tr v nu có và thc hin các giao thc mng, nó không phi là hình nh ca C1.  làm
c u này i tng C1 cn cung cp mt giao din tng ng vi các phng thc mà
các i tng trên máy khác có th triu gi. Chúng ta tip tc làm sáng tìêu này khi nói
 giao din t xa.
IV. Cài t i tng phân tán
1. Giao din t xa
Khi bn mun to ra mt s vt t xa thì bn che mt n cài t nn bng cách
truyn qua mt giao din. Vy khi khách thu c mt tham chiu n i tng t

}
Ví d 1-1: Sau ây là mt giao din t xa n gin ca ng dng HelloRMI
HelloRMI.java
import java.rmi.*;
public interface HelloRMI extends Remote{
public String sayHello() throws RemoteException;
}
Nhìn vào giao din này ta thy nó ging bt k giao din nào khác ngoi tr nó c
 rng t giao din Remote và tt c các phng thc trong giao din này u phi nem
ra ngoi l RemoteException, bn hãy nh rng tt c các phng thc c khai báo trong
giao din s tng là public, th nên trong giao din trên bn có th b t khoá public khi
khai báo phng thc sayHello.
Bn tin hành biên dch javac HelloRMI.java bn s thu c tp tin HelloRMI.class
2. Trin khai giao din t xa
Sau khi bn to ra giao din t xa, công vic tip theo mà bn cn phi làm là trin
khai tt c các phng thc trong giao din t xa.
Ví d 1-2: Sau ây là cài t ca giao din t xa HelloRMI
HelloRMIImpl.java
import java.rmi.*;
public class HelloRMIImpl implements HelloRMI {
public String sayHello() throws RemoteException
{
return "Hello RMI";
}
}
Vn t ra là làm th nào  cài t i tng HelloRMI lên mt máy (máy 2) và gi
phng thc sayHello() ca HelloRMI t máy khác (máy 1)? Nhã nêu  trên ta không
i c phng thc sayHello ca HelloRMI mt cách trc tip mà cn có thêm hai lp
trung gian là HelloRMIImpl_Stub và HelloRMIImpl_Skel. Da vào lp
Trang 226

}
}
}
Công vic u tiên bn phi làm khi cài t i tng t xa là to ra mt th hin
a i tng t xa.
HelloRMI h=new HelloRMIImpl(); bn có th thay bng dòng lnh
HelloRMIImpl h=new HelloRMIImpl();
Tip theo bn gi phng thc tnh exportObject ca lp UnicastRemoteObject  máy o
java bit i tng h (HelloRMI) là i tng có kh nng truy xut t xa.
UnicastRemoteObject.exportObject(h);
u ý  s dng c lp UnicastRemoteObject bn phi khai báo import
java.rmi.server.*; u chng trình


Nhờ tải bản gốc

Tài liệu, ebook tham khảo khác

Music ♫

Copyright: Tài liệu đại học © DMCA.com Protection Status