BÁO CÁO ĐỀ TÀI CORBA

Embed Size (px)

Citation preview

Hc Vin Cng Ngh Bu Chnh Vin Thng C s Thnh ph H Ch Minh

Xy dng h thng kim tra kt qu x s bng Java Corba Middleware

Ging vin Sinh vin Lp MSSV

: TS. Tn Hnh : Trn Tun V : D07THM1 : 407170078

Bo co ti mn H Thng Phn Tn Java Corba Middleware

Chng I : TM TT V GII THIUI. Tm tt: Nu bn l mt lp trnh vin, bn s hiu c cng vic nng nhc khi phi vit m lnh cho chng trnh. Cch thit k chng trnh theo m hnh th tc ( topdown procedural hay th tc trn-xung) dn dn c thay th bng m hnh hng i tng khoa hc v hiu qu hn. Lp trnh hng i tng chng minh tnh ng n v sc mnh ca n trong vic thit k cc h thng ln cng nh d dng trong vic nng cp v bo tr m lnh. Ngy nay, hu nh mi ngn ng lp trnh u h tr v thm nhun t tng i tng. M u l Smalltalk, C++, Object Pascal, Delphi, Visual Basic tip n l cc h qun tr c s d liu Visual Foxpro, Access, SQLserver, Oracle v nh bn thy Java l ngn ng ra i sau nhng li thun i tng nht. Trong Java mi th, mi ni, mi khi nim u qui v i tng. Tuy nhin li ny sinh mt bt ng ln gia cc ngn ng lp trnh. l cc i tng thit k bng ngn ng no th sau khi bin dch ra m nh phn (binary) ch c m lnh tng ng ca ngn ng mi c kh nng truy xut c i tng. i tng vit bng C++ khng d dng truy xut c t m lnh Delphi hay Visual Basic mt cch t nhin. Ngay c i tng vit bng Java cng kh lng gi c t cc ngn ng lp trnh khc (mc d c mt s k thut nh s dng th vin lin kt ng DLL, gi cc hm th vin native nhng khng phi l gii php ton vn). Java ra i vi mong mun cc ng dng hay i tng vit bng Java c th chy c mi lc mi ni trn mi h iu hnh (v cho n nay c th ni Sun Microsystem hu nh thc hin c mong c ca mnh vi s ni ting ca Java). Tuy nhin, Java khng th thay th cc ngn ng lp trnh khc c. Khng th bt mi lp trnh vin trn th gii u chuyn sang vit Java trong khi c hng trm triu dng m lnh ca chng trnh cng nh th vin c thit k v xy dng t cc ngn ng tin bi khc (in hnh l C/C++ hay Pascal) ang hot ng rt hiu qu. Tuy nhin cc nh lp trnh lun mong mun tm c ting ni chung cho tt c cc ngn ng lp trnh hin c. V th l Corba ra i. Corba c coi nh l quc t ng trong gii ngn ng lp trnh.

2

Bo co ti mn H Thng Phn Tn Java Corba Middleware

II. Gii thiu: Chun CORBA do t chc OMG (Object Management Group) qun l v pht trin. y l hip hi ln nht ca cc nh pht trin, sn xut v ng dng phn mm trn th gii, hin nay c gn 1.000 thnh vin. Chun CORBA a ra mt kin trc i tng phn tn cng vi cc c t ng dng cho nhiu lnh vc khc nhau, nhiu nn khc nhau v nhiu ngn ng lp trnh khc nhau. V tnh trung lp ca n, CORBA c h tr rt rng ri, c bit trong cc h thng thng tin thng mi, phn mm giao dch kinh doanh v dch v vin thng. Tuy nhin, cng do tnh c lp ca n dn n nhiu l do m CORBA khng thc s mnh cc h thng ng qui m va v nh. CORBA (Common Object Request Broker Architecture) (tm dch l Kin trc mi gii gi cc i tng thng dng) l mt kin trc chun cho cc h i tng phn tn. N cho php mt tp cc i tng hn hp, phn tn siu tng tc vi nhau. l mt chun ht sc quan trng ra nhm cho php thc hin kin trc "client sever" theo phng php tip cn hng s vt, trn nhng h thng my khc nhau v phn tn, cho php nhiu nhm sn xut phn mm khc nhau cng cng tc. Chun CORBA khi u ch c quan nim vi cc phn mm 'c nh' v hot ng phn tn trong mt mng cc b. Chun ny va ra i th cng cng lc xut hin ngn ng Java v cng ngh tc t, cho php mi khi cn dng th bn thn trm phc v thng qua mng np xung vo my khch nhng tc t Client, do vic chun ho giao din "client-sever" mc ng dng tr nn n gin hn. Thm na, vi s bng n Internet th m rng CORBA x l phn tn mng tm rng qua Internet tr thnh quan trng, v khi phi kt hp CORBA vi ngn ng giao din XML ca Internet, XML ang c trin khai m rng HTML m chng ta quen thuc, v ci o HTML qu cht.

