Đề tài Tìm hiểu về corba

Tài liệu Đề tài Tìm hiểu về corba: TÌM HIỂU VỀ CORBA CHƯƠNG 1: TỔNG QUAN VỀ CORBA CORBA , viết tắt từ Common Object Request Broker Architecture, được xây dựng nhằm phát triển hệ thống hướng đối tượng rộng rãi. CORBA cho phép các ứng dụng giao tiếp nhau mà không cần biết vị trí và ai đã tạo ra. ORB là phần trung gian tạo khả năng cho các mối liên hệ giữa client/server thông qua những object. Bằng cách sử dụng ORB, client có thể gọi một phương pháp trên object server một cách thông suốt mà object đó có thể ở trên cùng một máy hay trên mạng máy tính. ORB chịu trách nhiệm tìm kiếm object mà có thể hiện thực các yêu cầu, truyền thông số, gọi phương pháp của nó và trả về kết quả. Client không cần phải biết vị trí của object, ngôn ngữ hiện thực, hệ điều hành hay bất kỳ khía cạnh hệ thống nào khác mà chúng không phải là thành phần của giao diện object. ORB, cũng với cách như thế, cung cấp khả năng...

doc286 trang | Chia sẻ: hunglv | Lượt xem: 1424 | Lượt tải: 1download
Bạn đang xem trước 20 trang mẫu tài liệu Đề tài Tìm hiểu về corba, để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
TÌM HIEÅU VEÀ CORBA CHÖÔNG 1: TOÅNG QUAN VEÀ CORBA CORBA , vieát taét töø Common Object Request Broker Architecture, ñöôïc xaây döïng nhaèm phaùt trieån heä thoáng höôùng ñoái töôïng roäng raõi. CORBA cho pheùp caùc öùng duïng giao tieáp nhau maø khoâng caàn bieát vò trí vaø ai ñaõ taïo ra. ORB laø phaàn trung gian taïo khaû naêng cho caùc moái lieân heä giöõa client/server thoâng qua nhöõng object. Baèng caùch söû duïng ORB, client coù theå goïi moät phöông phaùp treân object server moät caùch thoâng suoát maø object ñoù coù theå ôû treân cuøng moät maùy hay treân maïng maùy tính. ORB chòu traùch nhieäm tìm kieám object maø coù theå hieän thöïc caùc yeâu caàu, truyeàn thoâng soá, goïi phöông phaùp cuûa noù vaø traû veà keát quaû. Client khoâng caàn phaûi bieát vò trí cuûa object, ngoân ngöõ hieän thöïc, heä ñieàu haønh hay baát kyø khía caïnh heä thoáng naøo khaùc maø chuùng khoâng phaûi laø thaønh phaàn cuûa giao dieän object. ORB, cuõng vôùi caùch nhö theá, cung caáp khaû naêng noäi töông taùc giöõa caùc öùng duïng treân caùc maùy tính khaùc nhau trong vieãn caûnh cuûa moâi tröôøng phaân boá vaø nhieàu heä thoáng. Trong laõnh vöïc client/server cuï theå, nhöõng nhaø phaùt trieån duøng caùch thieát keá vaø chuaån rieâng cuûa mình ñeå taïo ra moät protocol duøng chung giöõa caùc thieát bò. Vôùi moät ORB, protocol ñöôïc ñònh nghóa vôùi nhöõng giao dieän öùng duïng thoâng qua vieäc ñaëc taû khoâng phuï thuoäc ngoân ngöõ hieän thöïc ñôn, IDL. ORB cho pheùp phaùt trieån hoaøn thieän nhöõng cô caáu ñaõ ñöôïc xaây döïng saün. Ñôn giaûn döïa vaøo neàn taûng CORBA , nhöõng nhaø phaùt trieån laäp moâ hình caáu truùc thöøa keá söû duïng cuøng moät loaïi IDL maø hoï duøng ñeå taïo ra object môùi, sau ñoù vieát ñoaïn maõ nhaèm dòch giöõa bus chuaån vaø giao dieän coù saün. I/ CORBA: Khaû naêng töông taùc (interoperability) cuûa caùc object: Trong CORBA, moät object cung caáp caùc dòch vuï maø caùc dòch vuï ñoù ñöôïc bieåu dieãn trong moät "contract"giöõa object vaø phaàn coøn laïi cuûa heä thoáng. Baûng "contract" ñoù nhaèm: + Cho caùc client khaû hieäu cuûa dòch vuï maø object cung caáp bieát baèng caùch naøo xaây döïng thoâng ñieäp ñeå goïi caùc dòch vuï. + Ñeå caáu truùc giao tieáp bieát daïng format taát caø caùc thoâng ñieäp maø object nhaän vaø gôûi. Moãi object caàn 1 handle duy nhaát maø client coù theå qua ñoù tìm ra thoâng ñieäp truyeàn cho noù. Chuùng ta khoâng goïi noù laø moät ñòa chæ-nhöõng object giöõ cuøng moät handle khi di chuyeån sang vò trí khaùc. Ta xeùt handle nhö loaïi ñòa chæ ñònh höôùng tröôùc töï ñoäng. Nhö vaäy, moâi tröôøng maïng tính toaùn cuûa chuùng ta laø: - Moãi nuùt laø moät object coù interface ñöôïc ñònh nghóa toát vaø ñöôïc ñònh danh bôûi moät handle duy nhaát. Thoâng ñieäp truyeàn taûi giöõa object nhaän vaø ñích; object ñích ñöôïc ñònh danh bôûi handle cuûa noù vaø daïng thoâng ñieäp ñöôïc ñònh nghóa trong interface maø interface naøy ñöôïc bieát ñeán heä thoáng. II/ OMA: (Object Management Architecture) CORBA chæ lieân keát caùc object nhöng khoâng lieân keát caùc öùng duïng. Muoán theá, OMG cung caáp ñieàu ñoù trong OMA _ phaûi döïa treân CORBA. Nhöõng object öùng duïng maëc duø khoâng ñöôïc chuaån hoùa bôûi OMG nhöng seõ truy xuaát caùc dòch vuï vaø coâng cuï cuûa CORBA thoâng qua nhöõng interface chuaån nhaèm cung caáp nhöõng lôïi ñieåm cho ngöôøi cung caáp vaø ngöôøi söû duïng cuoái cuøng maø khoâng caàn quan taâm ñeán nhöõng platform phía döôùi. Döïa treân kieán truùc CORBA, OMA ñaëc taû moät taäp nhöõng haøm vaø interface chuaån cho töøng cô caáu. Vieäc hieän thöïc interface vaø caùc chöùc naêng cuûa caùc nhaø cung caáp khaùc nhau öùng duïng leân maïng löôùi cuûa khaùch haøng nhaèm cho pheùp phaùt trieån theâm nhöõng tính naêng töø nhöõng module mua ñöôïc (hoaëc phaùt trieån theâm cho chính mình). CORBAservices cung caáp chöùc naêng cô baûn maø haàu nhö object naøo cuõng caàn: dòch vuï chu kyø soáng (lifecycle) cuûa object (nhö copy vaø xoùa), dòch vuï ñaët teân vaø thö muïc vaø nhöõng caùi cô baûn khaùc... Taïi vò trí maø CORBAservices cung caáp nhöõng dòch vuï cho object thì cuõng chính laø nôi CORBAfacilities cung caáp nhöõng dòch vuï cho caùc öùng duïng. Kieán truùc CORBAfacilities goàm hai phaàn horizontal vaø vertical. Nhö vaäy, OMA laø kieán truùc goàm 4 phaàn: + Cô caáu neàn taûng: ORB + nhöõng dòch vuï theâm ñöôïc duøng bôûi nhöõng nhaø phaùt trieån chuû yeáu nhaèm quaûn lyù nhöõng object phaân boá. + nhöõng dòch vuï ñöôïc söû duïng chung cho nhöõng öùng duïng khaùc nhau vaø, + nhöõng öùng duïng phaân boá cuûa chính chuùng. III/ Nhöõng lôïi ích cuûa CORBA: Cho nhöõng nhaø phaùt trieån: + CORBA laø moâi tröôøng duy nhaát cho pheùp chuùng ta taän duïng tieän lôïi nhöõng coâng cuï maø chuùng ta mua ñöôïc töø phaàn cöùng ñeán nhöõng phaàn meàm phaùt trieån. ( caàn moät kieán truùc ñeå coù theå thöïc thi treân taát caû caùc heä thoáng maïng vaø platform phaàn cöùng). + Moâ hình höôùng ñoái töôïng : taïo ñieàu kieän thuaän lôïi cho vieäc thöïc thi treân moâi tröôøng phaân boá ñoái töôïng + Cung caáp cho chuùng moät giao dieän IDL vaø taàng moûng cuûa ñoaïn maõ "wrapper"; vaø ñöôïc thöøa höôûng nhöõng öùng duïng keá thöøa trong moâi tröôøng CORBA. + CORBA taïo naêng suaát cao nhaát cho nhöõng nhaø laäp trình (CORBAservices vaø CORBfacilities). + Code ñöôïc taùi söû duïng baèng 2 caùch: duøng nhöõng öùng duïng taùi kieán thieát ñoäng hoaëc môùi; hoaëc boå sung theâm nhöõng thoâng tin treân nhöõng objects toàn taïi saün... Cho nhöõng ngöôøi söû duïng: moät öùng duïng CORBA/OMA laø moät taäp hôïp ñoäng caùc cô caáu hieän thöïc client vaø ñoái töôïng, ñöôïc laäp caáu hình vaø keát noái trong thôøi gian thöïc thi ñeå giaûi quyeát nhöõng vaán ñeà. Noùi chung laø phaûi toång hôïp nhöõng thaønh phaàn ôû caùc platform vaø OS khaùc nhau. IV/ OMG: (Object Managenent Group): Laø söï keát hôïp cuûa nhieàu coâng ty maùy tính coù lieân quan. Ñeå moät caùi chuaån ñöôïc söû duïng, chuaån ñoù phaûi toàn taïi nhö moät hieän thöïc traûi qua nhieàu giai ñoaïn phaùt trieån vaø nhu caàu chung => cô sôû hình thaønh OMG .... CHÖÔNG 2: TOÅNG QUAN VEÀ KYÕ THUAÄT Client Client Object Implementation IDL Stub IDL Skeleton Request Object Request Broker I/ CORBA vaø OMA: Request truyeàn töø Client ñeán object implementation trong kieán truùc cuûa CORBA: + CORBA ñoøi hoûi moïi giao dieän cuûa object ñöôïc ñaëc taû trong OMG IDL. Client chæ coù theå laáy ñöôïc giao dieän cuûa ñoái töôïng maø khoâng bao giôø thaáy ñöôïc chi tieát hieän thöïc naøo. + Moïi yeâu caàu cuûa ñoái töôïng CORBA ñöôïc truyeàn tôùi ORB: daïng cuûa yeâu caàu laø gioáng nhau duø object laø local hay "remote". Chi tieát veà söï phaân boá löu trong ORB nôi maø chuùng ñöôïc ñieàu khieån töø phaàn meàm maø ta mua, chöù khoâng phaûi töø phaàn meàm ta xaây döïng. Ñoaïn maõ öùng duïng taäp trung vaøo vaán ñeà caàn giaûi quyeát OMA ñònh nghóa caáu truùc chung naøy (hình). CORBAservices cung caáp nhöõng dòch vuï möùc heä thoáng naøy maø haàu heát heä thoáng höôùng ñoái töôïng ñeàu caàn; trong khi CORBAfacilities cho pheùp vieäc truy caäp döïa treân chuaån caùc döõ lieäu chung vaø chöùc naêng caàn thieát. II/ CORBA object: Moät object treân moâi tröôøng CORBA (3 phaàn quan troïng cuûa object laø : tính ñoùng kín, thöøa keá vaø ña hình). III/ OMG IDL: Trong CORBA, moät giao dieän ñöôïc ñònh nghóa trong OMG IDL. Vieäc ñònh nghóa giao dieän nhaèm ñaëc taû nhöõng taùc vuï maø object chuaån bò thöïc thi, caùc thoâng soá nhaäp xuaát maø caùc taùc vuï ñoù ñoøi hoûi, vaø baát kyø "exception" naøo phaùt sinh trong quaù trình xöû lyù. Ñoái vôùi ngöôøi söû duïng, interface (ñöôïc vieát trong OMG IDL) thöïc hieän lôøi höùa: Khi client gôûi moät thoâng ñieäp hoaøn haûo tôùi interface, ñaùp öùng seõ traû veà. Coøn ñoái vôùi nhöõng nhaø hieän thöïc ñoái töôïng, interface töôïng tröng cho nghóa vuï: ngöôøi ñoù phaûi hieän thöïc taát caû caùc taùc vuï ñöôïc ñaëc taû trong interface baèng moät ngoân ngöõ naøo ñoù. 1/ Xaây döïng object CORBA: Vieäc ñaàu tieân laø phaûi tìm hieåu chính xaùc ñoái töôïng ñoù seõ laøm gì vaø vì ñaây laø CORBA object neân vieäc keá tieáp laø ñònh nghóa interface cuûa noù trong OMG IDL. 2/ Thöïc hieän vieäc löïa choïn: Söï chuaån hoaù cho pheùp nhöõng söï löïa choïn quan troïng ( nhö ngoân ngöõ laäp trình duøng ñeå hieän thöïc, platform hoaëc heä ñieàu haønh maø noù thöïc thi, ORB keát noái, thöïc thi local hay remote,... ) ñöôïc dôøi laïi cho ñeán nhöõng phaàn sau cuûa quaù trình phaùt trieån. Trong CORBA taát caû nhöõng gì maø caùc nhaø phaùt trieån client caàn phaûi bieát laø söï ñònh nghóa IDL interface vaø taát caû nhöõng gì maø object seõ laøm. 3/ Choïn ngoân ngöõ hieän thöïc: Ta caàn xeùt hai vaán ñeà: tính thích hôïp vaø tính khaû thi Ngoân ngöõ laäp trình thích hôïp laø ngoân ngöõ ñaùp öùng ñöôïc nhöõng gì öùng duïng cuûa ta caàn, chæ söû duïng nguoàn taøi nguyeân maø chuùng ta saün coù, vaø ta vaø ñoäi nguõ laäp trình hôïp taùc coù theå hoïc hoaëc bieát veà noù. Veà tính khaû thi, chuùng ta phaûi kieåm tra caùc ORB coù khaû thi vôùi nhöõng platform phaàn cöùng maø ta döï ñònh thöïc thi treân noù Ñoái vôùi moïi ngoân ngöõ laäp trình chính, aùnh xaï ngoân ngöõ theo chuaån OMG ñaëc taû kieåu IDL, phöông phaùp goïi, vaø nhöõng kieán thieát khaùc chuyeån vaøo trong caùc cuoäc goïi haøm baèng ngoân ngöõ laäp trình. Nhö hình 2.2 moâ taû, chính laø caùch IDL skeleton vaø object implementation laøm vieäc vôùi nhau. Vì vieäc aùnh xaï ngoân ngöõ laø chuaån cuûa OMG, moïi trình bieân dòch IDL cuûa caùc nhaø cung caáp ñeàu taïo ra cuøng moät taäp caùc cuoäc goïi haøm töø file IDL ñöôïc giao. Ñieàu naøy ñaûm baûo raèng, duø chuùng ta ORB cuûa nhaø cung caáp naøo cho ngoân ngöõ cuï theå, object implementation truy caäp skeleton cuøng moät cuù phaùp. Neáu chuùng ta thöïc hieän treân caùc ORB cuûa nhieàu nhaø cung caáp, code chuyeån töø ORB naøy sang ORB khaùc. 4/ Keát noái tôùi ORB: Hai khía caïnh cuûa implementation skeleton traùi ngöôïc nhau: Vieäc keát noái tôùi client , ñöôïc quaûn lyù bôûi OMG IDL, ñöôïc chuaån hoaù; coøn keát noái ORB treân khía caïnh khaùc thì thuoäc veà ngöôøi chuû; ñieàu naøy giuùp cho nhaø cung caáp ñaùp öùng nhöõng nhu caàu cuûa khaùch haøng. Vì giao dieän cuûa ORB_skeleton thuoäc veà ngöôøi chuû neân ORB vaø trình dòch IDL phaûi cuøng moät xuaát xöù. Chuùng ta phaûi söû duïng trình dòch IDL vôùi ORB keøm theo: skeleton töø nhaø cung caáp A seõ khoâng töông thích vôùi ORB töø nhaø cung caáp B. AÙnh xaï ngoân ngöõ OMG ñöôïc xaây döïng trong trình bieân dòch IDL Nhaø laäp trình tham khaûo aùnh xaï ngoân ngöõ OMG IDL IDL Compiler coá ñònh choïn ngoân ngöõ laäp trình Object Impl code Skeleton code Bieân dòch vaø link Bieân dòch vaø link Object Client Skeleton Stub ORB Hình 2.2 Vai troø cuûa chuaån hoùa aùnh xaï ngoân ngöõ OMG. Toùm laïi veà muïc ñích cuûa vieäc hieän thöïc ñoái töôïng: chuùng ta baét ñaàu vôùi vieäc ñònh nghóa giao dieän IDL höõu duïng vôùi baát kyø ngoân ngöõ laäp trình vaø ORB naøo. Chuùng ta coù theå duøng trình dòch IDL ñöôïc keøm theo vôùi ORB ñeå taïo ra skeleton maø coù theå keát noái vôùi ORB ñaõ choïn sau khi nhaäp vaøo IDL file. Tính naêng coù theå tích hôïp (ñöôïc ñaûm baûo bôûi aùnh xaï ngoân ngöõ chuaån) cho pheùp chuùng ta bieân dòch baèng trình dòch IDL cuûa nhaø cung caáp khaùc vaø taïo ra skeleton baèng cuøng caùc cuoäc goïi haøm, nhöng stub thì keát noái vôùi ORB cuûa nhaø cung caáp môùi. IV/ ORB: Ñònh nghóa veà ORB ñaõ ñöôïc xeùt qua. Hieän taïi, ta caàn xeùt ñeán nhöõng khía caïnh khaùc: Trong caáu truùc, ngöôøi ta khoâng ñoøi hoûi ORB phaûi hieän thöïc nhö nhöõng thaønh phaàn ñôn maø noù ñöôïc ñònh nghóa nhö nhöõng interfaces tröïc thuoäc noù. Baát kyø söï hieän thöïc ORB naøo cuõng cung caáp nhöõng giao dieän thích hôïp chaáp nhaän ñöôïc. Interface ñöôïc toå chöùc trong 3 loaïi sau: + Caùc taùc vuï laø nhö nhau ñoái vôùi taát caû söï hieän thöïc ORB. + Caùc taùc vuï öùng vôùi nhöõng kieåu cuï theå cuûa object . + Caùc taùc vuï töông öùng vôùi nhöõng phong caùch hieän thöïc object cuï theå. Nhöõng ORB khaùc nhau choïn caùch hieän thöïc khaùc nhau. Khi hai ORB laøm vieäc chung vôùi nhau, nhöõng ORB ñoù phaûi phaân bieät nhöõng tham chieáu object (OR) cuûa chuùng. Nhaân (Core) ORB laø moät phaàn cuûa ORB cung caáp söï hieän dieän cô baûn cuûa nhöõng object vaø söï truyeàn thoâng cuûa caùc requests. CORBA ñöôïc thieát keá nhaèm hoã trôï nhöõng cô caáu object khaùc nhau vaø CORBA cuõng caáu thaønh ORB vôùi nhöõng thaønh phaàn phía treân "ORB Core" (noù cung caáp nhöõng interfaces nhaèm coù theå che ñi nhöõng söï khaùc nhau giöõa nhöõng ORB Cores). 1/ Neàn taûng cho khaû naêng töông taùc qua laïi: Muïc tieâu cuûa chuùng ta laø söû duïng moät "web" cuûa ORB-ORB ñeå taïo khaû naêng töông taùc qua laïi giöõa taát caû ñoái töôïng CORBA treân maïng. Hai vaán ñeà naûy sinh: Location: ñaùnh ñòa chæ cho invocation ñeán object implimentation nhö theá naøo. => giaûi quyeát: object reference. Translation: invocation maø chuùng ta gôûi ñi ñöôïc dòch sang daïng format khaùc nhö theá naøo vaø ñaùp öùng traû veà ra sao.=> giaûi quyeát: IDL. 2/ Object reference: Moät OR laø thoâng tin caàn thieát ñeå ñaëc taû object trong ORB. Hai ORB implementation coù theå choïn caùch theå hieän cho OR khaùc nhau. Söï theå hieän cuûa OR ñöôïc chæ khaû thi (valid) trong thôøi gian soáng cuûa client. Moãi object CORBA trong heä thoáng ñeàu coù object reference (OR) cuûa rieâng noù maø khoâng quan taâm ñeán thôøi gian soáng cuûa object; ñöôïc gaùn bôûi ORB cuûa noù luùc taïo ra object vaø vaàn coøn valid cho ñeán khi object bò xoùa ñi moät caùch töôøng minh. Client löu giöõ nhöõng OR baèng nhieàu caùch khaùc nhau, vaø giao tieáp vôùi chuùng baèng yeâu caàu phuï thuoäc vaøo aùnh xaï ngoân ngöõ ñang duøng. Söï giao tieáp naøy taïo khaû naêng cho ORB goïi tröïc tieáp ñeán object ñích ñöôïc ñaëc taû. Client coù theå löu tröõ nhöõng tham chieáu cuûa moät object trong moät file hay moät database. Sau ñoù, khi client laáy tham chieáu ra, OMA ñoøi hoûi cuoäc goïi phaûi ñöôïc thöïc thi moät caùch hoaøn haûo ngay caû khi object ñích ñaõ bò xoùa trong thôøi gian quaù ñoä (nhöng khoâng ñuùng khi object bò xoùa moät caùch töôøng minh). Ñieàu naøy coù nghóa laø OR khoâng ñôn giaûn chæ laø ñòa chæ network hay boä nhôù cuûa object. Nhöõng tieâu chuaån OMG cho pheùp moãi nhaø cung caáp ORB hieän thöïc caùch dòch OR sang object ñích thöïc söï ñöôïc xem laø toát nhaát ñoái vôùi heä thoáng vaø neàn taûng cuûa khaùch haøng. Ñieàu baét buoäc laø ORB naøo cuõng phaûi hieåu ñöôïc moïi OR ôû moïi luùc. Vaø baát kyø moät öùng duïng duøng ORB naøo ñoù treân network cuõng coù theå laáy caùc OR vaø truyeàn cho ORB cuûa chính noù nhaèm goïi object. Vaø vì theá, OR ñoùng vai troø raát quan troïng trong vieäc cho pheùp user söû duïng taøi nguyeân trong heä thoáng phaân boá traûi roäng. Vì chuùng ta ñang ñöùng ôû vò trí laø ngöôøi söû duïng ORB thay vì laø ngöôøi taïo ra ORB, khaùi nieäm cuûa OR cho pheùp chuùng ta ñònh höôùng tröôùc: ta coù theå truyeàn OR ñeán ORB, vaø ORB truyeàn pheùp goïi ñeán object ñích. Vaø neáu nhö chuùng ta ñang truyeàn hay ñang nhaän OR nhö moät thoâng soá thì ORB chæ quan taâm ñeán nhöõng chi tieát khoâng lieân quan ñeán vò trí vaø quaõng ñöôøng truyeàn taûi cuûa OR. 3/ IDL vaø ORB: ORB quan taâm ñeán nhöõng chi tieát nhö lieân keát nhöõng nhoùm platform vôùi nhöõng daïng format khaùc nhau. ORB caàn moät coâng cuï ñeå thöïc hieän: ñoù laø OMG IDL. CORBA ñoøi hoûi phaûi löu tröõ veà ñònh nghóa IDL cuûa taát caû caùc object cuûa noù trong IR (Interface Repository). Taäp hôïp nhöõng ñònh nghóa giao dieän naøy laø taøi nguyeân quan troïng trong heä thoáng phaân boá. IDL coøn phaûi höõu duïng ñoái vôùi client, object implementation vaø caùc tieän ích khaùc. Thuaän lôïi cuûa IR trong vieäc lieân keát ORB: Bieát ñöôïc kieåu vaø thöù töï lieân keát cuûa caùc ñoá soá trong thoâng ñieäp taïo khaû naêng lieân laïc giöõa caùc ORB nhaèm chuyeån ñoåi thöù töï byte vaø daïng format döõ lieäu ôû baát kyø nôi naøo caàn thieát. Lôïi ích chính cuûa vieäc söû duïng IR laø DII (Dynamic Invocation Interface). 4/ DII: (Dynamic Invocation Interface) Ñeå goïi moät taùc vuï treân object, client phaûi goïi vaø, ñöôïc lieân keát tónh vôùi stub töông öùng. Vì nhöõng nhaø phaùt trieån xaùc ñònh nhöõng stub naøo chöùa trong client maø hoï ñaõ vieát code cuûa noù neân interface naøy (SII) khoâng theå truy xuaát nhöõng object vöøa theâm vaøo heä thoáng. Nhöõng ngöôøi söû duïng caáp cao (phöùc taïp) muoán söû duïng object môùi sau khi hoï ñöôïc cung caáp theâm baát kyø ORB treân maïng maø khoâng phaûi ñôïi hoaëc caøi ñaët phaàn môùi cho sofware cuûa client treân desktop. DII cung caáp khaû naêng naøy vaø noù ñöôïc "built in" cho moïi ORB tuaân theo chuaån CORBA. Taïi thôøi ñieåm thöïc thi, DII cung caáp cho client: + Tìm thaáy object môùi. + Tìm thaáy nhöõng interface cuûa chuùng (nhöõng object môùi). + Laáy ra nhöõng ñònh nghóa veà interfaces. + Taïo vaø phaùt ra pheùp goïi. + Nhaän ñaùp öùng keát quaû hoaëc thoâng tin "exception". DII thaät ra laø moät ORB interface ñöôïc ñònh nghóa trong IDL maø noù bao goàm nhöõng giaûi thuaät tìm ñöôøng nhaèm cho pheùp client vaø ORB xaây döïng vaø goïi nhöõng taùc vuï cuûa baát kyø object naøo khi chuùng laøn vieäc chung vôùi nhau vaø ñang söû duïng nhöõng ñònh nghóa interfaces töø IR. Baèng caùch naøo maø client coù theå bieát object hay interface naøo maø client muoán laáy töø IR? Ví duï, taïi thôøi ñieåm caøi ñaët, nhöõng object môùi coù theå taïo ra caùc ngoõ nhaäp vaøo file maø client bieát ñöôïc, lieät keâ teân interface cuûa chuùng vôùi nhöõng thoâng tin phuï maø client coù theå display trong moät menu; ñieàu naøy cung caáp cho user thoâng tin caàn thieát ñeå choïn object vaø client vôùi thoâng tin caàn thieát ñeå laáy ñònh nghóa interface töø IR. Nhöõng phöông caùch chuaån duøng ñeå tìm thaáy nhöõng object trong heä thoáng phaûi keå ñeán Naming vaø Trader services. Nhöõng tieän lôïi khi söû duïng DII: + Client khoâng caàn phaûi bieát nhöõng interfaces cuûa server trong thôøi gian bieân dòch; thaät ra ñònh nghóa interface thaäm chí khoâng caàn toàn taïi taïi thôøi ñieåm maø client ñöôïc bieân dòch. Ñieàu naøy taïo khaû naêng linh ñoäng höõu hieäu cho nhöõng öùng duïng duøng DII. + DII cung caáp nhieàu option ñeå chöùa nhöõng thoâng soá traû veà töø moät taùc vuï. ÖÙng duïng client coù theå traû veà keát quaû moät caùch bình thöôøng, goïi taùc vuï vaø duøng ngöõ caûnh one_way hay löu vaøo keát quaû. Nhöõng option naøy taïo tính linh ñoäng trong nhöõng öùng duïng DII hôn laø trong nhöõng phaàn thöïc hieän pheùp goïi static. Nhöõng baát lôïi khi söû duïng DII: + Nhöõng öùng duïng duøng DII thöôøng phöùc taïp hôn nhöõng öùng duïng töông öùng khi söû duïng client stub (tónh). Bôûi vì moät pheùp goïi taùc vuï duøng DII phaûi truyeàn töøng ñoái soá moät trong moät thôøi ñieåm, goïi taùc vuï vaø nhaän töøng ñoái soá traû veà moät => coâng vieäc teû nhaït vaø thöôøng gaây ra quaù trình error_prone. +Trong khi khaû naêng kieåm tra kieåu ñöôïc xaây döïng trong cô caáu goïi haøm tónh, thì ñoái vôùi nhöõng phaùp goïi taùc vuï trong DII laø khoâng caàn thieát. + Vì töøng ñoái soá moät truyeàn töøng thôøi ñieåm, neân chi phí theâm seõ phaùt sinh. + Vì chi phí phaùt sinh theâm neân client cuûa DII phaõi thoûa hieäp vôùi server trong tröôøng hôïp client caàn caáp moät hay nhieàu interface. V/ Khaû naêng töông taùc treân neàn taûng CORBA: 1/ Truy xuaát moät object töø moät ORB töø xa: Client Object Stub Skel ORB 1 Client Object Stub Skel ORB 2 Hình 2.4 Interoperability duøng lieân laïc giöõa caùc ORB Khaû naêng töông taùc trong CORBA döïa treân moái lieân laïc ORB-ORB. Client truyeàn cuoäc goïi thoâng thöôøng döïa treân IDL ñeán ORB cuïc boä. Neáu cuoäc goïi chöùa OR cuûa object implementation cuïc boä, ORB tìm ñöôøng gôûi noù ñeán object ñích; neáu khoâng coù thì ORB tìm ñöôøng cho pheùp goïi ñeán ORB töø xa. Sau ñoù, ORB töø xa tìm ñöôøng cho pheùp goïi ñeán object ñích. ORB seõ quaûn lyù taát caû nhöõng chi tieát cuûa cuoäc goïi: giaûi quyeát OR cho ORB töø xa vaø object; chuyeån ñoåi thöù töï byte vaø daïng format ôû nôi caàn thieát. Moãi ORB phaûi löu tröõ ít nhaát laø hai cô sôû döõ lieäu hoaëc hai heä thoáng thö muïc: IR vôùi taäp caùc ñònh nghóa interface vaø implementation vôùi nhöõng thoâng tin veà object implementation. Nhöõng chi tieát truyeàn thoâng phaûi ñöôïc ñoàng boä hoùa nhö nhöõng ORB protocol phaûi lieân keát hoaëc nhöõng gateways phaûi chuyeån ñoåi giöõa chuùng. Nhöõng chi tieát veà implementation phaûi ñöôïc quan taâm bôûi nhöõng nhaø hieän thöïc ORB. Quyeát ñònh veà nhöõng protocol coù lieân quan seõ aûnh höôûng ñeán nhöõng nhaø quaûn trò maïng 2/ Toå hôïp thaønh phaàn ñoái töôïng ñaõ mua: Client vaø object implementation coù theå: + ÔÛ treân caùc ORB cuûa nhaø cung caáp khaùc. + Treân nhöõng platform khaùc nhau. + Treân heä ñieàu haønh khaùc. + Treân heä thoáng maïng khaùc. + Vaø ñöôïc vieát döôùi daïng ngoân ngöõ laäp trình khaùc nhau. Taát caû nhöõng gì nhaø laäp trình caàn vieát client ñeå truy caäp nhöõng object töø xa laø baûn sao cuûa IDL file cuûa noù, moâ taû nhöõng vieäc maø töøng taùc vuï phaûi thöïc hieän vaø moâ taû OR. Tieán trình ñöôïc moâ taû trong hình. Khi chuùng ta mua phaàn meàm, chuùng ta nhaän ñöôïc caû hai object implementation coù theå thöïc thi vaø moät file IDL töø nhaø cung caáp. Caøi ñaët object treân ORB treân server mode maø noù seõ tröïc thuoäc. Tieán trình thöïc hieän sinh ra OR . Khi ta vieát client, di chuyeån ñeán phaàn development platform vaø khoâng nhaát thieát phaûi cuøng platform hay ORB ñang thöïc thi object implementation. Chuùng ta khoâng caàn quan taâm ñeán ngoân ngöõ maø nhaø cung caáp duøng ñeå vieát object maø chuùng ta mua. Chuùng ta coù theå vieát client baèng baát cöù ngoân ngöõ naøo maø chuùng ta muoán, vì vaäy haõy choïn trình dòch IDL hoã trôï ñöôïc moâi tröôøng phaùt trieån chuùng ta caàn. Söû duïng client stub truy xuaát ORB töø trong ñoaïn maõ client, töø Naming service vaø file löu tröõ, chuùng ta laáy ra OR vaø duøng noù ñeå goïi nhöõng taùc vuï cuûa object maø chuùng ta mua baát cöù nôi naøo maø noù tröïc thuoäc. Hình 2.5 : Phaùt trieån moät object trong moâi tröôøng phaàn meàm Khoâng duøng töø ngöôøi baùn Naïp vaø dòch Desktop Server IDL Object Bieân dòch link Client code - - - - - - - - - - Client Object ORB ORB töø ngöôøi baùn Caøi ñaët Skeleton code Stub code Stub Skel Ñöôïc vieát bôûi ngöôøi laäp trình 3/ Phaân boá client vaø object: Quaù trình ñöùng ôû khía caïnh client gioáng nhö ñaõ ñöôïc trình baøy ôû treân. Quaù trình hieän thöïc object ñöôïc thöïc thi tuaàn töï treân platform phaùt trieån server, löu tröõ skeleton IDL vaø xaây döïng ñoaïn maõ ñeå coù theå thöïc thi vôùi noù. Khi hai thaønh phaàn ñaõ hoaøn thaønh vaø register vaøo ORB coù lieân quan thì client coù theå laáy OR töø naming service hay baát kyø nôi naøo maø noù löu tröõ; vaø goïi nhöõng taùc vuï treân object baèng caùch truyeàn cuoäc goïi tôùi ORB cuïc boä cuûa noù. VI/ Kieán truùc quaûn lyù ñoái töôïng: (OMA) Phaûi coù moät ngoân ngöõ chung cho taát caû caùc öùng duïng hoaëc laø chuùng ta khoâng theå nhaän ra taát caû caùc phaàn meàm thaønh phaàn plug_and_play. Ngoân ngöõ chung ñoù chính laø OMG's OMA. OMA ñònh nghóa moâi tröôøng maø nôi ñoù khaû naêng töông taùc thaâm nhaäp leân töø möùc heä thoáng vaøo nhöõng thaønh phaàn öùng duïng. - Caáu truùc cuûa OMA: Ta coù theå phaân chia heä thoáng ra laøm 4 taàng lôùp, vò trí cuûa moãi thaønh phaàn khoâng töông öùng vôùi söï keát noái cuûa chuùng (vì moïi thöù ñeàu keát noái vôùi ORB) vaø cuõng khoâng töông öùng chính xaùc vôùi caùch ñònh thôøi gian. ÔÛ ñaây, vò trí töông öùng vôùi vieäc moãi thaønh phaàn coù tính cô baûn nhö theá naøo; vieäc thieát keá taàng thaáp hôn seõ aûnh höôûng ñeán vieäc thieát keá cuûa taàng cao hôn maëc duø chuùng ta khoâng nhaát thieát phaûi hoaøn thaønh taát caû nhöõng thaønh phaàn thuoäc taàng cuï theå naøo ñoù tröôùc khi baét ñaàu laøm vieäc vôùi nhöõng thaønh phaàn cuûa taàng cao hôn. Hình : OMG’s Object Management Architecture: User Interface Information Management System Management Task Management Healthcare Financial etc.. Application Objects CORBAfacilities Vertical CORBAfacilities Horizontal CORBAfacilities Object Request Brokers Lifecycle Naming Persistence CORBAservices etc… HÌNH :Toång quan veà CORBA vaø OMA:2.6 Phaàn cöùng vaø phaàn meàm heä thoáng CORBAservices: Caùc dòch vuï caên baûn cho öùng duïng höôùng ñoái töôïng CORBA Core vaø Interoperability: Kieán truùc vaø lieân laïc CORBAfacilities: Thao taùc vaø löu tröõ döõ lieäu caáp öùng duïng Application Object: Söï caïnh tranh vaø ñoåi môùi ôû caáp öùng duïng Users CHÖÔNG 3: GIÔÙI THIEÄU VEÀ OMG IDL Ñoái vôùi nhöõng ñeà aùn laäp trình, ít nhaát chuùng ta cuõng caàn taøi lieäu keøm theo vôùi saûn phaåm ORB chuùng ta choïn; ñeå xaây döïng ORB, chuùng ta phaûi coù nhöõng ñaëc taû OMG chính goác. OMG IDL (IDL: Iterface Definition Language) laø ngoân ngöõ duøng ñeå moâ taû nhöõng interface maø client object goïi vaø do object implementations cung caáp. Moät ñònh nghóa interface ñöôïc vieát trong OMG IDL ñònh nghóa interface vaø ñaëc taû nhöõng thoâng soá cuûa töøng taùc vuï moät caùch ñaày ñuû. Moät OMG IDL interface cung caáp nhöõng thoâng tin caàn thieát cho vieäc phaùt trieån nhöõng client söû duïng caùc taùc vuï cuûa interface. Vieäc aùnh xaï khaùi nieäm OMG IDL tôùi ngoân ngöõ laäp trình cuûa client tuøy thuoäc vaøo caùc coâng cuï saün coù trong ngoân ngöõ cuûa client. I/ Söï tuaân theo chuaån CORBA : 1/ CORBA core: Taát caû nhöõng saûn phaåm cuûa CORBA phaûi tuaân theo nhöõng ñaëc taû cuûa CORBA core; goàm: Moâ hình ñoái töôïng CORBA . Kieán truùc CORBA. Cuù phaùp vaø ngöõ caûnh OMG IDL. vaø nhöõng thaønh phaàn ORB sau: DII. DSI (Dynamic Skeleton Iterface) IR (Interface Repository). ORB interface. BOA (Basic object Adapter). Ngoaøi ra, saûn phaåm toái thieåu cuõng phaûi hoã trôï: Moät aùnh xaï ngoân ngöõ. Nhaø cung caáp khoâng nhaát thieát phaûi cung caáp trình dòch cho baát kyø ngoân ngöõ laäp trình naøo; tuy nhieân trình dòch cho moãi ngoân ngöõ ñöôïc chuaån hoùa phaûi phuø hôïp vôùi nhaõn hieäu keøm theo. 2/ Nhöõng ñieåm tuaân theo CORBA boå sung: Khaû naêng töông taùc CORBA laø moät ñieåm baét buoäc rieâng reõ, nghóa laø khoâng phaûi taát caû ORB töông taùc. Ñeå minh chöùng cho söï baét buoäc cuûa khaû naêng töông taùc CORBA, moät ORB phaûi coù IIOP protocol ( Internet Iter_ORB protocol ) töï nhieân hoaëc thoâng qua half_bridge, cuõng coù theå söû duïng DCE CIOP ( Distributed Computing Enviroment Common Iter_ORB protocol). Moãi CORBAservice laø moät ñieåm söï tuaân theo coù tính chaát rieâng. 3/ Ñaëc taû moâi tröôøng CORBA: Danh saùch caàn ñöôïc ñaëc taû goàm: CORBA core. Raøng buoäc ngoân ngöõ. Khaû naêng töông taùc CORBA, goàm IIOP ñöôïc ñoøi hoûi. DCE ESIOP (ESIOP: Enviroment specific inter_ORB protocol). CORBA service (moät trongcaùc loaïi service ngoaïi tröø Trader vaø Sercurity ). Hai CORBAservice quan troïng (laø Trader vaø Sercurity Service). Moät CORBAfacility töông lai: laø söï hieån thò vaø quaûn lyù taøi lieäu phöùc (Compound Document Management and Prsentation). Trong ñoù, ta löu yù ñeán khaùi nieäm context obbject: Context object chöùa moät danh saùch caùc caëp teân_trò ñöôïc goïi laø caùc tính chaát. Context objects töông ñöông CORBA trong moâi tröôøng UNIX hoaëc PC-DOS. (Addition): Moät ñaëc taû OMG IDL goàm moät hoaëc nhieàu file. Moãi file ñöôïc dòch trong nhieàu giai ñoaïn. Giai ñoaïn ñaàu tieân laø tieàn xöû lyù, ñoù laø giai ñoaïn thöïc thi "file inclusion" (#include...) vaø söï thay theá macro. Muïc ñích chính söû duïng nhöõng coâng cuï tieàn xöû lyù ñeå goàm luoân nhöõng ñaëc taû cuûa OMG IDL khaùc. Ñaëc taû OMG IDL goàm nhöõng ñònh nghóa kieåu, ñònh nghóa haèng, ñònh nghóa "exception" hoaëc ñònh nghóa veà module..... CHÖÔNG 4: TÌM HIEÅU VEÀ ORB ÔÛ KHÍA CAÏNH CLIENT I/ Toång quan veà ORB vaø khía caïnh Client: Chuùng ta ñaõ bieát moät request truyeàn töø client thoâng qua IDL stub, ORB vaø skeleton cuûa object ñích, cuoái cuøng ñeán object implementation nôi object ñöôïc thöïc thi vaø keát quaû traû veà baèng con ñöôøng töông öùng. Chuùng ta cuõng ñaõ bieát raèng ñònh nghóa cuûa taát caû nhöõng giao dieän trong OMG IDL cho pheùp nhöõng ORB ñieàu khieån taát caû nhöõng chi tieát cuûa request/reponse, bao goàm söï phieân dòch veà daïng khi client vaø object ñích ôû treân heä thoáng khaùc nhau; vaø client coù moät OR veà object ñích, truyeàn noù ñeán ORB keøm trong moãi yeâu caàu ñeå bieåu thò yeâu caàu cuûa moät object cuï theå. Hình 4.1 cho thaáy 6 interfaces ORB vaø 8 thaønh phaàn ORB. Hai interfaces chæ lieân laïc vôùi client, hai caùi khaùc kieân laïc vôùi object implementation trong khi ORB interface cung caáp service cho caû hai. DSI giao tieáp vôùi nhöõng ORB töø xa. IR vaø implementation Repository services ñöôïc truy xuaát tröïc tieáp thoâng qua ORB interface vaø giaùn tieáp töø nhöõng pheùp goïi taùc vuï thoâng qua DII vaø SII. Client truyeàn request tôùi ORB thoâng qua IDL stub tónh (SII) hoaëc DII. Moät soá söï khaùc bieät quan troïng giöõa SII vaø DII. Ñieåm khaùc bieät chính laø DII cho pheùp chuùng ta löïa choïn kieåu taùc vuï vaø object taïi thôøi ñieåm thöïc thi, trong khi SII ñoøi hoûi phaûi löïa choïn trong thôøi gian bieân dòch. Noâm na, DII cho pheùp ñònh kieåu ñoäng coøn SII cho pheùp ñònh nghóa tónh. Ngoaøi ra: Vì söï raøng buoäc ñoäng neân DII khoâng theå kieåm tra kieåu trong thôøi gian bieân dòch trong khi ñoù thì SII coù theå. ORB ñoøi hoûi töøng stub rieâng cho töøng interface tónh, nhöng chæ caàn moät DII interface ñöôïc cung caáp bôûi ORB chính noù. Nhöõng cuoâc goïi SII thöôøng ñoàng boä nhöng DII ñöôïc goïi trong mode hoaëc ñoàng boä, hoaëc baát ñoàng boä hoaëc ñoàng boä trì hoaõn. ORB interfaces cung caáp söï truy caäp tôùi IR vaø implementation Repository vaø moät vaøi taùc vuï treân nhöõng tham chieáu object maø chæ coù ORB coù theå thöïc hieän. Ta xeùt sô ñoà cuï theå sau: Hình 4.1 Caáu truùc cuûa ORB Implementation Repository Interface Repository Object Request Broker Dynamic Skeleton Interface Static IDL Skeletons Object Adapters ORB Interface Static IDL Stubs (SII) Dynamic Invocation Interface (DII) Object Implementations Clients CHÖÔNG 5: TÌM HIEÅU VEÀ ORB ÔÛ KHÍA CAÏNH SERVER I/ Kích hoaït Server vaø goïi object implementation: Khía caïnh Server cuûa ORB phöùc taïp hôn khía caïnh Client nhieàu. nhöõng nhaø xaây döïng object phaûi vieát ñoaïn "code" ñeå tieáp xuùc vôùi ORB trong suoát traïng thaùi "startup vaø shutdown", "saving vaø restoring". BOA (Basic Object Adapter) hoã trôï moät soá caáu hình khaùc nhau cuûa server vaø object implementation: Quaù trình server taùch bieät vôùi ORB, trong noù thöïc thi moät soá hieän thöïc object rieâng bieät. Vôùi khía caïnh client, chuùng ta chæ giaûi quyeát vaán ñeà söï hieän thöïc objects; moãi moät söï hieän thöïc object cho moät interface trong module cuûa IDL. Nhöng treân khía caïnh object, chuùng t coù theå thaáy ñöôïc caáu truùc hieän thöïc; vaø BOA ñöôïc trang bò ñeå xöû lyù nhöõng ñoái töôïng nhoùm laïi trong nhieàu caùch khaùc nhau. Moät quaù trình ñôn ñöôïc goïi laø moät server trong nhöõng ñaëc taû OMG ñang chaïy moät soá object, moãi moät caùi cho moät interface. Hình treân cho thaáy caáu truùc cuûa BOA vaø söï töông taùc giöõa BOA vaø Object Implementation. BOA seõ khôûi ñoäng moät chöông trình ñeå cung caáp Object implementation moät server (1). OI (Object implementation) cho BOA bieát raèng noù vöøa hoaøn thaønh vieäc khôûi taïo vaø baét ñaàu ñieàu khieån request (2). Khi yeâu caàu ñaàu tieân cuûa object ñeán, OI "activate" object (3). Sau ñoù, BOA goïi taùc vuï töông öùng skeleton töøng interface(4). Taïi nhöõng laàn khaùc nhau, söï hieän thöïc truy xuaát nhöõng service BOA nhö taïo object, deactivation ....(5) Hoaëc chi tieát hôn, ta coù theå xeùt moät chuoãi caùc taùc vuï cuï theå: Xem hình 5.1: dieãn taû moät loaïït caùc taùc vuï trong tröôøng hôïp chuùng ta ORB nhaän yeâu caàu höôùng tôùi moät ñoái töôïng trong server. ORB kieåm tra IR cuûa noù vaø xaùc ñònh khoâng coù server cuõng nhö khoâng coù ñoái töôïng hieän hoaït ñoäng. 2. ORB kích hoaït server baèng vieäc duøng noái phuï thuoäc heä thoáng. Nhö moät phaàn cuûa quaù trình kích hoaït, server ñöôïc truyeàn thoâng tin maø noù caàn ñeå lieân laïc vôùi BOA. ORB taïm thôøi göûi cuoäc goïi ban ñaàu tôùi object. 3. Server goïi impl_is_ready treân BOA, BOA bieát raèng server saün saøng kích hoaït object. 4. BOA goïi thöôøng trình kích hoaït ñoái töôïng cuûa server cho ñoái töôïng muïc tieâu baèng vieäc truyeàn OR cho server, server kích hoaït object. Neáu ñoái töôïng ñaõ ñöôïc kích hoaït vaø tröõ traïng thaùi cuûa noù ôû boä nhôù beàn vöõng, thoâng tin ñoù ñöôïc laáy laïi vaø phuïc hoài traïng thaùi tröôùc. Khoùa ñeå cho söï caát giöõ beàn vöõng cho ñoái töôïng ñöôïc duy trì bôûi BOA keát hôïp vôùi OR vaø ñöôïc laáy laïi bôûi object khi khôûi ñoäng baèng get_id . 5. BOA truyeàn cuoäc goïi ñeán ñoái töôïng qua skeleton vaø nhaän ñaùp öùng göûi laïi client. 6. BOA coù theå nhaän theâm caùc yeâu caàu treân ñoái töôïng truyeàn qua skeleton ôû böôùc (5). Cuõng coù theå nhaän theâm caùc cuoäc goïi object trong server ôû böôùc (4) vaø sau ñoù qua böôùc (5) cho moãi object môùi. 6. Hình 5.1 Kích hoaït, goïi, giaûi hoaït ñoái töôïng baèng BOA ORB Core BOA pass invocation Skeleton Activate Object Activate Server Object Implementation impl-is- ready deactivate- impl Deactivate- object Methods send response 1. ORB nhaän cuoäc goïi 8. 7. 5. 4. 3. 2. 7. Server coù theå quyeát ñònh shutdown moät object vì lyù do naøo ñoù (user yeâu caàu...). Ñaàu tieân noù goïi thöôøng trình BOA deactivate_obj baèng vieäc ñaëc taû object muïc tieâu, sau ñoù BOA seõ khoâng göûi caùc cuoäc goïi tôùi ñoái töôïng maø khoâng kích hoaït laïi noù tröôùc tieân. Ñoái töôïng caát traïng thaùi cuûa noù vaøo boä nhôù beàn vöõng tröôùc khi shutdown. 8. Töông töï,ï server coù theå shutdown toaøn boä. Ñaàu tieân noù goïi chöông trình BOA: deactivate_impl, baèng vieäc thoâng tin BOA laø noù khoâng saün saøng kích hoaït ñoái töôïng nöõa. Khi nhaän yeâu caàu tieáp theo, BOA seõ baét ñaàu ôû böôùc 1. II/ Chuaån hoùa khía caïnh server: CORBA khoâng cung caáp leänh cho client khôûi ñoäng moät OI, client chæ göûi yeâu caàu vaø ORB laøm taát caû moïi vieäc. Ñieàu naøy khoâng coù nghóa laø taát caû ñoái töôïng ñang hoaït ñoäng ôû moïi luùc, söû duïng caùc taøi nguyeân. Thay cho ñieàu ñoù laø caùc giao dieän cho pheùp ñuû linh hoaït ñeå ORB vaø nhaø quaûn trò heä thoáng coù theå quaûn lyù taát caû ñoái töôïng vaø taøi nguyeân. BOA ñaõ ñöôïc OMG chuaån hoùa. Khi caùc thaønh vieân cuûa OMG vieát ñaëc taû BOA nguyeân thuûy, hoï hình dung coù moät hoaëc vaøi ORB trong töøng heä thoáng vaø haàu heát nhöõng cuoäc goïi object lieân quan ñeán IPC (interprocess communication) vì theá nhöõng ORB nheï (coá gaéng giaûm thieåu nhöõng thoâng tin dö thöøa) trôû neân phoå bieán; nghóa laø söï keát noái client_ORB luoân luoân cuïc boä, nhanh vaø hieäu quaû. Nhö vaäy, code khía caïnh server maø noù keát noái OI tôùi OA, seõ khoâng lieân keát nhöõng ORB khaùc nhau; vd nhö code treân khía caïnh client keát noái ORB vaø laáy ra nhöõng OR khôûi taïo. III/ Caùc thaønh phaàn khía caïnh server: Ta xeùt ñoaïn code trong OI maø noù laøm vieäc vôùi ORB vaø OA nhaèm cung caáp nhöõng haøm quaûn lyù. OA cung caáp nhöõng interface giöõa ORB vaø object cho pheùp ORB chuaån bò object ñeå nhaän moät request vaø cho pheùp nhöõng object baùo cho ORB bieát chuùng ñaõ saün saøng nhaän (hoaëc chöa) xöû lyù request. Thaønh phaàn cuûa OA giöõa ORB vaø caùc object taïi vò trí nhöõng service ñöôïc cung caáp bôûi nhöõng ORB khaùc nhau. Hình 5.2: xeùt caáu truùc ORB döôùi khía caïnh server. Implementation Repository Interface Repository ORB Dynamic Skeleton Interfaces Static IDL Skeletons Object Adapters ORB Interface Object Implementation Hình 5.2:ORB khía caïnh server. OIs coù theå goïi taùc vuï ORB ñöôïc ñònh nghóa cho IR hoaëc nhöõng taùc vuï OR. OA thöïc hieän giao tieáp nhaèm kích hoaït hoaëc giaûi hoaït object. IDL Skeleton tónh truyeàn cuoäc goïi ñeán onject vaø ngaän traû lôøi. Nhöõng cuoäc goïi DSI thöôøng truyeàn nhöõng cuoäc goïi tôùi ORB khaùc thoâng qua IPC hoaëc truyeàn treân maïng, maëc duø noù coù theå ñöôïc ñònh ñòa chæ cho nhöõng object trong ORNB naøy (hoã trôï DSI) "IDL skeleton tónh" laø söï töông ñöông khía caïnh server cuûa "client stub", ñöôïc taïo ra bôûi trình dòch IDL ñeå noái ORB vaø OI. Coù moät skeleton cho töøng kieåu object. ORB duøng DII hoaëc DSI ñeå taïo skeleton ñaïi dieän cho caùc objects töø xa. ORBkhoâng coù nhöõng skeleton tónh cho nhöõng cuoäc goïi töø xa vì thuû tuïc caøi ñaët OI chætheâm vaøo skeleton vaøo ORB chính noù, chuù khoâng phaûi cuûa client. ORB seõ taïo skeleton ñoäng ñeå truyeàn nhöõng cuoäc goïi cho nhöõng object töø xa thoâng qua ORB cuûa chính noù. Xeùt ñeán ORB interface (taùc vuï thöïc hieän treân OR). OR ñöôïc laáy döôùi hai daïng: moät coù theå ñöôïc söû duïng tröïc tieáp trong cuoäc goïi nhö ñích hay thoâng soá, nhöng chæ höõu duïng trong phieân noù ñöôïc löu tröõ; daïng coøn laïi (goïi laø chuyeån ñoåi sang daïng chuoãi) vaãn coøn höõu hieäu töø phieân naøy ñeán phieân khaùc vaø coù theå ñöôïc löu tröõ trong döõ lieäu hoaëc file. IV/ Caáu truùc cuûa OI: OI cung caáp nhöõng haønh vi vaø traïng thaùi thöïc söï cuûa moät object vaø moät vaøi vaán ñeà boå sung theâm. Söï xem xeùt cuûa OI khoâng heà ñôn giaûn. Tröø nhöõng server ñöôïc söû duïng thöôøng xuyeân, haàu heát nhöõng object khoâng thöïc thi vaø luùc naøo cuõng ñöôïc kích hoaït trong giai ñoaïn maø noù coù theå ñöôïc goïi. Ñieàu naøy laøm laõng phí raát nhieàu taøi nguyeân trong thöïc teá. Do ño, OI, ORB vaø CORBAservices (nhö Persistence) keát hôïp vôùi nhau ñeå kích hoaït nhöõng object khi caàn vaø cho pheùp chuùng löu laïi nhöõng traïng thaùi vaø giaûi hoaït trong suoát thôøi gian khoâng söû duïng. Söï kích hoaït sau ñoù seõ "restore" traïng thaùi tröôùc khi nhöõng cuoäc goïi ñöôïc xöû lyù vaø cho client thaáy raèng object ñaõ luoân ñöôïc thöïc thi vaø löu traïng thaùi trong thôøi gian quaù ñoä. Ñoái vôùi nhöõng nhaø hieän thöïc object, thuoäc tính naøy theå hieän söï baét buoäc. Khi chuùng ta vieát moät object tuaân theo luaät OMA, chuùng ta phaûi cung caáp caùch thöùc ñeå löu tröõ traïng thaùi cuûa object khi "shutdown" nhaèm taïo ñieàu kieän cho object bieát vaø khoâi phuïc traïng thaùi maø noù coù khi "shutdown" neeáu heä thoáng cheát vì moät lyù do naøo ñoù. Vaø chuùng ta phaûi cung caáp moät ñoaïn code ñeå ñoïc trong traïng thaùi khôûi ñaàu vaø ñaët caùc giaù trò taïi vò trí thích hôïp. Chuùng ta caàn phaûi phaân bieät roõ: söï taïo ra object vaø söï kích hoaït object. Söï taïo ra object laø ta phaûi söû duïng maãu môùi vaø moät tham chieáu oject môùi. Coøn neáu chuùng ta söû duïng nhöõng tham chieáu coù saün trong Naming Service hoaëc Trading Sevice thì ñoù chính laø söï kích hoaït object. Trong khi chuùng ta taïo moät object trong quaù trình taùch bieät vôùi client, thì: Khi chuùng ta ñang keát moái vôùi moâi tröôøng chuaån CORBA: client goïi taùc vuï "create" taïi "object factory" vaø traû veà OR cuûa object môùi. Object "factory" xaây döïng object coù theå thöïc thi ñöôïc trong baát kyø daïng gì noù laáy ñöôïc, vaãn duy trì nhöõng thoâng tin hieän thöïc sau ñoù truyeàn nhöõng thoâng tin naøy chi Implementation Repository. "Object factory" xaây döïng moät khoùa goïi laø "id" nhaèm muïc ñích löu tröõ laâu daøi object. Keá tieáp hoaëc laø noù löu tröõ interface cuûa object trong IR vaø nhaän moät OR interfacedef hoaëc laø laáy ra OR cuûa interface (khi ñaõ löu tröõ). Söû duïng nhöõng taùc vuï phuï thuoäc vaøo ORB ñeå nhaän vaøo trong implementation Repository cuûa object moät OR implementation (chaúng haïn). Khi nhaän cuoäc goïi, ORB duøng nhöõng thoâng tin naøy kích hoaït object. "Factory" coù theå goïi taùc vuï BOA "Object create" vôùi 3 thoâng tin input: tham chieáu interface, tham chieáu hieän thöïc vaø id. BOA vaø ORB taïo ra OR lieân keát vôùi beân trong ORB vôùi 3 thoâng tin naøy vaø traû veà cho "factory"-> traû veà cho clients vaø client coù theå duøng laïi cho caùc cuoäc goïi sau hoaëc coù theå truyeàn cho client khaùc duøng. OI coù moät thaønh phaàn cung caáp caùc chöùc naêng cho object. Phaàn naøy hoaït ñoäng khi object ñöôïc goïi thoâng qua aùnh xaï ngoân ngöõ. Object khoâng theå xaùc ñònh ñöôïc cuoäc goïi thoâng DII hay SII nhöng noù phaûi cung caáp moät giao dieän ñaëc bieät neáu nhö noù muoán ñöôïc goïi thoâng qua DSI. V/ OA (Object Adapter): OA laø chìa khoùa quan troïng cho khaû naêng löu chuyeån cuûa OI. Object ñöôïc cung caáp trong nhieàu caùch khaùc nhau. Moät vaøi object seõ thöôøng truù trong quaù trình cuûa chính chuùng vaø yeâu caàu kích hoaït bôûi ORB tröôùc khi caùc object ñoù ñöôïc söû duïng; moät soá khaùc naèm beân trong quaù trình cuøng vôùi caùc "client" vaø khoâng ñöôïc kích hoaït; vaø vaãn coùn moät soá khaùc ñöôïc quaûn lyù bôûi heä thoáng döõ lieäu höôùng ñoái töôïng vaø yeâu caàu moät taäp caùc services khaùc nhau baèng caùch goïi ORB. Baèng caùch ñònh nghóa OA cho töøng kieåu ñoá töôïng, CORBA cho pheùp baát kyø ORB naøo coù theå hoaït ñoäng vôùi taát caû caùc ñoái töôïng. Caùc OA , nhö BOA, coù nhieäm vuï: Löu ghi (register) nhöõng hieän thöïc. Taïo vaø chuù giaûi caùc OR. AÙnh xaï OR thaønh hieän thöïc töông öùng. Kích hoaït vaø giaûi hoaït caùc OI. Goïi caùc method thoâng qua skeleton hoaëc DSI vaø coù lieân quan ñeán Sercurity Service. Coù ba loaïi OA theo OMG: 1/ BOA: BOA laø OA duy nhaát ñöôïc chuaån hoùa bôûi OMG. BOA coù theå ñieàu khieån moät chöông trình treân method, treân object hoaëc laø moät chöông trình "share" cho nhieàu baûn cuûa cuøng moät kieåu object, BOA coù theå cung caáp caùch löu tröõ cho nhöõng object laâu daøi baèng khoùa. Nhöõng giao dieän kích hoaït ñoái töôïng ñònh nghóa trong ñaëc taû. 2/ OA thö vieän: Adapter naøy ñöôïc ñaëc bieät hoùa naèm trong moät quaù trìng ñôn ñeå truy xuaát object. 3/ Adapter döõ lieäu höôùng ñoái töôïng:(OO Database Adapter) Adapter naøy keát noái tôùi döõ lieu höôùng ñoái töôïng ñeå truy xuaát nhöõng object ñöôïc löu tröõ trong noù. VI/ BOA: BOA cung caáp: Taïo vaø chuù giaûi OR. Kích hoaït vaø giaûi hoaït OI. Kích hoaït vaø giaûi hoaït nhöõng object rieâng reõ. Goïi method thoâng qua skeleton. Ñoái vôùi BOA, server laø moät unit thöïc thi; coøn object hieän thöïc moät method hay interface BOA coù 4 cheá ñoä kích hoaït: Shared server: server ñöôïc kích hoaït bôûi BOA maø trong noù keùo theo nhieàu object kích hoaït theo. Persistent server: gioáng nhö "shared server" ngoaïi tröø server ñöôïc kích hoaït ngoaøi BOA vaø "register" trong thuû tuïc caøi ñaët. Unshared server: chæ coù duy nhaát moät ñoái töôïng cuûa hieän thöïc cung caáp coù theå hoaït ñoäng taïi moät thôøi ñieåm. Trong ñoù, hai cheá ñoä ñaàu öùng duïng nhieàu nhaát. Hình 5.4 Caùc cheá ñoä kích hoaït A: shared server. B: persistent server. C: unshare server. D: server-per-method. Process Object Start Process Register Impl D Basic Object Adapter C B A VII/ IDL skeleton tónh: IDL skeleton khía caïnh server ñoùng vai troø gioáng nhö IDL stub ôû khía caïnh client. Chuùng keát noái vôùi server thoâng qua aùnh xaï ngoân ngöõ laäp trình vaø keát noái vôùi OA thoâng qua giao dieän sôû höõu. Cuoâc goïi truyeàn thoâng qua skeleton töø OA tôùi implementation vaø request traû veà baèng con ñöôøng traû veà töông öùng. Nôi server thöôøng truù trong quaù trình cuûa chính noù, skeleton quaûn lyù caùch truyeàn IPC ñang söû duïng "shared memory" hoaëc "network" VIII/ DSI : ORB söû duïng DSI ñeå truyeàn request tôùi baát kyø OI naøo hoaëc ñaïi dieän maø noù coù theå tieáp xuùc treân maïng khoâng chæ nhöõng caùi maø noù noái ñöôïc thoâng qua stub tónh. DSI cho pheùp hai ORB xaây döïng caàu noái ñeå truyeån cuoäc goïi ñeán ORB cuûa object töø xa vaø nhaän veà ñaùp öùng. Caùc caàu noái DSI ñòng daïng truyeàn cuoäc goïi object thoâng qua caùc ORB: moät ñoùng vai troø ngöôøi goïi coøn laïi laø ngöôøi bò goïi (invokee). DSI ñöôïc ORB duøng ñeå taïo moät proxy skeleton cho caùc object, thöôøng laø töø xa, maø caùc static skeleton cuûa chuùng khoâng bò raøng buoäc vôùi noù. Caùc ORB thöôøng thieáu caùc static skeleton cho caùc cuoäc goïi töø xa, vì thuû tuïc caøi ñaët moät OI seõ gaén skeleton cuûa noù chæ vôùi ORB rieâng cuûa noù chöù khoâng phaûi client. Caùc ORB sau ñoù seõ taïo moät dynamic skeleton ñeå truyeàn caùc cuoäc goïi tôùi object töø xa theo ORB rieâng cuûa noù. Dynamic Skeleton coù theå ñöôïc duøng cho nhieàu lyù do, trong ñoù moät lyù do thöôøng ñöôïc chuù yù laø cho caùc object cuïc boä ñöôïc taïo ñoäng (dynamic) baèng vieäc duøng caùc script hoaëc caùc ngoân ngöõ bieân dòch. CHÖÔNG 6: CORBA interoperability (Khaû naêng töông taùc trong CORBA) I/ Khaû naêng töông taùc trong CORBA: Boán vai troø user veà khaû naêng töông taùc trong CORBA: Söû duïng nhöõng object phaân boá. Choïn löïa, mua, caøi ñaët, laäp caáu hình, baûo quaûn maïng object phaân boá. Vieát client vaø object cho heä thoáng. Neáu laø nhaø hieän thöïc ORB thì phaûi vieát veà khaû naêng töông taùc ORB. 1/ Ñoái vôùi ngöôøi söû duïng: Khaû naêng töông taùc CORBA laø kyõ thuaät trong suoát. Khi chuùng ta thöïc thi moät öùng duïng phaân boá, chuùng ta khoâng theå thaáy veà mode "töông taùc" hoaëc giao thöùc lieân laïc. Neáu laø user, chuùng ta khoâng theå "thaáy" veà khaû naêng töông taùc trong CORBA. 2/ Ñoái vôùi ngöôøi quaûn trò heä thoáng vaø nhöõng khaùch haøng mua ORB: Neáu laø nhöõng khaùch haøng mua ORB , chuùng ta phaûi thöïc hieän cuøng kieåu phaân tích vaø laäp caáu hình cho baát kyø heä thoáng coù khaû naêng töông taùc khaùc. Nhöõng kieán thöùc veà khaû naêng töông taùc trong CORBA giuùp chuùng ta ñaùp öùng ñöôïc nhöõng nhu caàu töø user. 3/ Ñoái vôùi nhöõng nhaø laäp trình ñoái töôïng: Trong tröôøng hôïp naøy, khaû naêng töông taùc trong CORBA hoaøn toaøn trong suoát ñoái vôùi nhöõng nhaø laäp trìng ñoái töôïng. Khi hoï cung caáp moät interface OMG IDL cho object, vò trí cuûa noù trôû neân trong suoát vaø nhöõng nhaø quaûn trò, caøi ñaët coù theå ñònh vò object ñoù ôû baát kyø ñaàu treân maïng. Nhöng caàn phaûi thieát keá öùng duïng sao cho ta coù theå keát hôïp toác ñoä thöïc thi vaø chöùc naêng. II/ Söï giao tieáp ORB-ORB: Khaû naêng töông taùc trong CORBA döïa treân söï giao tieáp ORB-ORB. Client Object Stub Skel ORB 1 Client Object Stub Skel ORB 2 Hình 6.1: Khaû naêng töông taùc thoâng qua söï giao tieáp ORB-ORB. Taát caû nhöõng client keát noái ORB 1 ñeàu coù theå truy xuaát nhöõng OI trong ORB1 vaø ORB2 Hình treân cho ta thaáy: Moät cuoäc goïi töø client cuûa ORB 1 thoâng qua IDL stub vaøo ORB core. ORB kieåm tra OR vaø truy cöùu vò trí cuûa implementation trong implementation Repository. Neáu implementation cuïc boä, ORB truyeàn cuoäc goïi thoâng qua skeleton cho object. Neáu laø töø xa, ORB1 truyeàn cuoäc goïi cho ORB2 thoâng qua ñöôøng giao tieáp vaø OI khoâng bieát client laø cuïc boä hay töø xa. Trong CORBA, söï giao tieáp luoân ñi töø ORB naøy ñeán ORB khaùc. 1/ Vieãn caûnh khoâng ñoàng nhaát: Coù hai caùch ORB trao ñoåi vôùi nhau: ORB lieân laïc vôùi nhau cuøng moät giao thöùc -> coù theå tröïc tieáp trao ñoåi vôùi nhau. Duøng caàu noái ñeå dòch giao thöùc naøy sang giao thöùc khaùc khi caùc ORB söû duïng caùc giao thöùc khaùc nhau. CORBA 2.0 cung caáp caû hai caùch naøy. III/ CORBA domain: Ñeå ñoàng nhaát mieàn cuûa toå chöùc chung cuøng chia xeû moät platforn chung, heä ñieàu haønh, phaàn cöùng vaø phaàn meàm maïng... vaø ñaët teân cho kieåu mieàn naøy"technology domain". Moät domain laø moät taàm vöïc rieâng trong ñoù caùc ñaëc tính chung ñöôïc ñöa ra vaø caùc nguyeân taéc chung ñöôïc tieán haønh sao cho ñaûm baûo tính trong suoát cuûa söï phaân boá; coù theå laø söï khaùc bieät veà vò trí kieán truùc boä xöû lyù, cô cheá maïng, bieåu dieãn döõ lieäu. Thöôøng domain laø moät taäp caùc ñoái töôïng chia xeû caùc ñaëc tính chung hoaëc tuaân theo caùc nguyeân taéc chung. Coù raát nhieàu kieåu domain khaùc nhau. Chuùng ta coù theå phaùt hoïa khaùi quaùt veà caùc domain: Chuùng toàn taïi vì lyù do naøo ñoù (nhö baûo maät chaúng haïn). Nhöõng öùng duïng vaø döõ lieäu qua giôùi haïn domain. Neáu moãi ñaïi löôïng cuûa moät domain ñeàu coù moät ñaïi löôïng töông öùng ôû domain khaùc (aùnh xaï), chuùng ta coù theå chuyeån ñoåi qua laïi giöõa caùc domain ôû nhöõng nôi caàn thieát. Caùc giôùi ORB chæ ñònh nghóa moät phaàn nhoû cuûa domain trong heä thoáng. Khi xem xeùt xong nhöõng phaàn töû ñoù, ta nhaän thaáy neân söû duïng daïng caàu noái ñeå hieän thöïc khaû naêng töông taùc beân trong CORBA hôn laø söû duïng söïc giao tieáp tröïc tieáp giöõa caùc ORB. Nhö vaäy, Bridging domain laø moät caùch khaùi nieäm, laø moät aùnh xaï hoaëc moät cô cheá noái naèm ôû bieân giôùi giöõa caùc domain baèng vieäc chuyeån caùc yeâu caàu giöõa hai domain rieâng bieät ( caàu noái domain). Coù hai caùch keát noái: keát noái kyõ thuaät vaø keát noái theo cheá ñoä trung gian. Coù hai daïng caàu noái: caàu noái tröïc tieáp vaø caàu noái trung gian. 1/ Keát noái coù tính kyõ thuaät vaø keát noái theo cheá ñoä trung gian: Keát noái coù tính kyõ thuaät ñoøi hoûi nghieâm ngaët veà cheá ñoä giao thöùc maïng hoaëc ñònh daïng döõ lieäu. Keát noái theo cheá ñoä trung gian: nghóa laø giao thoâng ngang qua caùc ranh giôùi ñöôïc giaùm saùt vaø ñieàu khieån baèng caùc phöông caùch phuï thuoäc vaøo noäi dung. 2/ Caàu noái tröïc tieáp vaø caàu noái trung gian: + Keát noái tröïc tieáp: hai domain trao ñoåi tröïc tieáp vôùi nhau qua caàu noái ñôn coù khaû naêng chuyeån ñoåi taát caû nhöõng chi tieát message ñoøi hoûi. Keát noái tröïc tieáp laø khaùi nieäm hai domain; toång quaùt hoaù leân laø keát noái nhieàu domain nghóa laø chöùa nhieàu baûn caùch keát noái hai domain, moãi moät baûn nhö theá ñöôïc keát noái cho töøng caëp domain. Caùch keát noái naøy nhanh vaø hieäu quaû vì moãi caàu noái ñöôïc thieát keá ñaëc bieät cho töøng caëp domain. Nhöng caùch naøy laïi keùm linh ñoäng vaø ñoøi hoûi quaù nhieàu caàu noái: soá caàu noái taêng theo haøm muõ vôùi soá domain vôùi n: soá domain Duøng cho caùc domain thuaàn tuùy quaûn trò. Thí duï nhö khi baêng qua caùc domain quaûn trò an toaøn giöõa caùc ORB gioáng nhau. Xeùt hình sau: Noái tröïc tieáp hai domain Domain cuûa protocol A Domain cuûa protocol B Full Bridge Noái tröïc tieáp nhieàu domain Domain cuûa Protocol A Domain cuûa Protocol B Noái A-D Noái B-C Noái A-C Noái B-D Noái C-D Domain cuûa protocol C Noái A-B Domain cuûa protocol D + Keát noái trung gian: taát caû nhöõng domain ñeàu moái vôùi moät protocol chung. Khi moät message truyeàn qua caàu noái ñaàu tieân, nhöõng phaàn caàn message ñoù ñöôïc chuyeån ñoåi vaøo protocol chung. Khi message truyeàn töø cuøng chung vaøo domain ñích, caàu noái thöù hai seõ chuyeån ñoåi noù sang protocol ñích. Thuaän lôïi: Lôïi ích lôùn nhaát cuûa caùch keát noái naøy: soá löôïng caàu noái taêng theo soá löôïng domain (=n-1 vôùi n: soá domain). Lôïi ích keá tieáp laø noù coù caáu hình "backone" cho nhöõng maïng lôùn, ña protocol; caùch keát noái trung gian ñaët caáu hình moät caùch töï nhieân cho nhöõng maïng naøy vì nhöõng caàu noái CORBA seõ ñònh vò trong cuøng vò trí nhöõng caàu noái protocol ñaõ saün saøng toàn taïi. Protocol chung ñöôïc söû duïng coù theå laø IIOP (internet inter_ORB protocol). Baát lôïi: Khoâng hieäu quaû cho nhöõng maïng nhoû ít domain nhö nhöõng maïng chæ coù hai domain neân döû duïng caùch keát noái tröïc tieáp. Phaûi dòch ñeán hai laàn ñoái vôùi haàu heát nhöõng message. Theá nhöng cuõng coù nhöõng message töø nhöõng domain coù cuøng protocol vôùi vuøng chung, do ñoù chuùng chæ caàn dòch moät laàn. Coù söï khaùc nhau giöõa half_bridge vaø full_bridge: half_bridge chæ caàn chuyeån ñoåi moät chieàu (töø moät protocol sang protocol khaùc); coøn full_bridge (töø moät protocol sang protocol khaùc vaø ngöôïc laïi). IIOP laø moät protocol ñôn maø moïi ORB phaûi giao tieáp vôùi noù. Nhöng tröôùc tieân, ORB khoâng caàn phaûi hieän thöïc protocol naøy; keá tieáp ORB ñöôïc pheùp hieän thöïc baát kyø protocol boå sung naøo. Xeùt hình veõ: Noái trung gian giöõa hai domain Protocol C Domain cuûa protocol B Domain cuûa protocol A Half Bridge Half Bridge (Backbone Protocol) Noái trung gian nhieàu domain Domain cuûa protocol B Domain cuûa protocol A Half-bridge B-D Half-bridge A-D Backbone- Protocol D Half-bridge C-D Domain cuûa protocol D Domain cuûa protocol C 3/ IORs (nhöõng OR coù khaû naêng töông taùc_lieân keát): Coù daïng chuaån cho OR . Noù ñöôïc söû duïng trong vieäc tìm ñöôøng cho request ORB ñôn vaø khoâng bao giôø ñöôïc truyeàn cho client hoaëc OI. Noù ñöôïc söû duïng trong caùc cuoäc goïi giöõa caùc ORB vôùi nhau -> ñöôïc goïi laø IOR (Interoperable object reference: tham chieáu ñoái töôïng coù khaû naêng töông taùc_lieân keát). Thoâng tin trong IR ñeå caùc cuoäc goïi truyeàn töø ORB naøy ñeán ORB khaùc. Ñieàu naøy ñoøi hoûi coù nhöõng thoâng tin sau: Kieåu cuûa object: ORB caàn bieát kieåu object ñeå löu tröõ toaøn boä heä thoáng. ORB ñang goïi duøng protocol gì? IOR lieät keâ protocol hoaëc nhöõng protocol ñöôïc chaáp nhaän bôûi ORB ñoù. Nhöng khi noù truyeàn qua caàu noái, noù trôû thaønh khaû goïi chæ ñoái vôùi nhöõng protocol ñöôïc chaáp nhaän bôûi caàu noái. Ñieàu naøy yeâu caàu nhöõng caàu noái nhaän ra IORs vaø caäp nhaät thoâng tin naøy khi chuùng truyeàn qua. IORs khoâng laø nhöõng muïc tieâu maø chuùng coøn ñöôïc truyeàn nhö thoâng soá. Nhöõng service naøo saün saøng ? Nhöõng cuoäc goïi thöôøng lieân quan ñeán nhöõng service ORB môû roäng. OR "null"? Nhaän ra giaù trò "null", caàu noái coù theå traùnh ñöôïc coâng vieäc caàn thieát. IOR ñöôïc ñaëc taû bôû OMG ñaùp öùng nhöõng nhu caàu naøy goàm ID kieåu ñöôïc theo sau bôûi moät hoaëc nhieàu "tagged profile". Moãi protocol ñeàu coù moät "tag" vaø moät "profile". "Tag" laø ñaïi löôïng 4 byte giuùp caùc nhaø xaây döïng ORB traùnh nhaân baûn. Profile chöùa taát caû nhöõng thoâng tin maø ORB töø xa caàn ñeå thöïc hieän cuoäc goïi ñang duøng protocol. Profile coù hai daïng ñôn hoaëc ña thaønh phaàn: Profile ñôn thaønh phaàn coù moät profile "id". Profile ña thaønh phaàn coù moät "id" thaønh phaàn cho moãi phaàn. Khi profile "id" cho protocol ña thaønh phaàn laø 1 thì moãi thaønh phaàn coù moät "id" thaønh phaàn cuûa chuùng noù. Ta xeùt ñeán IIOP vaø DCE ESIOP. "Tag" cuûa IIOP laø 0; DCE ESIOP ( Distributed Computing enviroment Enviroment specific inter_ORB protocol) coù moät profile ña thaønh phaàn. Daïng profile ñöôïc ñònh nghóa bôûi nhaø hieän thöïc hay nhoùm quy ñònh "tag". Nhöõng nhaø hieän thöïc khoâng caàn ñeå loä daïng format vaø noäi dung cuûa proifle ñeå register nhöng OMG seõ chaáp nhaän vaøtaïo moät ñònh nghóa chung neáu hoï coù ñöôïc. 4/ Keát noái inline vaø möùc request (request level): Baát kyø ngöôøi naøo coù hai ORB vaø trình dòch IDL coù theå xaây döïng caàu noái goàm skeleton töø moät ORB vaø stub töø caùi khaùc; vaø truyeàn request qua ñoù. Caàu noái request_level ñeå duøng ORB APIs; CORBA cung caáp moät soá API duøng ñöôïc trong caùc caàu noái naøy nhö DSI ñöôïc chuaàn hoùa ñaëc bieät cho vieäc "söû duïng". Caùc thaønh phaàn APIs vaø CORBA caàn thieát vaø höõu duïng trong vieäc laäp caàu noái: DII, DSI, IRs, OAs bao goàm BOA vaø ORs bao goàm IORs. Hình 6.5: Request_level bridge xaây döïng duøng ORB API toaøn cuïc REQUEST_LEVEL BRIDGE Object impl Client ORB 2 Skel DII ORB 1 DSI Stub Thay theá cho caàu noái request_level laø caàu noái in_line. Trong caàu noái in_line, code trong caùc ORB thöïc thi söï chuyeån ñoåi vaø söï aùnh xaï ñi töø ORB naûy sang ORB khaùc. Noùi chung, caàu noái "request_level" deã daøng xaây döïng hôn; trong khi caàu noái inline hieäu quaû hôn, maëc duø söï thieát keá kheùo leùo coù theå giaûm thieå toái ña caùc khoù khaên ñöôïc lieân keát vôùi caàu noái "request_level" ORB 1 DII Skel DSI Stub ORB 2 Object Client Hình 6.6: Caàu noái in_line ñöôïc xaây döïng duøng APIs trong ORB 5/ Caùc caàu noái "request_level" daïng "interface_specific" vaø "Generic": Caùc caàu noái "request_level" daïng: Interface_specific: ñöôïc xaây döïng ñeå duøng trình bieân dòch IDL, taïo ra stub vaø skeleton, kieåu caàu noái naøy chæ hoã trôï nhöõng interface ñöôïc toå hôïp trong caàu noái khi noù ñöôïc xaây döïng. "Generic": taän duïng ñöôïc ñaày ñuû nhöõng thuaän lôïi cuûa DII, DSI vaø IR; kieåu caàu noái moïi interface ñöôïc nhaän daïng ra trong heä thoáng. IV/ Caáu truùc cuûa söï ñaëc taû töông taùc: Khoâng coù API saün coù cho khaû naêng töông taùc CORBA 2.0. Neáu OR ñích laø moät object cuïc boä, cuoäc goïi thuoäc phaïm vi cuïc boä; neáu laø töø xa thì cuoäc goïi truyeàn töø xa Neáu ORB söû duïng CORBA 2.0 thì ñoù laø nhöõng gì ta coù ñöôïc vì client vaø ORB giao tieáp vôùi ORB chöù khoâng phaûi caû maïng. Taát caû nhöõng söï giao tieáp treân maïng chæ laø moät ORB giao tieáp vôùi moät ORB. Ñoù cuõng chính laø caùch CORBA laøm vieäc. GIOP (General inter_ORB protocol): chöù nhöõng ñaëc taû cho giao thöùc truyeàn thoâng ñieäp lieân keát ORB chung theo CORBA 2.0. GIOP ñöôïc thieát keá nhaèm ñöôïc hieän thöïc treân baát kyø phöông tieân ñaùng tin caäy naøo. Trong hình veõ ôû vò trí GIOP laø söï theå hieän döõ lieäu chung (CDE: Common Data Enviroment), baûy thoâng ñieäp GIOP vaø daïng format cuûa chuùng... ESIOP (Enviromentspecific inter_ORB protocol): moïi ESIOP ñònh nghóa protocol cuûa noù ñoäc laäp trong suoát thôøi gian noù ñaùp öùng caùc yeâu caàu giao tieáp ORB_ORB cuûa caùc ñaùp öùng vaø yeâu caàu ñoái töôïng. DCE ESIOP ñaëc taû söï giao tieáp ORB-ORB döïa treân cuoäc goïi vaø ñaùp öùng DCE RPC. Noù söû duïng cuøng CDR nhö GIOP nhöng thay theá baûy thoâng ñieäp cuûa GIOP baèng hai taùc vuï DCE RPC: locate vaø invoke. DCE ESIOP ñöôïc chæ ñònh chính thöùc thaønh DCE CIOP (DCE Common inter_ORB protocol trong ñaëc taû OMG) Hình 6.7: Caáu truùc cuûa söï ñaëc taû khaû naêng töông taùc CORBA 2.0 Caùc EIOP khaùc DCE CIOP ESIOP IPX OSI ... TCP/IP (IIOP) GIOP CORBA 2.0 CORBA CORE / IDL CORBA 1.2 API APPLICATION COMPONENT V/ GIOP vaø IIOP: IIOP laø GIOP goàm luoân TCP/IP. GIOP/IIOP ñöôïc thieát keá nhaèm ñaùp öùng nhöõng muïc tieâu sau: Tính saün coù roäng nhaát: IIOP döïa treân TCP/IP, saün coù cô cheá giao tieáp uyeån chuyeån vaø ñöôïc söû duïng roäng lôùn nhaát vaø chæ ñònh nghóa moät soá lôùp boå sung nhaèm chuyeån caùc request CORBA giöõa caùc ORB. Tính ñôn giaûn: Giöõ GIOP caøng ñôn giaûn caøng toát Tính tæ leä: (co daõn) ñöôïc thieát keá ñeå thích hôïp vôùi kích thöôùcInternet hoâm nay vaø tröôùc kia. Chi phí thaáp. Tính toång quaùt: GIOP ñöôïc thieát keá ñeå hieän thöïc baát kyøprotocol keát noái coù ñònh höôùng naøo, khoâng chæ TCP/IP. Trng laäp tính chaát kieán truùc: GIOP laäp caùc ñaûm nhieäm veà kieán truùc vaø hieän thöïc caùc ORB vaø caàu noái hoã trôï cho noù. GIOP bao goàm ba ñaëc taû: Ñònh nghóa CDR. Ñònh daïng thoâng ñieäp GIOP. Caùc ñaûm nhieâm löu chuyeån GIOP. Ñaëc taû IIOP coù theâm: Löu chuyeån IIOP . IIOP khoâng phaûi laø moät ñaë taû taùch bieät; noù laø moät aùnh xaï cuûa GIOP tôùi TCP/IP. 1/ CDR: CDR ñònh nghóa taát caû nhöõng kieåu döõ lieäu coù OMG IDL, type codes vaø nhöõng kieåu ñöôïc xaây döïng nhö struct, enum vaø sequence. Moät ñieåm cuûa CDR laø taát caû nhöõng GIOP "share" moät CDR vì theá keát noái phaàn naøy cuûa thoâng ñieäp deã daøng. CDR coù caùc ñaëc ñieåm sau: Thöù töï byte coù theå thay ñoåi (variable). Caùc maùy coù thöù töï byte chung coù theå trao ñoåi thoâng ñieäp maø khoâng phaûi trao ñoåi (swap) byte. Khi lieân laïc giöõa caùc maùy coù thöù töï byte khaùc nhau, ngöôøi khôûi ñaàu thoâng ñieäp xaùc ñònh thöù töï byte vaø ngöôøi nhaän ñaùp öùng cho vieäc swap caùc byte ñeå phuø hôïp vôùi thöù töï ñuùng cuûa noù. Moãi GIOP message chöùa moät flag chæ thò thöù töï byte thích hôïp. Caùc kieåu caên baûn ñöôïc chænh (saép thaúng haøng) cho pheùp döõ lieäu ñöôïc xöû lyù moät caùch hieäu quaû bôûi caùc caáu truùc cuûng coá vieäc saép döõ lieäu trong boä nhôù. - Aùnh xaï OMG IDL hoaøn toaøn: khi caàn thieát CDR ñònh nghóa bieåu dieãn caùc kieåu döõ lieäu chöa ñöôïc ñònh nghóa hoaëc phuï thuoäc hieän thöïc trong ñaëc taû CORBA Core. 2/ Daïng thoâng ñieäp GIOP: GIOP ñònh nghóa 7 daïng thoâng ñieäp cho söï giao tieáp ORB-ORB. Caùc thoâng ñieäp naøy mang yeâu caàu, ñònh vò OIs vaø quaûn lyù caùc keânh giao tieáp.Chuùng hoã trôï taát caû caùm vaø haønh vi ñöôïc ñoøi hoûi bôûi CORBA. Baûy thoâng ñieäp naøy ñôn giaûn hoùa vieäc giao tieáp. Trong haàu heát tröôøng hôïp, thoâng ñieäp töø client ORB ñeán object ORB ngay sau khi noù ñöôïc thieát laäp. Vaøi tính chaát cuûa vieäc löu chuyeån thoâng ñieäp: Vieäc keát noái khoâng caân ñoái: Vai troø cuûa client vaø server taùch bieät nhau, ñöïc gaùn luùc keát noái. Client baét ñaàu noái, gôûi yeâu caàu nhöng khoâng traû lôøi. Server chaáp nhaän noái, gôûi traû lôøi nhöng khoâng yeâu caàu. Request coù theå ñöïc "mutiplex": nghóa laø, nhieàu client trong cuøng ORB ban ñaàu cuøng "share" moät cuoäc keát noái tôùi ORB töø xa.Thoâng tin trong request kghaùc nhau trong cuøng cuoäc keát noái. Request coù theå overlap (phuû laép): Neáu khoâng ñoàng boä, thöù töï cuûa caùc request/reply ñöïôc hoã trôï thoâng qua caùc bieán request/reply. Trong baûy thoâng ñieäp, ba thoâng ñieäp ñöôïc gôûi töø client: Request, CancelRequest, LocateRequest. Ba ñöôïc gôûi töø server: Reply, LocateReply, CloseConnection; vaø MessageError ñöôïc gôûi cho caû hai. Xeùt ñeán caùc thoâng ñieäp: - Request message: bao goàm GIOP header, request header vaø thaân request. Header chöùa context service, moät request ID, object identifier, taùc vuï vaø moät soá thoâng tin khaùc.Thaân request chöùa taát caû tham soá in vaø inout. Reply message goàm GIOP header, GIOP request header vaø thaân reply. Thaân reply chöùa moät service context, request ID vaø moät maõ traïng thaùi (status code). Neáu maõ traïng thaùi chöùa no_exception, khi ñoù thaân reply chöùa trò traû veà, neáu theo sau laø caùc tham soá in vaø inout. Neáu maõ traïng thaùi laø USER_EXCEPTION hoaëc SYSTEM_EXCEPTION, thaân chöùa exception ñöôïc maõ hoùa. Neáu laø LOCATION_FORWARD: thaân chöùa moät IOR maø ORB ban ñaàu phaûi göûi laïi yeâu caàu ban ñaàu ñeán vôùi noù. Vieäc göûi laïi naøy thöïc hieän maø khoâng caàn bieát veà client ban ñaàu. CancelRequest chöùa GIOP header theo sau laø CancelRequest header vôùi request ID thoâng baùo cho server laø client khoâng ñôïi traû lôøi cho Request vaø LocateRequest nöõa. LocateRequest xaùc ñònh moät OR rieâng coù hôïp leä, server hieän haønh coù khaû naêng phuïc vuï caùc yeâu caàu hay khoâng, neáu khoâng thì xaùc ñònh ñòa chæ môùi cho yeâu caàu OR ñoù. LocateReply : GIOP header, LocateReply header vôùi request ID, trò traïng thaùi, thaân chöùa IOR cuûa ñích môùi, neáu coù. - CloseConnection : Thoâng tin cho caùc client raèng server seõ keát thuùc vieäc noái vaø khoâng ñaùp öùng yeâu caàu nöõa. Server chæ ñöôïc pheùp laøm ñieàu naøy khi khoâng coù yeâu caàu naøo chöa ñöôïc giaûi quyeát, maëc duø yeâu caàu coù theå ñöôïc nhaän trong khoaûng thôøi gian khi göûi CloseConnection vaø nhaän bieát cuûa noù ôû ORB nhaän. Ñieàu naøy cuõng cho caùc ORB bieát laø chuùng seõ khoâng nhaän traû lôøi caùc yeâu caàu chöa giaûi quyeát ôû cuoäc noái ñoù vaø phaûi tieán haønh moät cuoäc noái khaùc. ORB nhaän göûi moät ngoaïi leä COMM_FAILURE ñeán caùc client vôùi moät traïng thaùi hoaøn taát COMPLETED_MAYBE. - MessageError : Ñöôïc göûi ñeå ñaùp öùng cho baát kyø GIOP message naøo maø vì lyù do naøo ñoù khoâng theå nhaän bieát (uninterpretable). 3/ Löu chuyeån GIOP message: GIOP yeâu caàu: Protocol keát noái coù ñònh höôùng. Caáp phaùt ñaùng tin caäy. Nhöõng ngöôøi tam gia phaûi ñöôïc thoâng baùo nhöõng cuoäc keát noái khoâng theo thöù töï. Moâ hình baét ñaàu cuoäc keát noái phaûi ñaùp öùng nhöõng yeâu caáu naøo ñoù. 4/ IIOP: AÙnh xaï cuûa thoâng ñieäp GIOP chuyeån ñeán söï keát noái TCP/IP ñöôïc goïi laø IIOP (giao thöùc Internet Inter- ORB: Internet Inter-ORB Protocol). Noù bao goàm phaàn ñaëc taû cho IIOP IOR. VI/ ESIOPs vaø DCE CIOP: Giao thöùc khoâng phaûi laø GIOP thì laø ESIOP theo CORBA 2.0; nghóa laø kieán truùc cô baûn goàm mieàn trò vaø caùch keát noái, IOR vaø nhöõng interface coù khaû naêng töông taùc goàm DSI. Khoâng phaûi moïi giao thöùc li6n keát ORB ñeàu laøESIOP vì ta coù khaû naêng xaây döïng moät protocol rieâng maø khoâng thuoäc thaønh phaàn CORBA 2.0. DCE CIOP thay theá chöùc naêng cuûa 7 thoâng ñieäp baèng hai taùc vuï DCE RPC: invoke vaø locate. 1/ Vai troø cuûa DCE trong DCE CIOP: DCE CIOP laø giao thöùc giao tieáp ORB-ORB, noù ñoùng vai troø töông töï nhö IIOP. Client vaø OI chæ töông taùc vôùi nhöõng ORB cuïc boä. RPCs ñöôïc söû duïng bôûi DCE CIOP ñöôïc choïn moät caùch ñaëc bieät cho giao tieáp ORB-ORB. Söï caàn theát söû duïng DCE CIOP: chuùng ta coù theå traùnh laëp caùc coâng vieäc caøi ñaët, laäp caáu hình, huaán luyeän ñoäi nguõ cho nhöõng giao thöùc môùi baèng caùch mua DCE CIOP. Cuøng moät luùc chuùng ta coù theå taän duïng nhöõng tieän lôïi vieäc quaûn trò maïng DCE, Naming vaø Directory sevices, DCE sercurity. DCE CIOP nhaèm thoaû caùc goal: Hoã trôï caùc öùng duïng döïa treân CORBA vôùi heä thoáng quy moâ lôùn coù nhieàu nhaø cung caáp. Caùc dòch vuï ñoøn baåy do DCE cung caáp ôû baát cöù nôi naøo thích hôïp. Cho pheùp hieän thöïc hieäu quaû vaø tröïc tieáp söû duïng caùc DCE APIs toaøn cuïc. Vaãn giöõ ñöôïc khaû naêng töï do cho pheùp hieän thöïc ORB . 2/ Caáu truùc cuûa ñaëc taû DCE CIOP: DCE CIOP thöïc thi treân moät RPC coù khaû naêng töông taùc (lieân keát) vôùi nhöõng giao thöùc. Moät vaøi ñaëc ñieåm DCE RPC: Ñeå keát noái giöõa client vaø server, DCE RPC ñònh nghóa nhöõng giao thöùc baát keát noái vaø keát noái coù ñònh höôùng. Hoã trôï nhieàu giao thöùc phía döôùi transprot, bao goàm TCP/IP. Hoã trôï nhieàu yeâu caàu dôû dang ñeán nhieàu object CORBA treân cuøng moät cuoäc keát noái. Hoã trôï khaû naêng phaân maûnh cuûa caùc thoâng ñieäp. DCE CIOPsöû duïng cuøng moät CDR nhö GIOP; vaø nhöõng header thoâng ñieäp DCE ESIOP cuõng ñöôïc ñaëc taû nhö nhöõng kieåu cuûa OMG IDL. CAÙC DÒCH VUÏ CUÛA CORBA PHAÀN 1 : DÒCH VUÏ LIFECYCLE & RELATIONSHIP 1.1/TOÅNG QUAÙT VEÀ CAÙC DÒCH VUÏ VAØ CAÙC PHÖÔNG TIEÄN CUÛA CORBA (CORBAServices and CORBAfacilities) OMA (Object Management Architecture) (nhö trong hình 1.1) laø moâ hình caùc thaønh phaàn phaàn meàm do OMG ñeà xöôùng. Kieán truùc naøy moâ taû caùch thöùc caùc giao tieáp cuûa caùc thaønh phaàn phaàn meàm ñaõ ñöôïc chuaån hoùa thaâm nhaäp vaøo caùc ñoái töôïng öùng duïng ñeå taïo ra moät moâi tröôøng phaàn meàm caém vaø chaïy (plug-and-play) döïa treân kyõ thuaät höôùng ñoái töôïng. Caùc ñoái töôïng öùng duïng -maëc duø khoâng ñöôïc chuaån hoùa bôûi OMG - seõ söû duïng caùc Application Objects CORBAfacilities Vertical CORBAfacilities Horizontal CORBAfacilities Financial etc Healthcare User Interface Info Mgmt System Mgmt Task Mgmt Object Request Broker etc CORBAService Lifecycle Naming Persistence HÌNH 1.1 : Kieán truùc OMA cuûa OMG dòch vuï vaø caùc phöông tieän cuûa CORBA thoâng qua moät giao tieáp chuaån ñeå taïo ra söï tieän lôïi cho caû ngöôøi cung caáp vaø ngöôøi söû duïng CORBA : ñoái vôùi ngöôøi cung caáp, ñieàu naøy seõ laøm giaûm giaù thaønh ñeå phaùt trieån vaø môû roäng thò tröôøng, ñoái vôùi ngöôøi söû duïng, caùc thaønh phaàn naøy seõ taïo ra moâi tröôøng phaàn meàm coù giaù thaønh reû vaø deã daøng ñaët caáu hình cho phuø hôïp vôùi ñieàu kieän cuûa coâng ty cuûa hoï. Vôùi moãi dòch vuï vaø phöông tieän, OMG chuaån hoùa ñònh nghóa veà dòch vuï ñoù nhö sau : giao tieáp moâ taû theo OMG IDL, keøm theo ñoù laø ñònh nghóa roõ raøng veà chöùc naêng döôùi daïng vaên baûn. Vôùi CORBA, phaàn hieän thöïc cuûa caùc thaønh phaàn naøy khoâng ñöôïc chuaån hoùa. Ñieàu naøy cho pheùp caùc nhaø cung caáp ñöa ra caùc saûn phaåm caïnh tranh vôùi nhau veà caùc neàn (platform), toác ñoä thöïc thi, khaû naêng söû duïng taøi nguyeân vaø giaù caû khaùc nhau vaø do ñoù cho pheùp ngöôøi söû duïng coù ñöôïc lôïi ích cao nhaát bôûi vì hoï coù theå söû duïng moät phöông tieän ñaõ ñöôïc chuaån hoùa vaø söû duïng moät chöông trình chuaån cuûa baát kyø nhaø cung caáp naøo ñeå xöû lyù chuùng. Caùc dòch vuï cuûa CORBA cung caáp caùc chöùc naêng cô baûn maø moïi chöông trình höôùng ñoái töôïng ñeàu caàn ñeán. Caùc phöông tieän theo chieàu ngang (horizontal facilities) cung caáp caùc chöùc naêng ôû möùc öùng duïng (application-level) vôùi caùc tieän ích phoå bieán, chaúng haïn nhö caùc phöông tieän quaûn lyù taøi lieäu phöùc hôïp (compound document) , caùc phöông tieän trình dieãn vaø giuùp ñôõ. Cuoái cuøng, caùc phöông tieän theo chieàu doïc (vertical facilities) cung caáp moät caùch chuaån ñeå thao taùc vaø xöû lyù döõ lieäu vaø haøm, keát noái caùc öùng duïng coâng nghieäp trong caùc lónh vöïc khaùc nhau. Hieän nay, OMG ñaõ ñaëc taû cho caùc dòch vuï sau ñaây : Lifecycle vaø Relation services (caùc dòch vuï veà chu kyø soáng vaø quan heä giöõa caùc ñoái töôïng). Persistent Object vaø Externalization services (caùc dòch vuï veà tính vónh cöûu cuûa ñoái töôïng vaø caùc ñoái töôïng ngoaïi). Naming vaø Trader services (caùc dòch vuï veà quaûn lyù teân vaø choïn löïa ñoái töôïng). Event service (dòch vuï quaûn lyù söï kieän). Transaction vaø Concurrency service (caùc dòch vuï veà quaûn lyù giao dòch vaø xöû lyù ñoàng thôøi). Property vaø Query services (caùc dòch vuï veà tính chaát vaø truy vaán caùc ñoái töôïng). Security vaø Licensing services (caùc dòch vuï veà baûo maät vaø caáp quyeàn). Hieän nay, caùc thaønh vieân cuûa OMG cuõng ñang ñaëc taû cho dòch vuï Object Startup, chöùc naêng chính cuûa dòch vuï naøy laø hoã trôï cho dòch vuï Transaction. Beân caïnh ñoù, noù cuõng seõ ñöôïc caùc ñoái töôïng duøng ñeán khi caàn moät söï khôûi taïo ñaëc bieät khi ORB hoaëc caùc heä thoáng ñöôïc khôûi ñoäng laàn ñaàu tieân. Vaø moät dòch vuï nöõa laø Object Collection, dòch vuï naøy seõ chuaån hoaù caùc thao taùc nhö thieát laäp vaø thu thaäp caùc ñoái töôïng, thay cho ñònh nghóa taïm thôøi ñöôïc cung caáp bôûi dòch vuï Object Query hieän nay. 1.2/DÒCH VUÏ LIFECYCLE : Dòch vuï naøy moâ taû caùch thöùc vaø quy öôùc ñeå taïo ra, xoaù, sao cheùp vaø di chuyeån caùc ñoái töôïng. Quy öôùc naøy cho pheùp client thöïc hieän caùc taùc vuï lifecycle treân caùc object ôû caùc vò trí khaùc nhau, hoaëc ôû moät vò trí ñöôïc chæ ñònh tröôùc neáu caàn thieát, duøng giao tieáp chuaån vaø khoâng vi phaïm tính trong suoát veà vò trí ñaõ ñöôïc xaây döïng trong CORBA. 1.2.1/Caùc ñoái töôïng saûn xuaát (Factory Objects) : Ñeå taïo ra moät ñoái töôïng baèng caùch goïi CORBA , moät client phaûi coù moät tham khaûo (reference) ñeán moät ñoái töôïng maø noù coù theå gôûi moät leänh ñeán – ñoù laø factory object. Nhö chuùng ta ñaõ bieát, chæ coù hai caùch ñeå taïo ra caùc ñoái töôïng : Caùch ñaàu tieân laø caùc ñoái töôïng trong heä thoáng seõ ñöôïc khôûi taïo vaø chaïy töø daáu nhaéc doøng leänh (command-line prompt hoaëc kòch baûn – script). Neáu ngöôøi söû duïng khôûi taïo ñuùng ñoái töôïng, ñoái töôïng naøy ñeán löôït mình seõ taïo ra nhöõng ñoái töôïng môùi vaø thi haønh chuùng. Ñieàu naøy coù nghóa laø chuùng ta khoâng caàn moät factory cho moïi ñoái töôïng trong heä thoáng. Moät soá ñoái töôïng khoâng caàn ñeán factory object bôûi vì chuùng ñöôïc khôûi taïo töø moät thuû tuïc caøi ñaët. Nhö vaäy nhöõng ñoái töôïng caàn ñeán factory object ñeå khôûi taïo laø caùc ñoái töôïng coù nhieàu thöïc theå hoaëc baûn sao, hoaëc caùc ñoái töôïng caàn ñöôïc di chuyeån töø nôi naøy ñeán nôi khaùc, hoaëc caùc ñoái töôïng ñöôïc taïo ra vaø thöïc thi trong moät giai ñoaïn naøo ñoù vaø sau ñoù ñöôïc löu tröõ laïi, vaø noù ñöôïc xoùa ñi khi ñaõ hoaøn thaønh coâng vieäc cuûa mình. Khaùi nieäm factory object duøng ñeå chæ nhöõng ñoái töôïng taïo ra caùc ñoái töôïng khaùc, vaø quaù trình taïo ra ñoái töôïng laø moät phaàn cuûa heä thoáng ñoái töôïng phaân boá. Ngöôøi söû duïng vaãn coù theå taïo ra caùc ñoái töôïng theo caùch thoâng thöôøng nhaát trong moâi tröôøng ñoái töôïng rieâng bieät cuûa mình – ví duï nhö moät vaøi ORB cho pheùp ngöôøi söû duïng duøng caùch bình thöôøng cuûa ngoân ngöõ laäp trình ñeå taïo ra moät ñoái töôïng CORBA toàn taïi trong cuøng quaù trình cuûa ngöôøi söû duïng. Moät factory object coù theå laøm ñöôïc nhieàu coâng vieäc khaùc nhau, maëc duø quaù trình taïo ñoái töôïng coù theå khoâng caàn chuùng, caùc coâng vieäc cuûa factory object laø : Xaùc ñònh vò trí cho moät ñoái töôïng môùi. Phaân boå taøi nguyeân (boä nhôù, khoâng gian löu tröõ coá ñònh, caùc taøi nguyeân phuï thuoäc heä thoáng…) maø ñoái töôïng caàn. Ñaêng kyù vôùi BOA ñeå coù moät tham khaûo ñoái töôïng vaø con troû ñeán khoâng gian löu tröõ coá ñònh. Taïo ra moät ñoái töôïng söû duïng caùc taøi nguyeân vöøa nhaän ñöôïc. Baùo cho BOA bieát ñoái töôïng ñaõ ñöôïc kích khôûi ñoäng. Traû veà tham khaûo ñeán ñoái töôïng cho client goïi. Factory object coù theå laøm theâm coâng vieäc sau : Ñaêng kyù ñoái töôïng vôùi caùc dòch vuï Naming hoaëc Trader ñeå client coù theå xöû lyù chuùng neáu chuùng thích hôïp vôùi caùc dòch vuï naøy 1.2.2/Di chuyeån, sao cheùp vaø xoùa ñoái töôïng (Move, Copy, Delete) : Dòch vuï Lifecycle ñöa ra caùc ñaëc taû cho caùc taùc vuï sau : Di chuyeån moät ñoái töôïng. Sao cheùp moät ñoái töôïng. Xoùa moät ñoái töôïng. Ñöùng ôû goùc ñoä ngöôøi söû duïng, caùc taùc vuï treân döôøng nhö laø caùc dòch vuï do CORBA cung caáp, hoï chæ vieäc goïi caùc taùc vuï naøy vaø chuùng laøm vieäc. Tuy nhieân neáu ôû goùc ñoä ngöôøi hieän thöïc thì caùc taùc vuï treân khoâng phaûi laø dòch vuï coù saün, ngöôøi laäp trình phaûi töï hieän thöïc caùc taùc vuï naøy theo yeâu caàu cuûa mình. 1.2.3/Caùc loaïi giao tieáp vaø ñoái töôïng : Caùc ñoái töôïng coù giao tieáp cuûa caùc dòch vuï CORBA chia laøm hai loaïi nhö sau : Caùc ñoái töôïng ñaëc tröng (Specific object) : Caùc ñoái töôïng naøy coù muïc ñích chính laø söû duïng caùc giao tieáp cuûa CORBA (ví duï nhö caùc ñoái töôïng thuoäc dòch vuï Naming mang caùc giao tieáp ñeå giaûi quyeát vaán ñeà teân). Caùc ñoái töôïng toång quaùt (Generic objects) : caùc ñoái töôïng naøy chæ tình côø coù caùc giao tieáp cuûa caùc dòch vuï CORBA. Ví duï nhö moät ñoái töôïng taøi lieäu phöùc hôïp phaûi coù caùc giao tieáp cuûa dòch vuï Lifecycle maëc duø caùc taùc vuï di chuyeån, sao cheùp vaø xoùa khoâng phaûi laø muïc ñích chính cuûa chuùng). Caùc giao tieáp ñöôïc chia laøm ba loaïi khaùc nhau nhö sau : Caùc giao tieáp chöùc naêng (Functional interfaces) : caùc giao tieáp naøy thöïc söï cung caáp caùc dòch vuï (bao goàm dòch vuï Naming ñaõ ñöôïc löu yù tröôùc ñaây). Caùc giao tieáp tham gia (Participant interfaces) : ñöôïc taïo ra (vaø thöôøng ñöôïc keá thöøa bôûi) caùc ñoái töôïng toång quaùt tham gia vaøo caùc dòch vuï theo caùch naøo ñoù. Caùc giao tieáp quaûn trò (Administrative interfaces) : duøng ñeå quaûn trò caùc dòch vuï theo moät vaøi caùch naøo ñoù. Ñoái vôùi dòch vuï Lifecycle, caùc giao tieáp di chuyeån, sao cheùp vaø xoùa laø caùc giao tieáp tham gia vaø ñöôïc sinh ra bôûi caùc ñoái töôïng toång quaùt. Caùc dòch vuï CORBA naøy khoâng ñöôïc chuaån hoùa, vì vaäy moâi tröôøng ORB khoâng theå cung caáp dòch vuï Lifecycle; thay vaøo ñoù, noù chuaån hoùa giao tieáp maø ngöôøi söû duïng duøng ñeå goïi dòch vuï Lifecycle treân caùc ñoái töôïng toång quaùt. Moät caùch ñaëc tröng, caùc ñoái töôïng naøy seõ keá thöøa module Lifecycle nhö moät thaønh phaàn trong giao tieáp cuûa chuùng. Söï keá thöøa taïo ra moät caùch deã daøng ñeå thu ñöôïc caùc thaønh phaàn giao tieáp. Tuy nhieân, khi moät ñoái töôïng keá thöøa moät giao tieáp, ngöôøi laäp trình phaûi cung caáp caùc chöùc naêng cuï theå ñeå laøm vieäc vôùi giao tieáp ñoù. Sau ñaây laø caùc phaàn ñaëc taû duøng IDL cho caùc thao taùc sao cheùp, xoaù (thao taùc di chuyeån coù theå ñöôïc xem nhö laø toång hôïp cuûa hai thao taùc sao cheùp sang vò trí môùi vaø xoùa ñoái töôïng ôû vò trí cuõ). interface LifeCycleObject { LifeCycleObject copy (in FactoryFinder there, in Criteria the_criteria) raises (NoFactory, NotCopyable, InvalidCriteria, CannotMeetCriteria) void remove() raises(NotRemoveable); void move(in FactoryFinder there, in Criteria the_criteria) raises(NoFactory, NotMoveable, InvalidCriteria, CannotMeetCriteria) } muïc ñích cuûa taùc vuï xoùa (remove) laø huûy boû ñoái töôïng vaø giaûi phoùng heä thoáng khoûi caùc taøi nguyeân maø noù ñang giöõ. Coâng vieäc naøy khoâng ñöôïc ñaëc taû maø do ngöôøi laäp trình hieän thöïc. Tuy nhieân, coù moät soá ñoái töôïng thuoäc loaïi khoâng theå xoùa. Ñoái vôùi nhöõng ñoái töôïng naøy, ngöôøi laäp trình coù theå duøng moät trong hai caùch sau : Hoaëc laø cho caùc ñoái töôïng ñoù khoâng mang giao tieáp cuûa dòch vuï Lifecycle, do ñoù caùc lôøi goïi ñeán caùc phöông thöùc xoùa, sao cheùp, di chuyeån seõ traû veà moät ngoaïi leä (exception) chuaån laø BAD_OPERATION. Hoaëc laø vaãn cho caùc ñoái töôïng naøy coù giao tieáp cuûa dòch vuï Lifecycle, nhöng seõ traû veà ngoaïi leä NotRemoveable neáu coù lôøi goïi ñeán phöông thöùc naøy. Moät chöông trình client neân kieåm tra caû hai tröôøng hôïp naøy. Moät soá ñoái töôïng neân kieåm tra quyeàn cuûa client ñeå quyeát ñònh moät yeâu caàu xoùa ñoái töôïng laø hôïp leä hay khoâng, neáu lôøi goïi laø khoâng hôïp leä, moät ngoaïi leä chuaån NO_PERMISSION seõ ñöôïc traû veà. 1.2.4/Vò trí : Caùc ñoái töôïng tìm kieám (Factory Finders) Trong moâi tröôøng CORBA, söï trong suoát veà vò trí ñoàng nghóa vôùi vieäc chæ mua vaø caøi ñaët moät phieân baûn vaø chaïy ôû baát kyø nôi naøo. Ñeå minh hoïa cho khaùi nieäm ñoäc laäp veà vò trí, dòch vuï Lifecycle ñöa ra ñònh nghóa veà caùc ñoái töôïng tìm kieám (factory finder objects). Caùc ñoái töôïng naøy cho pheùp tìm ra moät ñoái töôïng baát kyø trong heä thoáng. Caùc factory finder object coù theå khoâng cuøng toàn taïi treân moät maùy rieâng bieät naøo vaø phaàn hieän thöïc cuûa caùc object naøy khoâng ñöôïc ñaëc taû, noù tuøy thuoäc vaøo nhaø cung caáp. Caùc object loaïi naøy coù phaàn giao tieáp ñöôïc ñaëc taû baèng IDL nhö sau : Factories find_factories ( in Key factory_key ) raises(no_factory) ñoái soá factory_key laø moät teân ñöôïc moâ taû trong dòch vuï Naming. Nhôø caùc ñoái töôïng naøy, chuùng ta coù theå tìm ra tham khaûo ñeán moät ñoái töôïng ñang toàn taïi trong heä thoáng. 1.3/DÒCH VUÏ RELATIONSHIP 1.3.1/Quan heä vaø vai troø (Relationship vaø Role) : Caùc thaønh phaàn, taát caû moïi ñoái töôïng ñöôïc keát noái vôùi nhau bôûi caùc quan heä. Do ñoù taùc vuï sao cheùp phaûi hieän thöïc caû vieäc sao cheùp nhöõng keát noái naøy bao goàm vieäc chæ sao cheùp ñoái töôïng chính vaø caùc quan heä cuûa noù hoaëc phöùc taïp hôn laø sao cheùp ñoái töôïng chính, caùc ñoái töôïng lieân quan vaø taïi ra caùc quan heä môùi ñeå keát noái caùc ñoái töôïng môùi naøy. Dòch vuï Relationship seõ cung caáp caùc luaät vaø caùc quan heä döôùi daïng caùc thuoäc tính coù theå ñieàu chænh ñöôïc. Vaø dòch vuï Relationship taïo ra caùc quan heä baèng caùch thay vì keát noái tröïc tieáp caùc ñoái töôïng, noù seõ taïo ra caùc vai troø (Role) vaø caùc ñoái töôïng nuùt (Node Object) coù vai troø nhö moät ñaïi dieän (proxy) cho caùc ñoái töôïng trong caùc quan heä cuûa chuùng. Caùch taïo quan heä nhö treân coù ít nhaát laø hai ñieåm thuaän tieän hôn so vôùi caùch keát noái tröïc tieáp caùc ñoái töôïng ñeå taïo quan heä : Thöù nhaát, noù cho pheùp caùc ñoái töôïng naøy keát noái vaøo dòch vuï naøy vaø khoâng laøm thay ñoåi ñoái töôïng, nhaát laø caùc ñoái töôïng khoâng coù saün caùc thuoäc tính quan heä . Thöù hai, noù cho pheùp duyeät qua caùc quan heä maø khoâng caàn duøng tröïc tieáp ñeán caùc ñoái töôïng. Neáu heä thoáng coù nhieàu ñoái töôïng hoaëc caùc ñoái töôïng khoù xöû lyù thì caùch laøm naøy toû ra öu vieät hôn. Tuy nhieân caùch laøm naøy cuõng coù moät ñieåm baát tieän nhoû, ñoù laø khoâng coù moät caùch thöùc chuaån naøo ñeå moät client coù theå truy xuaát ñeán caùc vai troø vaø caùc quan heä cuûa moät ñoái töôïng töø ñoái töôïng ñoù (maëc duø laøm ngöôïc laïi laø vieäc raát deã daøng). Ñieàu naøy coù nghóa laø caùc client giöõ caùc tham khaûo ñeán caùc ñoái töôïng seõ phaûi tìm ra caùc quan heä cuûa chuùng theo caùch khaùc. Bôûi vì caùc ñoái töôïng ôû möùc treân thöôøng coù khuynh höôùng laøm vieäc vôùi caùc quan heä – cuï theå laø caùc role vaø caùc node – hôn laø chính caùc ñoái töôïng maø chuùng ñaïi dieän. Coù nhieàu caùch ñeå tìm ra caùc quan heä cuûa moät ñoái töôïng, ngöôøi söû duïng hoaëc ngöôøi quaûn trò coù theå tìm ra chuùng nhôø vaøo dòch vuï Naming. Ngöôøi laäp trình ra caùc ñoái töôïng coù theå keá thöøa giao tieáp node seõ ñöôïc moâ taû sau ñaây, giao tieáp naøy cho pheùp caùc ñoái töôïng coù theå söû duïng tröïc tieáp caùc quan heä cuûa chuùng. Caùc ñoái töôïng khoâng thay ñoåi (ñaõ coù töø tröôùc vaø khoâng coù giao tieáp node) coù theå ñöôïc trao cho moät con troû ñeán caùc node cuûa chuùng nhö laø moät thuoäc tính nhôø vaøo moät dòch vuï môùi cuûa OMG laø dòch vuï Property. Quan heä coù theå ñöôïc moâ taû qua caùc ñaëc ñieåm sau ñaây : Kieåu (Type) : Caùc ñoái töôïng quan heä vaø caùc quan heä ñöôïc phaân chia thaønh caùc kieåu khaùc nhau. Ví duï nhö söï thueâ ngöôøi laøm coâng laø quan heä giöõa ngöôøi laøm vaø coâng ty, trong khi quan heä chuû nhaân ñònh nghóa quan heä giöõa ngöôøi vaø xe. Vai troø (Role) : Caùc ñoái töôïng coù theå coù nhöõng vai troø khaùc nhau. Ví duï nhö trong quan heä thueâ ngöôøi laøm coâng thì coâng ty ñoùng vai troø chuû vaø coâng nhaân ñoùng vai troø ngöôøi laøm. Moät ñoái töôïng coù theå ñoàng thôøi ñoùng nhöõng vai troø khaùc nhau trong caùc quan heä khaùc nhau .Ví duï moät ngöôøi coù theå laøm ôû moät coâng ty naøy vaø laøm chuû moät coâng ty khaùc. Baäc (Degree) : Ñaëc ñieåm cuûa caùc quan heä coù theå ñöôïc moâ taû baèng moät soá vai troø theo yeâu caàu. Ví duï nhö quan heä thueâ ngöôøi coù hai vai troø : ngöôøi chuû vaø ngöôøi laøm. Tuy nhieân ñaëc tính naøy khaùc vôùi ñaëc tính soá löôïng (Cardinality). Soá löôïng (Cardinality) : Soá löôïng toái ña caùc quan heä coù theå coù trong moät vai troø rieâng bieät. Ví duï nhö vai troø ngöôøi chuû coù theå bao goàm quan heä ngöôøi laøm vôùi nhieàu ngöôøi. Ngöõ nghóa (Semantic) : Ñònh nghóa caùc thuoäc tính quan heä vaø caùc taùc vuï ñaëc tröng. 1.3.2/Dòch vuï Relationship cô baûn : Role vaø Relationship Ñònh nghóa dòch vuï Relationship ñeà ra ba möùc ñoä khaùc nhau trong vieäc hieän thöïc dòch vuï naøy. Möùc cô baûn nhaát chæ ñònh nghóa caùc vai troø vaø caùc quan heä. Ñeå bieåu dieãn cho moät quan heä, dòch vuï Relationship taïo ra caùc ñoái töôïng vai troø (Role object) vaø caùc ñoái töôïng quan heä (Relationship object) ñeå keát noái caùc ñoái töôïng vai troø nhö trong hình veõ döôùi ñaây. Caùc ñoái töôïng vai troø cho bieát veà caùc ñoái töôïng maø chuùng ñaïi dieän cho vaø quan heä giöõa chuùng. Moãi moät ñoái töôïng quan heä chæ chaáp nhaän moät soá ñoái töôïng vai troø maø chuùng phaûi keát noái, neáu duøng moät ñoái töôïng vai troø khaùc vôùi ñoái töôïng vai troø maø chuùng chaáp nhaän seõ traû veà moät loãi. Owner Owner Thing Role Role Related Role Object Object Relationship Object Yugo Robert Owner Relationship HÌNH 1.2 : Quan heä giöõa Robert vaø Yugo (Robert sôû höõu Yugo) Tuy nhieân caùch laøm naøy coù moät soá haïn cheá. Thöù nhaát, noù khoâng cho pheùp ngöôøi söû duïng truy xuaát caùc quan heä töø caùc ñoái töôïng ban ñaàu ñöôïc ñaïi dieän bôûi caùc ñoái töôïng vai troø baèng caùch duøng giao tieáp cuûa dòch vuï Relationship hoaëc caùc taùc vuï bôûi vì caùc ñoái töôïng naøy khoâng thuoäc phaïm vi quaûn lyù cuûa dòch vuï naøy (Neáu moät ñoái töôïng muoán tham gia vaøo caùc quan heä, noù phaûi keát thöøa giao tieáp node, nhöng ñieàu naøy khoâng phaûi laø moät phaàn cô baûn cuûa dòch vuï naøy). Thöù hai, caùc quan heä khoâng coù khaû naêng duøng chung caùc ñoái töôïng vai troø. Ñeå ñaùp öùng ñöôïc caùc ñieàu kieän naøy, caàn ñeán möùc tieáp theo cuûa dòch vuï Relationship, möùc naøy cung caáp theâm caùc ñoái töôïng Node vaø giao tieáp duyeät quan heä (Traversal). 1.3.3/Möùc thöù hai cuûa dòch vuï Relationship : Sô ñoà caùc ñoái töôïng quan heä (Graphs of Related Objects) Möùc naøy hoã trôï cho sô ñoà caùc ñoái töôïng quan heä baèng caùch boå sung theâm caùc giao tieáp nuùt (Node) vaø duyeät quan heä (Traversal). Giao tieáp Node thu thaäp taát caû caùc vai troø cuûa moät ñoái töôïng . Giao tieáp Traversal cung caáp taùc vuï duyeät treân sô ñoà caùc ñoái töôïng quan heä baèng caùch ñi theo caùc quan heä vaø duyeät qua caùc ñoái töôïng quan heä trong sô ñoà ñuùng moät laàn. Ñieàu naøy ñaëc bieät coù ích khi ta theâm vaøo giao tieáp Traversal caùc taùc vuï boå sung nhö laø di chuyeån hoaëc sao cheùp ñoái töôïng. Ví duï ta coù sô ñoà sau : Chapter Node Spreadsheet Graph Chapter Node Logo Node Document Node Related Object Role Object Relationship Object Contained Contained Role Role Containment Containment Relationship Relationship Contained Contained Role Role Containment Relationship Contained Contained Role Role Containment Relationship Contained References Role Role References Relationship Referenced Role HÌNH 1.3 : Caùc thaønh phaàn quan heä cuûa moät baûn baùo caùo. Moät trong caùc chöông coù chöa moät bieåu ñoà coù tham khaûo ñeán moät baûn tính. Moät chöông khaùc coù chöùa logo. Sô ñoà naøy bieåu dieãn cho moät taøi lieäu phöùc hôïp goàm coù nhieàu thaønh phaàn khaùc nhau nhö vaên baûn, hình aûnh, baûng tính… vaø caùc thaønh phaàn naøy coù quan heä vôùi nhau. Ôû möùc naøy, moãi ñoái töôïng ñöôïc ñaïi dieän baèng moät ñoái töôïng node ñôn, khoâng phuï thuoäc vaøo soá vai troø vaø soá quan heä maø chuùng tham gia vaøo. Moät node seõ laø moät ñoái töôïng rieâng bieät khi noù bieåu dieãn cho moät ñoái töôïng khoâng thay ñoåi (immutable object), nhöng noù cuõng coù theå ñöôïc laäp trình ñeå thöøa keá giao tieáp naøy. Do ñoù trong sô ñoà naøy, ñoái töôïng document laø moät node chöùa taát caû caùc tham khaûo ñeán ñoái töôïng maø noù ñaïi dieän cuõng nhö taát caû caùc vai troø maø noù tham gia trong caùc quan heä cuûa noù vôùi caùc ñoái töôïng khaùc. Trong moâi tröôøng höôùng ñoái töôïng phaân taùn, taát caû caùc ñoái töôïng trong sô ñoà treân ñeàu laø caùc ñoái töôïng ñaõ ñöôïc kích hoaït vaø coù theå ñöôïc taïo ra bôûi caùc chöông trình ñoäc laäp nhau. Vaø ñoái töôïng duy nhaát keát noái caùc ñoái töôïng naøy laïi vôùi nhau chính laø ñoái töôïng document node ñaõ ñöôïc ñeà caäp ôû treân. 1.3.4/Möùc thöù ba : Chuùngta seõ khoâng ñeà caäp ñeán möùc naøy trong taøi lieäu naøy. 1.3.5/Ñoàng nhaát ñoái töôïng (Object Identity) : Thoaït troâng thì vaán ñeà hai ñoái töôïng coù ñoàng nhaát vôùi nhau hay khoâng laø moät vaán ñeà raát deã daøng, nhöng trong moät moâi tröôøng phaân boá thì vaán ñeà khoâng phaûi laø ñôn giaûn. Ví duï nhö vôùi ñoái töôïng proxy trong moâi tröôøng CORBA, neáu nhö chuùng ta goïi moät taùc vuï treân ñoái töôïng naøy hoaëc treân ñoái töôïng thaät söï thì keát quaû traû veà laø nhö nhau, hoaëc neáu nhö chuùng ta muoán xaùc ñònh traïng thaùi cuûa ñoái töôïng thì keát quaû cuõng gioáng nhau. Nhöng thaät ra, coù hai tham khaûo rieâng bieät trong tröôøng hôïp naøy, moät tham khaûo ñeán caàu noái (bridge) trong khi tham khaûo kia laø tham khaûo ñeán ñoái töôïng thaät söï. Vaäy vaán ñeà ñoàng nhaát hai ñoái töôïng phuï thuoäc vaøo vieäc chuùng ta nhìn chuùng döôùi goùc ñoä naøo. Vôùi quan ñieåm cuûa ngöôøi ñònh caáu hình heä thoáng vaø caùc giao thöùc maïng thì hai ñoái töôïng naøy laø hai ñoái töôïng khaùc nhau, nhöng vôùi quan ñieåm laø ngöôøi goïi caùc taùc vuï vaø nhaän keát quaû traû veà cuûa caùc ñoái töôïng naøy thì chuùng laø nhö nhau. Vì vaäy CORBA khoâng hoã trôï cho vaán ñeà ñoàng nhaát giöõa caùc ñoái töôïng ôû möùc ñaëc taû kieán truùc cô baûn. Tuy nhieân dòch vuï Relationship phaûi hieän thöïc taùc vuï duyeät vaø vaøi yù nieäm veà söï ñoàng nhaát ñeå bieát ñöôïc caùc ñoái töôïng ñang laøm gì vaø khi naøo thì noù hoaøn taát coâng vieäc cuûa mình. Do ñoù, dòch vuï Relationship ñònh nghóa ra moät ñôn theå (module) laø Object Identity ñeå hoã trôï cho khaùi nieäm ñoàng nhaát ñoái töôïng. Moïi ñoái töôïng coù quan heä hoaëc caùc taùc vuï lifecyle phöùc hôïp (compound lifecycle operations) phaûi coù giao tieáp IdentifiableObject. Moïi ñoái töôïng khaùc muoán giaûi quyeát vaán ñeà ñoàng nhaát coù theå keá thöøa giao tieáp naøy. Giao tieáp naøy coù hai thaønh phaàn. Thaønh phaàn thöù nhaát laø thuoäc tính chæ ñoïc (readonly attribute) Object Identifier traû veà moät soá ID töï choïn ngaãu nhieân maø client coù theå söû duïng ñeå so saùnh vôùi ID cuûa moät IdentifiableObject khaùc. Neáu hai ID naøy laø khaùc nhau thì caùc ñoái töôïng chaéc chaén laø khaùc nhau, neáu chuùng truøng nhau thì coù theå laø hai ñoái töôïng cuøng loaïi hoaëc truøng nhau. Phöông thöùc kieåm tra söï ñoàng nhaát naøy toû ra coù hieäu quaû neáu chæ muoán bieát hai ñoái töôïng coù ñoàng nhaát hay khoâng. Noù coù theå ñöôïc duøng tröôùc taùc vuï duyeät ñoái töôïng, neáu keát quaû laø moïi ñoái töôïng ñeàu coù moät ID rieâng bieät thì taùc vuï duyeät coù theå ñöôïc thi haønh, neáu khoâng thì caàn phaûi duøng moät ñoaïn maõ khaùc vaø duøng moät thaønh phaàn khaùc cuûa IdentifiableObject. Thaønh phaàn thöù hai laø taùc vuï is_identical. Taùc vuï naøy seõ coù ñoái soá laø tham khaûo ñeán caùc ñoái töôïng muoán kieåm tra söï ñoàng nhaát, noù seõ traû veà trò true neáu caùc tham khaûo naøy chæ ñeán caùc ñoái töôïng ñoàng nhaát, ngöôïc laïi noù seõ traû veà trò false. Ñoái töôïng phaûi töï hieän thöïc caùch kieåm tra. 1.3.6/ Ñôn theå lifecycle phöùc hôïp (Compound Lifecycle Module) : Dòch vuï Relationship ñöôïc OMG thoâng qua sau dòch vuï Lifecycle vaø vôùi söï ra ñôøi cuûa dòch vuï naøy, OMG ñaõ coù ñöôïc coâng cuï caàn thieát ñeå ñònh roõ caùc taùc vuï treân caùc ñoái töôïng phöùc hôïp. Ñôn theå Compound Lifecycle - ñöôïc chaáp nhaän ñoàng thôøi vôùi dòch vuï Relationship - laø ñôn theå cho dòch vuï naøy. Giao tieáp cuûa Compound Lifecycle ñònh nghóa moät giao tieáp Operations, giao tieáp naøy ñònh nghóa caùc taùc vuï lifecycle treân sô ñoà caùc ñoái töôïng quan heä ñöôïc cung caáp bôûi dòch vuï Relationship. Khi moät client goïi moät taùc vuï lifecycle treân ñoái töôïng node, ñoái töôïng naøy seõ taïo ra moät ñoái töôïng hoã trôï giao tieáp CosCompoundLifeCycle::Operations vaø goïi phöông thöùc lifecycle treân chính noù. Baét ñaàu baèng vieäc duyeät treân sô ñoà, tuy nhieân noù khoâng duyeät qua moïi ñoái töôïng maø thay vaøo ñoù, noù chæ nhaän moät giaù trò truyeàn töø moãi ñoái töôïng role. Quaù trình duyeät coù theå laø moät trong caùch duyeät sau : saâu (deep), caïn (shallow), haïn cheá (inhibit) vaø khoâng aûnh höôûng (none). Tuøy theo caùc taùc vuï lifecycle caàn thöïc thi maø coù caùc caùch duyeät khaùc nhau. deep : taùc vuï seõ ñöôïc thöïc thi treân moät ñoái töôïng node, ñoái töôïng quan heä vaø caùc ñoái töôïng lieân quan ñeán noù. shallow : taùc vuï seõ ñöôïc thöïc hieän treân ñoái töôïng quan heä nhöng khoâng thöïc hieän treân caùc ñoái töôïng coù lieân quan. Ví duï nhö ñoái vôùi taùc vuï sao cheùp theo caùch naøy thì ñoái töôïng ban ñaàu vaø ñoái töôïng quan heä seõ ñöôïc sao cheùp, nhöng ñoái töôïng quan heä môùi vaãn chæ ñeán caùc ñoái töôïng coù lieân quan ñeán ñoái töôïng ban ñaàu. none : taùc vuï seõ khoâng aûnh höôûng gì ñeán ñoái töôïng quan heä vaø caùc ñoái töôïng lieân quan. Trong tröôøng hôïp naøy, quaù trình duyeät seõ khoâng duyeät caùc ñoái töôïng coù lieân quan vaø khoâng coù taùc vuï lifecycle naøo ñöôïc thöïc hieän vôùi chuùng. inhibit : taùc vuï khoâng ñöôïc thöïc hieän treân ñoái töôïng ñöôïc chæ ñònh qua baát kyø node naøo, noùi caùch khaùc, noù baûo veä cho node khoûi caùc taùc vuï lifecycle. Ñieàu naøy ñaëc bieät coù ích khi duøng vôùi taùc vuï di chuyeån (move) ñoái töôïng, vì noù ñaûm baûo raèng ñoái töôïng vaãn tieáp tuïc toàn taïi. Quaù trình duyeät taïo ra moät danh saùch caùc ñoái töôïng, node, vai troø vaø caùc quan heä. Sau ñoù noù seõ xem xeùt laïi danh saùch vaø boû ñi caùc tham khaûo ñeán caùc ñoái töôïng trong danh saùch neáu coù nhieàu hôn moät tham khaûo ñeán cuøng moät ñoái töôïng. Sau ñoù noù seõ thöïc thi taùc vuï lifecycle treân caùc ñoái töôïng tröôùc, sau ñoù laø caùc vai troø vaø sau cuøng laø caùc ñoái töôïng quan heä. Caùc taùc vuï Compound Lifecycle coù leõ laø nhöõng ví duï toát nhaát cho thaáy khaû naêng caùc ñoái töôïng khaùc nhau töø nhöõng nguoàn khaùc nhau laøm vieäc vôùi nhau moät caùch trôn tru qua ñaëc taû cuûa OMG. Vai troø, quan heä vaø caùc ñoái töôïng node laø caùc ñoái töôïng ñaëc tröng, phaàn hieän thöïc cuûa caùc ñoái töôïng naøy ñöôïc cung caáp saün trong dòch vuï Lifecycle vaø Relationship, caùc taùc vuï Compound Lifecycle cuõng ñöôïc cung caáp theo cuøng caùch nhö vaäy. Nhöng nhöõng ñoái töôïng tham gia thöïc hieän caùc taùc vuï naøy laø caùc ñoái töôïng coù töø nhöõng nguoàn raát ña daïng vaø chuùng thöïc hieän caùc taùc vuï naøy thoâng qua giao tieáp maø chuùng keá thöøa vaø duøng caùc taùc vuï Lifecycle chuaån cho töøng ñoái töôïng. Caùc ñoái töôïng naøy coù theå laøm vieäc chung vôùi nhau ñöôïc bôûi vì khi taùc vuï duyeät hoaøn taát, client coù theå goïi caùc taùc vuï Lifecycle chuaån nhö di chuyeån, sao cheùp, xoaù treân caùc ñoái töôïng vaø coù theå bieát chaéc raèng chuùng coù theå ñaùp öùng caùc lôøi goïi naøy. Do ñoù, neáu coù ñoái töôïng naøo coù caùc phöông thöùc xoùa hoaëc sao cheùp thì neân ñöôïc hieän thöïc vôùi giao tieáp chuaån do dòch vuï Lifecycle cung caáp. 1.4/ROLE VAØ RELATIONSHIP IDL 1.4.1/Ñaëc taû IDL cho caùc ñoái töôïng RoleFactory vaø Role : Caùc ñoái töôïng role ñöôïc taïo ra bôûi caùc ñoái töôïng RoleFactory. Sau ñaây laø ñaëc taû IDL cho ñoái töôïng RoleFactory : interface RoleFactory { exception …; readonly attribute InterfaceDef role_type; … Role create_role ( in RelatedObject related_object) raises (NilRelatedObject, RelatedObjectTypeError); } Moãi ñoái töôïng RoleFactory chæ taïo ra caùc ñoái töôïng Role coù kieåu ñôn, vì theá caàn coù moät daõy caùc ñoái töôïng RoleFactory neáu muoán phaân loaïi caùc ñoái töôïng coù vai troø khaùc nhau. Baèng caùch laøm cho caùc vai troø coù kieåu thaät söï cuûa caùc ñoái töôïng Role, dòch vuï Relationship coù theå coù ñöôïc nhöõng thuaän lôïi trong vieäc kieåm tra tính nhaát quaùn cuûa caùc ñoái töôïng heä thoáng khi caùc quan heä ñöôïc taïo ra sau ñoù. Ñoái töôïng RoleFactory chöùa thoâng tin veà kieåu cuûa ñoái töôïng role trong thuoäc tính chæ ñoïc role_type phoøng khi ngöôøi söû duïng muoán kieåm tra kieåu ñoái töôïng. Caùc ñoái töôïng thaät söï (hay coøn goïi laø caùc ñoái töôïng quan heä – Related Object) - laø nhöõng ñoái töôïng maø caùc ñoái töôïng Role laø ñaïi dieän cho chuùng - ñöôïc gaùn cho caùc ñoái töôïng Role khi caùc ñoái töôïng Role ñöôïc taïo ra. Ñieàu naøy cho pheùp caùc ñoái töôïng RoleFactory kieåm tra kieåu cuûa caùc ñoái töôïng quan heä coù ñuùng vôùi vai troø maø chuùng tham gia hay khoâng. Sau ñaây laø ñaëc taû IDL cho ñoái töôïng Role (chæ neâu moät phaàn): interface Role { exception …; readonly attribute RelatedObject related_object; RelatedObject get_other_related_object ( in RelationshipHandle Rel, in RoleName target_name) raises(…); Role get_other_role ( in RelationshipHandle rel, in RoleName target_name) raises(…); void get_relationships ( in unsigned long how_many, out RelationshipHandle rels, out RelationshipIterator iterator); void link ( in RelationshipHandle rel, in NameRoles name_roles) raises(…); void unlink ( in RelationshipHandle rel) raises(…); } Thuoäc tính chæ ñoïc RelatedObject ñöôïc gaùn khi ñoái töôïng Role ñöôïc taïo ra vaø coù theå ñöôïc baát kyø client naøo truy caäp ñeán. Khi moät ñoái töôïng Role thuoäc veà moät quan heä cuï theå, moät client coù theå truy xuaát ñeán caùc ñoái töôïng Role khaùc vaø caùc ñoái töôïng quan heä vôùi chuùng baèng caùch duøng caùc taùc vuï get_other_role vaø get_other_related_objects. Bôûi vì moät ñoái töôïng Role coù theå thuoäc veà moät soá quan heä khaùc nhau neân cuõng coù moät phöông thöùc laø get_relationships ñeå traû veà soá caùc quan heä maø ñoái töôïng Role naøy thuoäc veà. Caùc taùc vuï link vaø unlink seõ ñöôïc ñeà caäp ñeán trong phaàn ñaëc taû giao tieáp cho ñoái töôïng Relationship Factory. 1.4.2/Ñaëc taû IDL cho caùc ñoái töôïng Relationship Factory vaø Relationship : Caùc ñoái töôïng Relationship ñöôïc taïo ra bôûi caùc ñoái töôïng Relationship Factory, vaø öùng vôùi moãi kieåu ñoái töôïng Relationship khaùc nhau thì coù moät ñoái töôïng Relationship Factory rieâng bieät. Ñeå taïo ra moät ñoái töôïng Relationship, chuùng ta goïi phöông thöùc create cuûa ñoái töôïng Relationship Factory vaø cung caáp ñoái soá laø moät caáu truùc Role vaø keát quaû traû veà seõ laø moät ñoái töôïng Relationship : struct NamedRole(Rolename name; Role aRole); typedef sequence NamedRoles; interface RelationshipFactory { struct NamedRoleType { RoleName name; InterfaceDef named_role_type; } typedef sequence NamedRoleTypes; readonly attribute InterfaceDef relationship_type; readonly attribute unsigned short degree; readonly attribute NamedRoleTyps named_role_types; exception(…); Relationship create ( in NamedRoles named_roles ) raises ( RoleTypeError, MaxCardinalityExceeded, DegreeError, DuplicateRoleName, UnknowRoleName ) } Caùc Role ñöôïc truyeàn cho ñoái töôïng Relationship Factory trong caáu truùc NamedRole, ñaëc taû IDL treân ñaây ñònh nghóa ñaày ñuû caùc thuoäc tính chæ ñoïc cho pheùp client coù theå xaùc nhaän nhöõng gì ñaõ bieát veà caùc ñoái töôïng factory – loaïi quan heä naøo maø caùc ñoái töôïng naøy coù theå taïo ra, kieåu cuûa ñoái töôïng Role maø noù chaáp nhaän… Taùc vuï Relationship create nhaän caùc ñoái soá laø caùc teân cuûa caùc role vaø traû veà moät quan heä. Ñoái töôïng RelationshipFactory duøng taùc vuï link trong quaù trình khôûi taïo. Tröôùc khi hoaøn thaønh vieäc khôûi taïo, ñoái töôïng RelationshipFactory duøng taùc vuï link ñeå thoâng baùo cho caùc role lieân quan raèng chuùng ñaõ ñöôïc ñem vaøo quan heä naøy. Sau ñaây laø phaàn ñaëc taû IDL cho ñoái töôïng Relationship : interface Relationship : IdentifiableObject { … readonly attribute NamedRoles name_roles; void destroy () raises (CannotUnlink); } Vôùi thuoäc tính name_roles, client coù theå tìm ñöôïc caùc ñoái töôïng lieân quan ñeán quan heä naøy. Taùc vuï destroy seõ goïi taùc vuï unlink cuûa ñoái töôïng Role thuoäc quan heä naøy. 1.4.3/Ñaëc taû IDL cho ñoái töôïng Node : Caùc ñoái töôïng Node ñöôïc keá thöøa töø caùc ñoái töôïng Identifiable, caùc ñoái töôïng naøy thu thaäp caùc ñoái töôïng quan heä vaø caùc ñoái töôïng role. Ñoái töôïng Node cho pheùp duyeät treân sô ñoà caùc ñoái töôïng quan heä baèng caùch cung caáp caùc thaønh phaàn sau ñaây : Moät thuoäc tính chæ ñoïc traû veà taát caû caùc ñoái töôïng Role cuûa noù. Moät taùc vuï traû veà taát caû caùc Role vôùi moät kieåu rieâng bieät. Caùc taùc vuï ñeå theâm vaø xoùa caùc Role trong danh saùch caùc Role cuûa noù. Coøn coù moät thuoäc tính khaùc traû veà ñoái töôïng quan heä. Thuoäc tính naøy khoâng ñöôïc duøng trong vieäc duyeät sô ñoà, nhöng noù laø keát noái caàn thieát ñeå thöïc thi moät soá taùc vuï treân caùc ñoái töôïng quan heä nhö sao cheùp hoaëc xoùa döïa treân keát quaû cuûa vieäc duyeät sô ñoà. Giao tieáp node coù theå ñöôïc duøng theo hai caùch : Caùch thöù nhaát laø caùc ñoái töôïng ñöôïc nhaän thaáy laø coù quan heä coù theå thöøa keá giao tieáp naøy, caùch n

Các file đính kèm theo tài liệu này:

  • docBAOCAO (2).DOC