
SVTH: TrÇn H¶i Long-NguyÔn Quang TuÊn GVHD: NguyÕn TÊn Kh«i
Trang 3
C
Ch
h-
-
¬
¬n
ng
g
I
I
T
Tæ
æN
NG
G
Q
QU
UA
AN
N
V
VÒ
Ò
®
®Ò
Ò
T
Tµ
µI
I
LËp tr×nh ph©n t¸n lµ mét trong nh÷ng vÊn ®Ò nãng báng cña céng nghÖ
phÇn mÒm hiÖn nay.
Mét trong nh÷ng vÊn ®Ò ®- îc giíi lËp tr×nh quan t©m s©u s¾c trong lËp
tr×nh m¹ng nãi chung vµ lËp tr×nh c¬ së d÷ liÖu nãi riªng, trong ®ã cã mét
ph- ¬ng thøc kh¸ quan träng lµ RMI (Remote Method Invoke : t¹m dÞch lµ
ph- ¬ng thøc gäi tõ xa).
Th«ng th- êng mçi ch- ¬ng tr×nh chóng ta cã thÓ viÕt d- íi d¹ng thñ tôc
(Procedure) hay hµm (Function) mµ c¸c hµm hay thñ tôc nµy ®- îc n¹p th¼ng
vµo ký øc vµ thùc thi ngay trªn m¸y cô bé. §iÒu mµ c¸c lËp tr×nh viªn quan
t©m ë ®©y kh«ng ph¶i lµ c¸ch cµi ®Æt thñ tôc hay hµm mµ chÝnh lµ ®èi sè tr¶ vÒ
cña chóng lµ nh- thÕ nµo? C©u hái ®Æt ra ë ®©y lµ liÖu cã ph- ¬ng ph¸p nµo ®Ó
gäi c¸c hµm hay thñ tôc tõ mét m¸y bÊy kú nµo ®ã trong cïng m¹ng ®Ó sö
dông ngay trªn m¸y thùc thi ®- îc kh«ng? §©y chÝnh lµ néi dung chÝnh cña lËp
tr×nh m· lÖnh vµ còng lµ yÕu tè chÝnh trong lËp tr×nh ph©n t¸n ®èi t- îng b»ng
RMI. – mang ý nghÜa triÖu gäi ph- ¬ng thøc tõ xa lµ c¸ch giao tiÕp gi÷a c¸c ®ãi
t- îng Java cã m· lÖnh cµi ®Æt (bao gåm c¸c ph- ¬ng ph- ¬ng thøc, thuéc tÝnh vµ
kh«ng lo¹i trõ c¸c ph- ¬ng thøc gäi c¬ së d÷ liÖu) n»m trªn c¸c m¸y kh¸c nhau
cã thÓ triÖu gäi lÉn nhau.
RMI ®· rÊt thµnh c«ng trong viÖc t- ¬ng t¸c c¸c øng dông tõ giao diÖn
ng- êi dïng. Chóng ta cã thÓ ®Þnh nghÜa c¸c ph- ¬ng thøc mµ bao gåm sù t- ¬ng
t¸c giao diÖn ng- êi dïng vµ mét kh¸c hµng (Client) vµ sau ®ã t¹o c¸c t- ¬ng t¸c
kÕt nèi b»ng RMI.

SVTH: TrÇn H¶i Long-NguyÔn Quang TuÊn GVHD: NguyÕn TÊn Kh«i
Trang 4
* M« h×nh ph©n t¸n ®èi t- îng.
H×nh 1.1 cho ta m« h×nh triÖu gäi ®èi t- îng ph©n t¸n.
Theo thãi quen th«ng th- êng chóng ta ®· lËp tr×nh theo phong c¸ch gäi
qua l¹i gi÷a c¸c m«®un trªn m¸y côc bé. Víi RMI trong java ta cã thÓ thùc
hiÖn ph- ¬ng thøc gäi qua l¹i gi÷a c¸c m¸y kh¸c nh- biÔu diÔn trªn.
ViÖc gäi ph- ¬ng thøc tõ xa tho¹t nh×n cã vÏ ®¬n gi¶n nh- ng thùc tÕ l¹i
phøc t¹p h¬n nhiÒu ph- ¬ng ph¸p triÖu gäi côc bé.
* C¸c kü thuËt lËp tr×nh ph©n t¸n ®èi t- îng b»ng RMI.
Cã thÓ nãi RMI lµ mét m« h×nh kh¸ réng lín trong lËp tr×nh Java vµ sau
®©y lµ mét sè kü thuËt ®iÓn h×nh:
* Vai trß cña c¸c líp trung gian:
Nh- chóng ta ®· gÆp trong ph- ¬ng thøcgäi trªn m¸y côc bé lµ mét
ph- ¬ng ph¸p gäi trùc tiÕp nh- ng ®iÒu nµy kh«ng thÓ dïng trong m« h×nh nhiÒu
m¸y géi lÉn nhau nªn chóng ta ph¶i dïng qua c¸c líp trung gian: STUB,
SKEL.
- ChuyÓn tham sè trong c¸c lêi gäi ph- ¬ng thøc tõ xa.
- TuÇn tù hãa (Seriazable) ®èi t- îng.
- RMIregistry vµ c¸c ®¨ng ký ®èi t- îng.
- Dïng mét ®èi t- îng s¶n sinh nhiÒu ®èi t- îng.(Factory
Object)
Computer A
A2
A1
Computer C
C1
C3
C2
Computer B
A1
H×nh 1.1