3

Bo co ti mn H Thng Phn Tn Java Corba Middleware

Hnh 1: Cu trc m hnh Corba Hnh trn minh ha cu trc m hnh CORBA, trong b phn tru tng trung gian mang tn Object Request Broker (ORB) gi vai tr quan trng nht (broker). ORB cho php khch hng (client) s dng dch v ca i tng phc v (server) m khng cn bit c th dng thc hin, nn trin khai v v tr ci t ca i tng phc v. Kin trc y c thc hin theo cc mu thit k trnh by trong phn trc. u nhc im ca CORBA l cc lp trnh vin c th chn bt k ngn ng, nn tng phn cng, giao tip mng v cc cng ngh pht trin m vn tha mn cc tnh cht ca CORBA. Tuy nhin, CORBA c mt s nhc im l: n l ngn ng lp trnh bc thp, rt phc tp, kh hc, v cn mt i ng pht trin c kinh nghim. Ngoi ra cc i tng CORBA cng kh ti s dng.

4

Bo co ti mn H Thng Phn Tn Java Corba Middleware

Chng II : CORBAI. Mc tiu, c trng thit k ca CORBA 1.

Cc mc tiu ca CORBA: Khi xy dng kin trc Corba, cc nh thit k mong p ng c mt s nhng c im sau: Kh nng c lp v: - Nn phn cng (hardware platform). - Ngn ng lp trnh. - H iu hnh. - Mi gii yu cu i tng c th. - Th bc ca phn tn i tng. Tnh trong sut trong lin kt ca Corba: - nh v i tng trong sut. - Cho php cc i tng to ra cc li triu gi v nhn kt qu tr li mt cch trong sut. - Tng tc vi cc i tng t xa ging nh i tng cc b: + Gia cc host khc nhau. + Cc mi trng phn tn khng ng b. - Corba s dng c ch mi gii yu cu i tng ORB nh v cc i tng. Corba kin trc m: Ti sao? - IDL Ngn ng nh ngha giao din ht nhn ngn ng trong CORBA. - nh ngha giao din IDL c cc ngn ng pht trin ng dng nh C++, Java, s dng triu gi cc i tng t xa nh ngn ng, nn platform v trong sut trong nh v i tng. ( Cc ngn ng t xa c th khng c ci t ngn ng ging nh cc i tng cc b). Tnh ng nht: Cc i tng ca Corba c tnh ng nht: - Server Corba c th cha nhiu giao din vi nhiu trng hp.- Tham chiu i tng xc nh mt trng hp c th.

Tham chiu i tng Corba c th thc hin lin tc:

5

Bo co ti mn H Thng Phn Tn Java Corba Middleware

- Mt s i tng Corba ch tn ti nht thi v ch c s dng bi mt Client. - Mt s i tng Corba c th c chia s v tn ti lu di theo quy trnh nghip v v chnh sch c quyt nh khi ng gi destroy i tng. Cc i tng ca Corba c th nh v (cp pht) li: - Tham chiu i tng khng quan tm n v tr ca i tng. - i tng Corba c th c nh v li bi Amid hoc chy li chng trnh. - Thc thi Corba c th h tr giao dch c nh v li. Corba h tr cc i tng phc hi, sao chp li khi cng tham chiu i tng ging nhau trn cc vng nh khc nhau. c trng thit k ca CORBA:IDL-interface

2.

Object

CORBA lm vic vi giao din: - Tt c cc i tng Client ch c th truy cp i tng CORBA thng qua giao din. - S phn chia gia cc Interface v cc implementation cho php to ra a cc thc thi implementations cho mt giao din. c trng Server CORBA: - Khi ni n server ta phi rng ang ni n quy trnh trn server ch khng phi my server. - Mt hoc nhiu qu trnh server CORBA c th chy trn cng mt my. - Mi qu trnh server CORBA cha mt hoc nhiu trng hp v i tng CORBA, mt hoc nhiu giao din CORBA.

