http://www.ebook.edu.vn 159
Chương 8
Phân tán đối tượng trong Java bng RMI
1. Tng quan
RMI là mt cơ chế cho phép mt đối tượng đang chy trên mt máy o Java này (
Java Virtual Machine) gi các phương thc ca mt đối tượng đang tn ti trên mt máy
o Java khác (JVM).
Thc cht RMI là mt cơ chế gi phương thc t xa đã được thc hin và tích hp
trong ngôn ng Java. Vì Java là mt ngôn ng lp trình hướng đối tượng, nên phương
pháp lp trình trong RMI là phương pháp hướng đối tượng do đó các thao tác hay các li
gi phương thc đều liên quan đến đối tượng. Ngoài ra, RMI còn cho phép mt Client có
th gi ti mt đối tượng đến cho Server x lý, và đối tượng này cũng có th được xem
là tham s cho li gi hàm t xa, đối tượng này cũng có nhng d liu bên trong và các
hành vi như mt đối tượng thc s.
So sánh gi gi phương thc t xa vi các li gi th tc t xa
Gi phương thc t xa không phi là mt khái nim mi. Thm chí trước khi ra đời
lp trình hướng đối tượng phn mm đã có th gi các hàm và các th tc t xa. Các h
thng như RPC đã được s dng trong nhiu năm và hin nay vn đưc s dng.
Trước hết, Java là mt ngôn ng độc lp vi nn và cho phép các ng dng Java
truyn tin vi các ng dng Java đang chy trên bt k phn cng và h điu hành nào
có h tr JVM. S khác bit chính gia hai mc tiêu là RPC h tr đa ngôn ng, ngược
li RMI ch h tr các ng dng được viết bng Java.
Ngoài vn đề v ngôn ng và h thng, có mt s s khác bit căn bn gia RPC
và RMI. Gi phương thc t xa làm vic vi các đối tượng, cho phép các phương thc
chp nhn và tr v các đối tượng Java cũng như các kiu d liu nguyên t (premitive
type). Ngược li gi th tc t xa không h tr khái nim đối tượng. Các thông đip gi
cho mt dch v RPC (Remote Procedure Calling) được biu din bi ngôn ng XDR
(External Data Representation): dng thc biu din d liu ngoài. Ch có các kiu d liu
có th được định nghĩa bi XDR mi có th truyn đi.
2. Mc đích ca RMI
H tr gi phương thc t xa trên các đối tượng trong các máy o khác nhau
H tr gi ngược phương thc ngược t server ti các applet
Tích hp mô hình đối tượng phân tán vào ngôn ng lp trình Java theo mt cách
t nhiên trong khi vn duy trì các ng cnh đối tượng ca ngôn ng lp trình Java
Làm cho s khác bit gia mô hình đối tượng phân tán và mô hình đối tượng cc
b không có s khác bit.
To ra các ng dng phân tán có độ tin cy mt cách d dàng
Duy trì s an toàn kiu được cung cp bi môi trường thi gian chy ca nn tng
Java
H tr các ng cnh tham chiếu khác nhau cho các đối tượng t xa
Duy trì môi trường an toàn ca Java bng các trình bo an và các trình np lp.
3. Mt s thut ng
Cũng như tt c các chương trình khác trong Java, chương trình RMI cũng đưc
xây dng bi các giao tiếp và lp. Giao tiếp định nghĩa các phương thc và các lp thc
thi các phương thc đó. Ngoài ra lp còn thc hin mt vài phương thc khác. Nhưng
ch có nhng phương thc khai báo trong giao tiếp tha kế t giao tiếp Remote hoc các
http://www.ebook.edu.vn 160
lp con ca nó mi được Client gi t JVM khác. Trong mc này ta nêu mt s thut ng
thường xuyên được s dng trong phn này:
Giao tiếp Remote: Mt giao tiếp khai báo các phương thc cho phép gi t xa.
Trong Java giao tiếp Remote có các đặc đim sau:
o Tha kế giao tiếp có sn: java.rmi.Remote.
o Mi phương thc trong giao tiếp Remote phi được khai báo để đưa ra
ngoi l RemoteException nh mnh đề throws java.rmi.RemoteException
và có th có các ngoi l khác.
Đối tượng Remote: mt đối tượng được to ra để cho phép nhng đối tượng khác
trên mt máy JVM khác gi ti nó.
Phương thc Remote: Đối tượng Remote cha mt s các phương thc, nhng
phương thc này có th được gi t xa bi các đối tượng trong JVM khác .
Hình 8.1
4. Các lp trung gian Stub và Skeleton
Trong k thut lp trình phân tán RMI, để các đối tượng trên các máy Java o
khác nhau có th truyn tin vi nhau thông qua các lp trung gian: Stub và Skeleton.
Vai trò ca lp trung gian: Lp trung gian tn ti c hai phía client (nơi gi
phương thc ca các đối tượng xa) và server (nơi đối tượng tht s được cài đặt
để thc thi mã lnh ca phương thc). Trong Java trình biên dch rmic.exe được s
dng để to ra lp trung gian này. Phía client lp trung gian này gi là Stub (lp móc),
phía server lp trung gian này gi là Skeleton(lp ni) chúng ging như các lp môi
gii giúp các lp xa truyn tin vi nhau.
5. Cơ chế hot động ca RMI
Các h thng RMI phc v cho vic truyn tin thường được chia thành hai loi:
client và server. Mt server cung cp dch v RMI, và client gi các phương thc trên đối
tượng ca dch vy.
Server RMI phi đăng ký vi mt dch v tra tìm và đăng ký tên. Dch v này cho
phép các client truy tìm chúng, hoc chúng có th tham chiếu ti dch v trong mt mô
hình khác. Mt chương trình đóng vai trò như vy có tên là rmiregistry, chương trình này
chy như mt tiến trình độc lp và cho phép các ng dng đăng ký dch v RMI hoc
nhn mt tham chiếu ti dch v được đặt tên. Mi khi server đựơc đăng ký, nó s ch
các yêu cu RMI t các client. Gn vi mi đăng ký dch v là mt tên được biu din
bng mt xâu ký t để cho phép các client la chn dch v thích hp. Nếu mt dch v
chuyn t server này sang mt server khác, client ch cn tra tìm trình đăng ký để tìm ra
v trí mi. Điu này làm cho h thng có kh năng dung th li-nếu mt dch v không kh
dng do mt máy b sp, người qun tr h thng có th to ra mt th hin mi ca dch
v trên mt h thng khác và đăng ký nó vi trình đăng ký RMI.
JVM JVM
Local Object
- Data
- Method
Remote Object
- Data
- Remote Method
http://www.ebook.edu.vn 161
Các client RMI s gi các thông đip RMI để gi mt phương thc trên mt đối
tượng t xa. Trước khi thc hin gi phương thc t xa, client phi nhn được mt tham
chiếu t xa. Tham chiếu này thường có được bng cách tra tìm mt dch v trong trình
đăng ký RMI. ng dng client yêu cu mt tên dch v c th, và nhn mt URL tr ti tài
nguyên t xa. Khuôn dng dưới đây được s dng để biu din mt tham chiếu đối
tượng t xa:
rmi://hostname:port/servicename
Trong đó hostname là tên ca máy ch hoc mt địa ch IP, port xác định dch v,
servicename là mt xâu ký t mô t dch v.
Mi khi có được mt tham chiếu, client có th tương tác vi dch v t xa. Các chi
tiết liên quan đến mng hoàn toàn được che du đối vi nhng người phát trin ng
dng-làm vic vi các đối tượng t xa đơn gin như làm vic vi các đối tượng cc b.
Điu này có thđược thông qua s phân chia h thng RMI thành hai thành phn,
stub và skeleton.
Đối tượng stub là mt đối tượng y quyn, truyn ti yêu cu đối tượng ti server
RMI. Cn nh rng mi dch v RMI được định nghĩa như là mt giao tiếp, ch không
phi là mt chương trình cài đặt, các ng dng client ging như các chương trình hướng
đối tượng khác. Tuy nhiên ngoài vic thc hin công vic ca chính nó, stub còn truyn
mt thông đip ti mt dch v RMI xa, ch đáp ng, và tr v đáp ng cho phương
thc gi. Người phát trin ng dng không cn quan tâm đến tài nguyên RMI nm đâu,
đang chy trên nn nào, nó đáp ng đầy đủ yêu cu như thế nào. Client RMI đơn gin
gi mt phương thc trên đối tượng y quyn, đối tượng này qun lý tt c các chi tiết cài
đặt.
Hình 8.2
Ti phía server, đối tượng skeleton có nhim v lng nghe các yêu cu RMI đến và
truyn các yêu cu này ti dch v RMI. Đối tượng skeleton không cung cp bn cài đặt
ca dch v RMI. Nó ch đóng vai trò như là chương trình nhn các yêu cu, và truyn các
yêu cu. Sau khi người phát trin to ra mt giao tiếp RMI, thì anh ta phi cung cp mt
phiên bn cài đặt c th ca giao tiếp. Đối tượng cài đặt này được gi là đối tượng
skeleton, đối tượng này gi phương thc tương ng và truyn các kết qu cho đối tượng
stub trong client RMI. Mô hình này làm cho vic lp trình tr nên đơn gin, vì skeleton
được tách bit vi cài đặt thc tế ca dch v. Tt c nhng gì mà người phát trin dch
v cn quan tâm là mã lnh khi to (để đăng ký dch v và chp nhn dch v), và cung
cp chương trình cài đặt ca giao tiếp dch v RMI.
Vi câu hi các thông đip được truyn như thế nào, câu tr li tương đối đơn
gin. Vic truyn tin din ra gia các đối tượng stub và skeleton bng cách s dng các
socket TCP. Mi khi được to ra, skeleton lng nghe các yêu cu đến được phát ra bi
các đối tượng stub. Các tham s trong h thng RMI không ch hn chế đối vi các kiu
d liu nguyên t-bt k đối tượng nào có kh năng tun t hóa đều có th được truyn
như mt tham s hoc được tr v t phương thc t xa. Khi mt stub truyn mt yêu
cu ti mt đối tượng skeleton, nó phi đóng gói các tham s (hoc là các kiu d liu
nguyên t, các đối tượng hoc c hai) để truyn đi, quá trình này được gi là marshalling.
Ti phía skeleton các tham s được khôi phc li để to nên các kiu d liu nguyên t
và các đối tượng, quá trình này còn được gi là unmarshaling. Để thc hin nhim v
http://www.ebook.edu.vn 162
này, các lp con ca các lp ObjectOutputStreamObjectInputStream được s dng
để đọc và ghi ni dung ca các đối tượng.
Hình 8.3
Sơ đồ gi phương thc ca các đối tượng xa thông qua lp trung gian được c
th hoá như sau:
Hình 8.4
Ta đối tượng C1 được cài đặt trên máy C. Trình biên dch rmic.exe s to ra
hai lp trung gian C1_Skel và C1_Stub. Lp C1_Stub s được đem v máy A. Khi
A1 trên máy A gi C1 nó s chuyn li gi đến lp C1_Stub, C1_Stub chu trách
nhim đóng gói tham s, chuyn vào không gian địa ch tương thích vi đối tượng
C1 sau đó gi phương thc tương ng.
Nếu có phương thc ca đối tượng C1 tr v s được lp C1_Skel đóng gói tr
ngược v cho C1_Stub chuyn giao kết qu cui cùng li cho A1. Nếu khi kết ni
mng gp s c thì lp trung gian Stub s thông báo li đến đối tượng A1. Theo
cơ chế này A1 luôn nghĩ rng nó đang hot động trc tiếp vi đối tượng C1 trên
máy cc b.
Trên thc tế, C1_Stub trên máy A ch làm lp trung gian chuyn đổi tham s
thc hin các giao thc mng, nó không phi là hình nh ca đối tượng C1. Để
JVM
Client
JVM
Server
Stub
Skeleton
Client
Object
Remote
Object
Computer B
Computer A
A1
A2
C1- stub
B1_stub
Computer C
C1Skel
C1
B1
B1Skel
http://www.ebook.edu.vn 163
làm được điu này, đói tượng C1 cn cung cp mt giao din tương ng vi các
phương thc cho phép đối tượng A1 gi nó trên máy A.
6. Kiến trúc RMI
S khác bit căn bn gia các đối tượng t xa và các đối tượng cc b là các đối
tượng t xa nm trên mt máy o khác. Thông thường, các tham s đối tượng được
truyn cho các phương thc và các giá tr đối tượng được tr v t các phương thc
thông qua cách truyn theo tham chiếu. Tuy nhiên cách này không làm vic khi các
phương thc gi và các phương thc được gi không cùng nm trên mt máy o.
Vì vy, có ba cơ chế khác nhau được s dng để truyn các tham s cho các
phương thc t xa và nhn các kết qu tr v t các phương thc xa. Các kiu nguyên
t (int, boolean, double,…) được truyn theo tham tr. Các tham chiếu ti các đối tượng t
xa được truyn dưới dng các tham chiếu cho phép tt c phía nhn gi các phương
thc trên các đối tượng t xa. Các đối tượng không thc thi giao tiếp t xa (nghĩa là các
đối tượng không thc thi giao tiếp Remote) được truyn theo tham tr; nghĩa là các bn
sao đầy đủ được truyn đi bng cách s dng cơ chế tun t hóa đối tung. Các đối
tượng không có kh năng tun t hóa thì không th được truyn đi ti các phương thc
xa. Các đối tượng xa chy trên server nhưng có th được gi bi các đối tượng đang
chy trên client. Các đối tượng không phi xa, các đối tượng kh tun t chy trên các
h thng client.
Để quá trình truyn tin là trong sut vi người lp trình, truyn tin gia client và
server được cài đặt theo mô hình phân tng như hình v dưới đây
Hình 8.5
Đối vi người lp trình, client dường như truyn tin trc tiếp vi server. Thc tế,
chương trình client ch truyn tin vi đối tượng stub là đối tượng y quyn ca đối tượng
thc s nm trên h thng t xa. Stub chuyn cuc đàm thoi cho tng tham chiếu, tng
này truyn tin trc tiếp vi tng giao vn. Tng giao vn trên client truyn d liu đi trên
mng máy tính ti tng giao vn bên phía server. Tng giao vn bên phía server truyn
tin vi tng tham chiếu, tng này truyn tin mt phn ca phn mm server được gi là
skeleton. Skeleton truyn tin vi chính server. Theo hướng khác t server đến client thì
lung truyn tin được đi theo chiu ngược li.
Cách tiếp cn có v phc tp nhưng ta không cn quan tâm đến vn đề này. Tt c
đều được che du đi, người lp trình ch quan tâm đến vic lp các chương trình có kh
năng gi phương thc t xa ging như đối vi chương trình cc b.
Trước khi có th gi mt phương thc trên mt đối tượng xa, ta cn mt tham
chiếu ti đối tượng đó. Để nhn được tham chiếu này, ta yêu cu mt trình đăng ký tên
rmiregistry cung cp tên ca tham chiếu. Trình đăng ký đóng vai trò như là mt DNS nh
cho các đối tượng t xa. Mt client kết ni vi trình đăng ký và cung cp cho nó mt URL
ca đối tượng t xa. Trình đăng ký cung cp mt tham chiếu ti đối tượng đó và client s
dng tham chiếu này để gi các phương thc trên server.
Trong thc tế, client ch gi các phương thc cc b trên trong stub. Stub là mt
đối tượng cc b thc thi các giao tiếp t xa ca các đối tượng t xa.
Đường logic
Chương trình Server
Skeleton
Tng tham chiếu t xa
Tng giao vn
Chương trình Client
Stub
Tng tham chiếu t xa
Tng giao vn
Network