SVTH: TrÇn H¶i Long-NguyÔn Quang TuÊn GVHD: NguyÕn TÊn Kh«i
Trang 5
- Kü thuËy gäi ®èi t- îng tõ xa b»ng ph- ¬ng thøc ®éng.
(Dynamic Method Invoke)
- Tù ®éng kÝch ho¹t ®èi t- îng tõ xa( Activation).
- Tr×nh måi n¹p tõ xa
- . . . vµ mét sè kü thuËt kh¸c.
T×m hiÓu vÒ c¬ së d÷ liÖu ph©n t¸n.

SVTH: TrÇn H¶i Long-NguyÔn Quang TuÊn GVHD: NguyÕn TÊn Kh«i
Trang 6
C
Ch
h-
-
¬
¬n
ng
g
I
II
I
C
C¬
¬
s
së
ë
l
lý
ý
t
th
hu
uy
yÕ
Õt
t
II.1. Giíi thiÖu
Java lµ mét ng«n ng÷ lËp tr×nh do c«ng ty Sun Microsystems ph¸t triÓn
vµo ®Çu thËp kû 1990. XuÊt ph¸t ®iÓm cña ng«n ng÷ nµy lµ mét dù ¸n nghiªn
cøu cña c«ng ty trong ®ã lóc ®Çu c¸c nhµ nghiªn cøu dïng C++. Ngay sau ®ã
nhãm nghiªn cøu ®· cho r»ng hä cÇn mét thø g× ®ã tèt h¬n thÕ. C¸c nhµ nghiªn
cøu nµy ®Òu lµ c¸c lËp tr×nh viªn xuÊt s¾c, do vËy hä ®· b¾t tay ngay vµo viÖc
x©y dùng mét ng«n ng÷ lËp tr×nh míi b»ng c¸ch tËn dông c¸c ý t- ëng hay cña
c¸c ng«n ng÷ lËp tr×nh kh¸c. Víi nh÷ng ®iÓm m¹nh nh- h- íng ®èi t- îng, tÝnh
kh¶ chuyÓn cao, kh«ng phô thuéc vµo m«i tr- êng xö lý (phÇn cøng m¸y tÝnh
vµ hÖ ®iÒu hµnh), cã kh¶ n¨ng biªn dÞch, hç trî c¸c th- viÖn cho lËp tr×nh c¸c
øng dông CSDL ph©n t¸n vµ Internet, dÔ truyÒn th«ng,... Java ®· vµ sÏ trë
thµnh mét ng«n ng÷ m¹nh trong hiÖn t¹i vµ t- ¬ng lai.
Java lµ mét ng«n ng÷ lËp tr×nh cßn kh¸ míi mÎ, nh- ng nã l¹i cã mét sè
®Æc ®iÓm kh¸ m¹nh vµ hç trî viÖc lËp tr×nh trªn Web tèt nªn còng ®· ®- îc
nhiÒu ng- êi lËp tr×nh sö dông. Java lµ mét NNLT h- íng ®èi t- îng, nã thõa
h- ëng kh¸ nhiÒu ®Æc tÝnh tõ C vµ C++ nªn viÖc häc nã sÏ kh«ng khã kh¨n g×
®èi víi nh÷ng ng- êi ®· lµm viÖc víi C/C++, thËm chÝ nã cßn ®¬n gi¶n h¬n.
Java ®- îc x©y dùng chñ yÕu trong bé c«ng cô ph¸t triÓn Java (Java
Developers Kit - JDK ) do Sun cung cÊp bao gåm mét sè ch- ¬ng tr×nh tiÖn Ých
cho phÐp b¹n biªn dÞch, b¾t lçi vµ t¹o tµi liÖu cho mét øng dông Java vµ c¸c
th- viÖn chuÈn cña nã. HiÖn nay trªn thÞ tr- êng ®ang cã rÊt nhiÒu m«i tr- êng
ph¸p triÓn Java cña h·ng thø ba rÊt tiÖn lîi (nh- Visual J++, Symantec Cafe,..),
nh- ng tÊt c¶ c¸c ch- ¬ng tr×nh nµy ®Òu dùa trªn nÒn JDK.
C¸c tr×nh tiÖn Ých cña JDK bao gåm:
javac : Bé biªn dÞch Java: Lµm nhiÖm vô chuyÓn m· nguån Java
sang bytecode.
java Bé th«ng dÞch Java: Thùc thi c¸c øng dông Java trùc tiÕp tõ tËp
tin líp (class).
appletviewer : Mét tr×nh th«ng dÞch Java thùc thi c¸c Java applet tõ
tËp tin HTML.