6

Bo co ti mn H Thng Phn Tn Java Corba Middleware

Process A

Process B

Process C

Machine X

Machine Y

i tng Corba c th nh v n cc qu trnh, trong qu trnh khc nhau trn cng mt my hoc cc qu trnh khc nhau trn nhng my khc nhau.II. Kin trc CORBA:

M hnh kin trc CORBA CORBA cn c gi l ngn ng c t giao tip (IDL Interface Description Language). M t chc nng ca i tng thng qua hm, phng thc, thuc tnh Khng cha bt k ci t m lnh no. c t i tng da trn khi nim interface trong Java. Trong kin trc chung Corba th ORB (Object Request Broker) l thnh phn trng tm v ht nhn. ORB c coi l highway ( xa l hay cn gi l bng thng) thc thi tt c cc vn truyn thng ca CORBA. Khi mt ng dng Client mun s dng dch v do Server cung cp cn:7

Bo co ti mn H Thng Phn Tn Java Corba Middleware

-

Th nht: thc hin c tham chiu n i tng trn Server cung cp. Th hai: x l cc yu cu tham chiu i tng, cho php cc thnh phn ng dng kt ni ln nhau. Ni chung nhim v ca ORB l: Sp xp th t d liu. Qun l nh v i tng. Truyn ti yu cu n i tng trn Server. Tr li kt qu cho Client.

-

8

Bo co ti mn H Thng Phn Tn Java Corba Middleware

Hnh trn biu din mt yu cu. Mt client gi mt tham chiu i tng n mt i tng phn tn. Tham chiu i tng c nh kiu bi mt giao tip. Trong hnh di th tham chiu i tng c nh kiu bi giao tip Rabbit. Object Request Broker (ORB), a yu cu n i tng v tr v mt s kt qu cho client. Trong hnh yu cu jump tr v mt tham chiu i tng c nh kiu bi giao tip AnotherObject.

III.

IDL(Interface definition language - Ngn ng nh ngha giao din). S lc v IDL : + IDL(Interface Definition Language) l ngn ng c t interface. IDL khng c lnh, ch c cc m t hm, kiu d liu, cc khai bo c t i tng. CORBA dng IDL c th ci t client/server bng cc ngn ng khc nhau c h tr CORBA nh l C, C++, COBOL, Ada, Java. Mi ngn ng h tr CORBA u c trnh chuyn i IDL sang ngn ng . + CORBA dng IDL vit Interface, sau dng cc trnh bin dch dch sang ngn ng c th, ng thi to lp stub, skel v mt s lp h tr CORBA. Chng ta s xem xt mt v d s dng CORBA. u tin chng ta nh ngha IDL cho i tng t xa:interface ExampleCORBA { attribute string s; };

1.

By gi chng ta c th bin dch IDL dng lnh idlj. Tham s -fall pht sinh m c 2 pha my client v serveridlj -fall ExampleCORBA.idl

9

Bo co ti mn H Thng Phn Tn Java Corba Middleware

Sau khi bin dch IDL, s pht sinh mt s tp tin sau: -

ExampleCORBAStub.java l m stub. ExampleCORBA.java l giao din t xa.. ExampleCORBAHolder.java l m h tr. ExampleCORBAHelper.java l m h tr. ExampleCORBAOperations.java l m h tr. ExampleCORBAPOA.java l m skeleton v l lp cha chng ta tha k khi ci t m bn pha my ch.

-

Mt v d khc v IDL: c t i tng Calculator bng ngn ng IDL ca CORBA To file Calculator.idlinterface Calculator { long addNumber ( in long x, in long y ); };

chuyn file c t ny sang cc ngn ng lp trnh khc chng ta c th dng nh sau:idl2cpp Calculator.idl // chuyn sang C++ idlj Calculator.idl // chuyn sang java

Kt qu l chng ta c c tp tin CalculatorOperations.java nh sau:public interface CalculatorOperations { int addNumber(int x, int y); } // interface CalculatorOperations

Bc ci t hm addNumber() l do lp trnh vin thc hin. CORBA ch gip triu gi hm addNumber() t i tng CalculatorOperations.

10

Bo co ti mn H Thng Phn Tn Java Corba Middleware

2.

nh x gia ngn ng IDL v Java (IDL mapping to Java)