SVTH: TrÇn H¶i Long-NguyÔn Quang TuÊn GVHD: NguyÕn TÊn Kh«i
Trang 7
javadoc : T¹o tµi liÖu d¹ng HTML tõ m· nguån cïng víi c¸c chó
thÝch bªn trong.
jdb Java debuger: Cho phÐp b¹n thùc hiÖn tõng dßng trong ch- ¬ng
tr×nh, ®Æt c¸c ®iÓm dõng (breakpoint), xem gi¸ trÞ c¸c biÕn.
javah : T¹o ra tËp tin header cña C cho phÐp C gäi hµm Java hoÆc
ng- îc l¹i.
javap : Tr×nh dÞch ng- îc java (disassembler): HiÓn thÞ c¸c hµm vµ
d÷ liÖu truy cËp ®- îc bªn trong mét tËp tin líp ®· dÞch. Nã còng cho
phÐp hiÓn thÞ nghÜa cña bytecode.
Ngµy nay c¸c nhµ ph¸t triÓn phÇn mÒm ®· x©y dùng thªm rÊt nhiÒu nh¸nh
míi nh- JavaMail( Java Th- TÝn), JavaTAPI (Java ViÓn Th«ng), ....
II.2. C¸c §Æc §iÓm C¬ B¶n Cña Java
H- íng ®èi t- îng : LËp tr×nh h- íng ®èi t- îng (OOP) lµ ph- ¬ng
thøc viÕt c¸c øng dông dÔ b¶o tr×, dÔ n©ng cÊp vµ ®Æc biÖt lµ cã thÓ t¸i sö
dông c¸c m· lÖnh. Java lµ mét ng«n ng÷ h- íng ®èi t- îng, do ®ã nã cã ®Çy
®ñ c¸c ®Æc tÝnh trªn. Ngoµi ra, th- viÖn líp Java cung cÊp kh¸ ®Çy ®ñ cho
ng- êi lËp tr×nh ®Ó b¾t ®Çu mét dù ¸n míi.
Java cã kh¶ n¨ng ®a luång : C¸c øng dông viÕt b»ng Java cã thÓ
cã nhiÒu tiÕn tr×nh ®- îc xö lý cïng mét lóc. Mét øng dông ®¬n luång chØ
cã thÓ thùc hiÖn mét t¸c vô t¹i mét thêi ®iÓm: Gi¶ sö øng dông ®ang bËn
lÊy tõ trªn m¹ng xuèng mét tËp tin mÊt vµi phót, trong thêi gian nµy øng
dông kh«ng thÓ lµm c¸c viÖc kh¸c nh- vÏ l¹i mµn h×nh... Víi øng dông viÕt
b»ng Java, b¹n cã thÓ t¹o hai tiÕn tr×nh song song lµm viÖc: mét tiÕn tr×nh
n¹p tËp tin, mét tiÕn tr×nh kh¸c lµm nhiÖm vô cËp nhËt mµn h×nh.
Java cung cÊp kh¶ n¨ng lËp tr×nh trªn m¹ng : cung cÊp c¸c c«ng
cô còng cho phÐp thùc hiÖn c¸c phiªn kÕt nèi lµm viÖc dÔ rµng gi÷a c¸c
m¸y tÝnh trong m¹ng sö dông giao thøc TCP/IP. C¸c kÕt nèi nµy dùa trªn
cÆp gi¸ trÞ ®Þc chØ IP cña m¸y vµ ®Þa chØ cæng TCP cña dÞch vô (cÆp gi¸ trÞ
nµy gäi lµ mét socket). Cã hai chÕ ®é kÕt nèi chÝnh: Datagram vµ
Client/Server.