Di y l tp cc nh x ca ngn ng IDL trong CORBA tng ng vi cc kiu d liu v t kho c trong Java. IDL CORBA Module Interface Constant Boolean Char, wchar Octet String, wstring Short, unsigned short Long, unsigned long Long long, unsigned long long Float Double Enum, struct, union Sequence, array Exception Operation JAVA Package Interface, helper class, holder class Public static final Boolean Char Byte Java.lang.string Short Int Long Float Double Class Array Class method

Nhn xt: Ngn ng c t trong m hnh CORBA gn ging vi ngn ng C. CORBA a ra t kha in cho cc bin truyn vo theo tr v t kha out ly tr tr v.

Sau y l mt v d nh x gia CORBA v Java:

11

Bo co ti mn H Thng Phn Tn Java Corba Middleware

CORBA IDL Module { interface Mathlibrary { long add ( in long x, in long y ); long subtract ( in long x; in long y ); long divide ( in long x, in long y ); long multiple ( in long x, in long y ); string About ( in string version ); }; }

JAVA Package Math; Public interfaces MathLibrary { Int add ( int x, Int y ); Int subtract ( int x, Int y ); Int divide ( int x, Int y ); Int multiple( int x, Int y ); string About ( string version );

3.

Cc khi nim c bn: - Tn tp: *.IDL - Dn hng bin dch ging nh C++: #include, #define, #ifdef #endif - Ch thch ging C++: /**/ v //- Tn (identifier): tn bt u bng ch thng thng, tuy nhin khi c nh

ngha th phi dng thng nht. - T kha l nhng ch thng.

Modules

12

Bo co ti mn H Thng Phn Tn Java Corba Middleware

- Module l mt khi c tn cho php nhm cc tn li trong cng mt khng

gian tn ( tng t nh namespace trong C++): module Mymodule { // cc nh ngha IDL // hoc cc module con }; - Cc module c th c m li (trong cng mt tp hoc trong tp khc) - Phm vi ca cc tn ging nh trong cp phn cp cc module. - Mt tn c th c nh ngha li trong cc module con. - Tn c th c truy nhp t bn ngoi thng qua ton t :: nh trong C++

Cc kiu d liu c bnBng sau y miu t chi tit cc c im ca cc kiu d liu c s: Type Short Long Unsigned short Unsigned long Float Double Octet Char Wchar String Wstring Boolean Cc dch v trong Corba: + Naming Service: L dch v cho php truy xut n cc i tng phn b thng qua tn v c nh ngha trong CosNaming.idl13

values -3278+3278 -211+211-1 065535 0212-1 IEEE single IEEE double 0255 ISO-latinh International format ISO latinh International format True or false

Size (en bits) 16 bits c du 32 bt c du 16 bt khng du 32 bt khng du 32 bt 64 bt 8 bt 8 bt

Variable Variable Khng xc nh

IV.

Bo co ti mn H Thng Phn Tn Java Corba Middleware

Gm c 2 interface ch yu l NamingComponent v NamingContext, c lu tr theo kin trc cy phn cp. + NamingComponent:l thnh phn cha tn (tn nhn hoc tn tp tin) v c th rng buc tn vi mt i tng corba bt k. + NamingContext: L i tng dng tham chiu n mt NamingComponent hay mt NamingContext khc, ging nh th mc trong h thng file, NamingContext t tn da vo NamingComponent. Cc hm c bn trong to NamingComponent v NamingContext: Hm to NamingContext: new_context() New_bind_context(NameComponent[] path) Hy NamingContext: Destroy() Ly v i tng NamingContext: resolve_initial_references(ObjectId id) Resolve(NameComponent[] path) To mt bind Bind(NameComponent[] path, Object obj) Bind_context(NameComponent[] path, NameContext nc) Rebind(NameComponent[] path, Object obj) Hy mt bind Unbind(NameComponent[] path) Lit k cc binding trong mt context List(NameContext nc, BindingList bl, BindingIterator bt)

14

Bo co ti mn H Thng Phn Tn Java Corba Middleware

Chng III: CORBA V CNG NGH PHN TNI. Tng quan v h phn tn: H phn tn trong cc chc nng v d liu c phn tn trn nhiu trm, c kt ni vi nhau thng qua mt mng my tnh. Hoc c th ni: H phn tn bao gm tp cc my tnh t tr c ni vi nhau bi mng my tnh v cc thit b c ci t phn mm c thit k cung cp mt mi trng tch hp v nht qun (phn mm ca h phn tn).

Kin trc c bn ca h phn tn. H phn tn cho php con ngi c th hp tc, phi hp cc hot ng mt cch mm do v hiu qu. Mc tiu chnh ca h phn tn c th c th hin thng qua: chia s ti nguyn( resource sharing), tnh m (openness), tnh ng thi(concurency), kh nng m rng (scalability),tnh chu li (faul-tolerance), tnh trong sut (transparency) Chia s ti nguyn: trong h phn tn, phn cng, phn mm, d liu c th c chia s d dng gia nhiu ngi s dng. Ti nguyn c thit k tp trung hoc phn tn; tng tc theo kin trc client-server. Ti nguyn c t chc thnh cc i tng v oc nh danh duy nht trong h thng. Mt s u im ca h phn tn:

15

Bo co ti mn H Thng Phn Tn Java Corba Middleware

1.Tnh m. Kh nng b sung, m rng phn cng, cc chc nng mi khng nh hng ti cc phn khc trong h thng c. 2.Tnh tng tranh. Nhiu tnh trnh cng tn ti trn mt my tnh n gi l tnh tng tranh. mt h phn tn rt d xy ra x l song song l do: - Nhiu ngi s dng ng thi gi cc lnh, cng tng tc vi chng trnh ng dng. - Nhiu tin trnh chy trn server mi tin trnh x l mt yu cu. Cc truy cp, cp nht tng tranh phi c thng nht. 3.Kh nng m rng. Kh nng m rng quy m h thng mt cch d dng m phi thay i h thng c mt cch t nht. y l c tnh quan trng trong qu trnh pht trin nhanh ca mng interNetwork. 4.Tnh chu li. Cc h thng i khi b li, li xy ra c th do phn cng hay phn mm dn n chng trnh c th chy sai hoc dng trc khi hon thnh yu cu. Tnh chu li cho php phn vn c th hot ng c khi xy ra cc li nh, tnh chu li lun i km vi phc hi d liu l yu cu phc hi d liu trong thi gian sm nht. Thit k h thng my tnh c kh nng chu li c hai cch tip cn: - Tng d tha ti nguyn: Gii php ny tng phng ca h thng khi xy ra li. - Gii php phn mm: Phm mm c kh nng sao lu mt cch thng xuyn, c kh nng pht hin li v sa li sm. H phn tn cung cp mc cao ca tnh thng trc trong kh nng chu li phn cng. Khi mt trm b hng ngi s dng c th di chuyn ti trm khc lm vic. 5.Tnh trong sut(Transparency) Kh nng che du s ri rc ca h thng. H thng ISO ch ra c 8 loi trong sut: - Trong sut li (Failure Transparency) - Trong sut v tr (Location transparency) - Trong sut truy cp (Access Transparency) - Trong sut s chia s ti nguyn (Concurency transparency) - Trong sut dnh v li ( Relocation transparency)16

Bo co ti mn H Thng Phn Tn Java Corba Middleware

- Trong sut nhn bn. (Replication Transparency) - Trong sut di tr. (Migration Transparency) - Trong sut kh nng di chuyn ti nguyn (Persistence Transparency) Nhc im ca h phn tn Tnh phc tp: H phn tn phc tp hn h tp trung Tnh bo mt: H phn tn d b tn cng t bn ngoi Kh nng qun l: H phn tn i hi h qun l hiu qu Khng d on trc: Khng th bit c nhng phn hi do t chc h thng v mng tr v. II. CORBA v m hnh phn tn: 1. Chng trnh mi gii trung gian ORB( Object Request Broker) Java da vo my o to nn ting ni chung gia tt c ng dng vit bng ngn ng Java. Tng t Corba cng cn c mt nn tng lin kt cc i tng. Cc i tng sau khi c xy dng bng nhng ngn ng lp trnh khc nhau mun triu gi c nhau phi thng qua trnh mi gii trung gian ca Corba gi l ORB (Object request broker : Trnh mi gii cc yu cu ca i tng). ORB l mt dch v phn tn thc thi yu cu n cc i tng xa. N nh v i tng xa trn mng, gi yu cu n i tng, ch kt qu v khi sn sng th gi cc kt qu ny tr li cho client. ORB thc thi v tr trong sut. Chnh xc l c ch yu cu ging nhau c s dng bi client v i tng CORBA m khng quan tm n v tr ca i tng. N c th nm trong mt b x l vi client, hoc bt k ni no. ORB thc thi cc ngn ng lp trnh c lp vi cc yu cu. Client a ra mt yu cu c vit bi mt ngn ng lp trnh c th khc vi ngn ng lp trnh vit trong i tng CORBA. ORB thc hin vic dch cn thit gia cc ngn ng lp trnh. Cc lin kt ngn ng c nh ngha cho tt c cc ngn ng lp trnh thng dng. Nh vy c th th ORB gi c phng thc ca cc i tng ci t bng cc ngn ng khc nhau nh th no? l nh ngn ng c t IDL m ta tm hiu trn. Cc i tng cho d c ci t bng bt k ngn ng no nu nh tun th theo c t IDL u c xem l i tng CORBA. Tuy khng ci t bn thn i tng nhng da vo c t IDL ORB s bit c tn phng thc cn gi, kiu i s truyn cho phng thc, tr tr v ca phng thc gi. Vi nhng thng tin ny, ORB c th triu gi phng thc m i tng ci t (Hnh 4). ORB l hon17

Bo co ti mn H Thng Phn Tn Java Corba Middleware

ton trong sut (transparent) vi lp trnh vin (hay ngi s dng i tng). Bn gi i tng ca Java trong C++ hay Delphi hon ton theo cch t nhin nh bn gi i tng c xy dng t chnh ngn ng gc.

Triu gi i tng CORBA thng qua trnh trung gian ORB. Kh nng trong sut khng ch gii hn gia cc i tng trn cng mt my m cn c m rng gia cc i tng nm bt k u trn th gii thng qua kt ni mng. i tng ca bn vit bng Java t trn mt my ti Vit Nam c th c gi bi mt i tng Chu M (bn kia i dng) ci t bng C++. Vi kh nng trn, CORBA qu l mang li iu k diu cho th gii lp trnh. CORBA m ca cc lp trnh vin c th xch li gn nhau hn, to nn mt th thng nht ca m hnh lp trnh hng i tng.

ORB giao tip vi i tng thng qua cc thng tin c t IDL. 2. C ch lm vic ca ORB: ORB cng dng khi nim lp trung gian _Stub v _Skel tng t nh cch lm vic ca cc i tng RMI. Tht s _Stub v _Skel l hai lp trung gian c sinh ra t trnh bin dch da vo c t IDL. Bn khng cn phi vit m lnh cho lp _Stub v _Skel. y l cng vic ca cc nh cung cp v thit k ORB. Hnh 6 l c th hot ng ca trnh mi gii ORB lin lc gia trnh khch v i tng CORBA trn18

Bo co ti mn H Thng Phn Tn Java Corba Middleware

my ch. Thng th vic ci t i tng CORBA trn my ch v triu gi i tng t trnh khch c thc hin nh sau: Phn ci t i tng CORBA trn my ch c t i tng X bng ngn ng IDL ca CORBA Chuyn c t X thnh m t ca mt ngn ng c th (chng hn dng trnh bin dch idlj.exe chuyn c t ca i tng X sang ngn ng Java). Da vo c t IDL yu cu trnh bin dch to ra lp trung gian _Skel. Ci t i tng X bng Java. Phn kt ni vi i tng t my khch S dng c t IDL ca i tng X yu cu trnh bin dch to ra lp trung gian _Stub. Tu theo ngn ng mun vit my khch m ta s dng trnh bin dch thch hp. V d nu bn mun vit trnh khch bng ngn ng C++ bn c th dng trnh bin dch idl2cpp.exe to ra lp _Stub dnh cho chng trnh C++ triu gi i tng CORBA. Khi trnh khch triu gi i tng ch, thc t li gi s c chuyn qua lp _Stub trn my khch, gi n trnh mi gii ORB. Trnh ORB trn my khch s kt ni vi trnh ORB trn my ch (theo giao thc IIOP). Trnh ORB trn my ch chuyn li gi cho lp trung gian _Skel trn my ch. Cui cng th i tng th i tng CORBA trn my ch s thc thi phng thc ca n.

Giao tip gia trnh khch v i tng CORBA trn my ch. 3. Giao thc IIOP

19

Bo co ti mn H Thng Phn Tn Java Corba Middleware

Giao tip gia ORB trn my khch v ORB trn my ch c xy dng da trn giao thc mang tn IIOP (Interoperate Internet Object Protocol). Giao thc ny do t chc Corba xng. N lm nn cho tt c cc i tng c th tr chuyn c vi nhau trn mng Internet mt cch d dng. Hin nay giao thc IIOP c dng kh ph bin thm ch cn vt tri hn c giao thc triu gi t xa RMI ca Java (Java gi giao thc RMI m cc my o c th dng tr chuyn c vi cc i tng xa l JRMP- Java Remote Method Protocol).

Truy cp Internet CORBA thng qua IIOP 4. Qu trnh pht trin ng dng c bn s dng Corba : Ci t cc interface (cc i tng trn server) da trn vic k tha b khung (skeleton) sinh ra bi b dch IDL. Vic pht trin ca pha client bt u da trn mt tham chiu (reference) n i tng. Vic gi cc method ca cc i tng t xa cng ging nh khi gi cc phng thc cc b. Thi gian gi ( tnh theo ms, 1000 ln chm hn khi gi cc b). Vic giao tip gia client v server s phi tnh n cc exception ( Cc exception ny phi c pha client chp nhn v x l).

Tuy nhin cng cn ch mt s im khi gi phng thc t xa : -

20

Bo co ti mn H Thng Phn Tn Java Corba Middleware

Qu trnh pht trin ng dng Corba.

21

Bo co ti mn H Thng Phn Tn Java Corba Middleware

CHNG IV: CI T CORBA V CHNG TRNH NG DNG LOTTERYCi t CORBA: + nh ngha giao din remote: dng ngn ng IDL vit giao din remote. + Bin dch giao din remote sang ngn ng mong mun: v d dng trnh bin dch idlj.exe bin dch giao din remote t IDL sang Java v sinh ra stub, skel cng vi m dng kt ni vi ORB + Ci t Server + Ci t Client + Thc thi ng dng V d: Gi s mun ci t i tng client bng Java, i tng server l Java - Vit interface bng ngn ng IDL (Idl_Inter.idl) - my client dng idlj.exe dch IDL Interface sang Java Interface, ng thi to lp Java-Stub (stub vit bng Java) idljava fclient Idl_Inter.idl (enter) - Vit lp client bng Java. - my server dng idlj.exe dch IDL Interface sang Java Interface, ng thi to lp Java-Skel idlj fserver Idl_Inter.idl (enter) - Vit lp to i tng remote v lp server bng Java.

I.

II.

Vit chng trnh d kt qu x s da trn cng ngh CORBA: Trong bi bo co s dng Microsoft SQL Server 2008 R2 v thng qua ODBC c tn l Lottery

22

Bo co ti mn H Thng Phn Tn Java Corba Middleware

To ODBC cho SQL Server C s d liu c lu vo bng nh sau:

Bng CSDL u tin mun chy chng trnh cn khi to trnh qun l mi gii i tng ORB:23

Bo co ti mn H Thng Phn Tn Java Corba Middleware

Khi to trnh trung gian ORB Chy chng trnh server:

Giao din chng trnh Server Chy chng trnh Client:

24

Bo co ti mn H Thng Phn Tn Java Corba Middleware

Giao din chng trnh Button Check: Kim tra kt qu xem s c trng thng hay khng Button exit: thot khi chng trnh.1. nh ngha IDL cho i tng t xa:

module Lottery{ interface Lottery{ string Check (String number, long time); }; }; By gi chng ta c th bin dch IDL dng lnh idlj. Tham s -fall pht sinh m c 2 pha my khch v my ch idlj -fall CurrencyConverter.idl Sau khi bin dch IDL, s pht sinh mt s tp tin sau:

_LotteryStub.java l m stub. Lottery.java l giao din t xa..25

Bo co ti mn H Thng Phn Tn Java Corba Middleware

LotteryHolder.java l m h tr. LotteryHelper.java l m h tr. LotteryOperations.java l m h tr. LotteryPOA.java l m skeleton v l lp cha chng ta tha k khi ci t m bn pha my ch.2. Vit i tng gi t xa

Tip n chng ta s ci t lp bn pha my ch c gi l Servant v tha k t lp gc pht sinh khi dch IDL: public class LotteryImpl extends LotteryPOA { //Tha k lp LotteryPOA l lp cung cp cc chc nng cho //i tng CORBA private ORB orb; public void setORB(ORB orb) { this.orb = orb; } public String check(String number, long time) { String result = ""; result = DatabaseModel.check(number, time); if (result.equals("")) { result = "1"; } else { result = "0;" + result; } return result; } }

3. Chng trnh bn pha my ch (Server)

Tip n chng ta ci t m bn pha my ch, thc hin vic khi to i tng v ng k my ch tn: public class LotteryServer { public static void main(String args[]) { try { // Khi to trnh trung gian ORB ORB orb = ORB.init(args, null);26

Bo co ti mn H Thng Phn Tn Java Corba Middleware

// Khi to trnh qun l POA l trnh h tr cho CORBA POA rootpoa = POAHelper.narrow(orb.resolve_initial_references("RootPOA")); rootpoa.the_POAManager().activate(); // To i tng gi t xa impl LotteryImpl impl = new LotteryImpl(); impl.setORB(orb); // Ly tham chiu i tng gi t xa impl org.omg.CORBA.Object ref = rootpoa.servant_to_reference(impl); Lottery href = LotteryHelper.narrow(ref); // Ly tham chiu n dch v qun l tn orbd org.omg.CORBA.Object objRef = orb.resolve_initial_references("NameService"); // Use NamingContextExt which is part of the Interoperable // Naming Service (INS) specification. NamingContextExt ncRef = NamingContextExtHelper.narrow(objRef); // ng k vi i tng impl vi dch v qun l tn, tn ng k l // Lottery String name = "Lottery"; NameComponent path[] = ncRef.to_name(name); ncRef.rebind(path, href); System.out.println("LotteryServer ready and waiting ..."); // c gi t Client orb.run(); } catch (Exception e) { System.err.println("ERROR: " + e); e.printStackTrace(System.out); } System.out.println("LotteryServer Exiting ..."); } }

27

Bo co ti mn H Thng Phn Tn Java Corba Middleware

4. Chng trnh bn pha my khch (Client)

Cui cng chng ta to ra mt chng trnh bn pha my khch thc hin li gi phng thc t xa: Thit k chng trnh giao din cho client tha k t javax.swing.JFrame

Thit k giao din public class Frame extends javax.swing.JFrame { Lottery lotteryServer; public Lottery getLotteryServer() { return lotteryServer; } public void setLotteryServer(Lottery lotteryServer) { this.lotteryServer = lotteryServer; } public Frame() { initComponents(); } private void jbtExitActionPerformed(java.awt.event.ActionEvent evt) { System.exit(0); // X l Button exit

28

Bo co ti mn H Thng Phn Tn Java Corba Middleware

} private void jbtCheckActionPerformed(java.awt.event.ActionEvent evt) // X l button Check { try { Date date = dMyFormat.parse(jtfDate.getText()); Integer.parseInt(jtfNumber.getText()); String result = lotteryServer.check(jtfNumber.getText(), date.getTime()); String args[] = result.split(";"); if (args[0].equals("0")) { if (args[1].equals("0")) { jlbStatus.setText("V ca bn khng trng gii"); } else if (args[1].equals("*")) { jlbStatus.setText("V ca bn trng gii c bit"); } else { jlbStatus.setText("V ca bn trng gii " + args[1]); } } else { jlbStatus.setText("C li, xin th li"); } } catch (Exception e) { jlbStatus.setText("Cc thng s nhp khng ng"); } }5. To class DatabaseModel kt ni n CSDL v thc hin cc cu truy

vn CSDL. public class DatabaseModel { private static Connection connect() throws Exception { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); DriverManager.getDriver("jdbc:odbc:Lottery"); return DriverManager.getConnection("jdbc:odbc:Lottery"); } public static String check(String number, long date) {

29

Bo co ti mn H Thng Phn Tn Java Corba Middleware

String result = "0"; Connection con = null; try { con = connect(); StringBuilder queryBuf = new StringBuilder(); queryBuf.append("select * from Result where dDate = ? and "); queryBuf.append(" (vNumber = ? or vNumber = ? or vNumber = ? or vNumber = ?)"); PreparedStatement pstmt = con.prepareStatement(queryBuf.toString()); int index = 0; pstmt.setTimestamp(++index, new Timestamp(date)); pstmt.setString(++index, number.substring(3, number.length())); pstmt.setString(++index, number.substring(2, number.length())); pstmt.setString(++index, number.substring(1, number.length())); pstmt.setString(++index, number); ResultSet rs = pstmt.executeQuery(); if (rs.next()) { result = rs.getString(3); } rs.close(); pstmt.close(); } catch (Exception e) { e.printStackTrace(); } finally { try { con.close(); } catch (SQLException ex) { } } return result; }

30