Programavimas

RMI per IIOP

Kas yra RMI per IIOP?

„RMI over IIOP“ (toliau - RMI-IIOP), kurį kartu sukūrė „IBM“ ir „Sun“, yra nauja IIMI („Internet Inter-ORB Protocol“) RMI (nuotolinio metodo iškvietimas) versija, sujungianti paprastas RMI programavimo funkcijas su CORBA sąveika. Ši nauja RMI versija buvo oficialiai išleista birželio mėn. Ir buvo laisvai prieinama „Sun“ svetainėje (informacijos apie tai, kur galite ją atsisiųsti, žr. Toliau esančiame skyriuje „Ištekliai“). „Sun“ nuorodos diegimas veikia „Windows 9x / NT“ ir „Solaris“. Tai yra standartinis plėtinys, palaikantis tiek JDK 1.1.6, tiek „Java 2“ platformą.

RMI ir CORBA kūrėsi savarankiškai kaip paskirstytų objektų programavimo modeliai. RMI, EJB ir Jini technologijų pagrindas, buvo pristatytas kaip Java pagrįstas, lengvai naudojamas paskirstytų objektų programavimo modelis. CORBA („Common Object Request Broker Architecture“), apibrėžta OMG (Object Management Group), yra gerai žinomas paskirstytų objektų programavimo modelis, palaikantis daugybę kalbų. IIOP protokolas sujungia skirtingų gamintojų CORBA produktus, užtikrindamas jų tarpusavio sąveiką. RMI-IIOP tam tikra prasme yra RMI ir CORBA santuoka.

Šiame straipsnyje manome, kad jūs jau esate susipažinę su CORBA pagrindais. Jei jums reikia daugiau pagalbos, kad įsibėgėtumėte, žemiau esančiame išteklių skyriuje yra naudinga nuoroda.

Prieš RMI-IIOP

Pažvelkite į žemiau pateiktą 1 paveikslą. Erdvė virš centrinės horizontalios linijos reiškia pradinį RMI domeną; žemesnysis regionas reprezentuoja CORBA ir IIOP pasaulį. Šie du atskiri pasauliai, išsivystę savarankiškai, istoriškai negalėjo bendrauti tarpusavyje. Pavyzdžiui, RMI vietinis protokolas JRMP („Java Remote Method Protocol“) negali prisijungti prie kitų protokolų.

Jei vienintelė programavimo kalba, kurios jums reikia naujame projekte, yra „Java“, RMI ir JRMP naudojimas - derinys, vadinamas RMI (JRMP) likusiai šio straipsnio daliai - tradiciškai buvo geriausias pasirinkimas. Skirtingai nuo CORBA, kuriai reikia naudoti gana sudėtingą sąsajos apibrėžimo kalbą (IDL), RMI (JRMP) siūlo paprastą programavimą „Java“ mėgėjams. Kita vertus, CORBA leidžia programuoti paskirstytus objektus įvairiose platformose ir skirtingomis programavimo kalbomis. Kūrėjams reikia paskirstytų objektų programavimo ne tik naujiems projektams, bet ir senų programinės įrangos išteklių naudojimui. Žinoma, senoji programinė įranga dažniausiai programuojama ne „Java“, bet kitomis kalbomis; tokiose situacijose kūrėjams reikalinga CORBA, o ne RMI (JRMP).

Taigi mes turime savo centrinę dilemą: RMI (JRMP) pranašumas yra lengvas programavimas, o CORBA suteikia sąveiką tarp kelių programavimo kalbų įvairiose platformose. Deja, tačiau tradiciškai nebuvo būdo naudoti šias abi puikias technologijas. Tai parodyta 2 paveiksle pateiktoje diagramoje, kurioje apskritimas reiškia situaciją, kai klientas gali paskambinti į serverį, o X reiškia atvejį, kai tai neįmanoma.

Geriausias iš abiejų pasaulių

Anksčiau pradedant naują projektą buvo sunku pasirinkti tarp RMI (JRMP) ir CORBA. Jei pasirinkote RMI (JRMP), jūs lengvai programavote, bet praradote sąveiką keliomis kalbomis. Jei pasirinkote CORBA, gavote sąveikumą, tačiau susidūrėte su baisesne programavimo užduotimi. Tiek RMI (JRMP), tiek CORBA vartotojai, pavargę nuo šio sprendimo priėmimo, vienu balsu pasakė: „Prašau sujungti abu“.

Žemiau esančiame 3 paveiksle viršutinė dalis rodo RMI (JRMP) modelį, vidurinė dalis - RMI-IIOP modelį ir apatinė dalis - CORBA modelį. Rodyklė rodo situaciją, kai klientas gali iškviesti serverį. RMI-IIOP priklauso IIOP pasauliui žemiau horizontalios linijos. Keistai gali atrodyti įstrižinės rodyklės, kertančios JRMP pasaulio ir IIOP pasaulio sieną, o tai reiškia, kad RMI (JRMP) klientas gali iškviesti RMI-IIOP serverį ir atvirkščiai. Natūralu, kad skaitytojai mano, kad šios įstrižainės rodyklės yra neteisingos - juk skirtingi protokolai niekada negali susikalbėti, tiesa? Tačiau šios rodyklės iš tikrųjų yra tinkamoje vietoje. RMI-IIOP palaiko abu JRMP ir IIOP protokolai.

Serverio dvejetainis failas (t. Y. Klasės failas), sukurtas naudojant RMI-IIOP API, gali būti eksportuojamas kaip JRMP arba IIOP. Jums nereikia perrašyti jos „Java“ šaltinio kodo ar perkurti, kai keičiate iš JRMP į IIOP arba atvirkščiai. Paleisdami turite pakeisti tik tokius parametrus kaip „Java“ sistemos ypatybės. Arba galite nustatyti naudojamą protokolą, nurodydami jį „Java“ šaltinio kode. Tas pats lankstumas taikomas ir RMI-IIOP kliento kodui.

Dvigubas eksportas

Yra dar vienas svarbus faktas, į kurį reikia atsižvelgti priimant sprendimą dėl JRMP ir IIOP protokolų. Kai eksportuojate RMI-IIOP objektą į savo serverį, nebūtinai turite pasirinkti tarp JRMP ir IIOP. Jei jums reikia vieno serverio objekto, palaikančio JRMP ir IIOP klientus, galite vienu metu eksportuoti savo RMI-IIOP objektą į JRMP ir IIOP. RMI-IIOP terminologijoje tai vadinama dvigubas eksportas.

3 paveiksle esančios įstrižainės rodyklės yra įmanomos, nes RMI-IIOP API palaiko ir JRMP, ir IIOP protokolus. Tai reiškia, kad neperrašant RMI (JRMP) objekto šaltinio kodo, jį gali iškviesti naujas RMI-IIOP klientas. Panašiai, neperrašinėdami RMI (JRMP) kliento šaltinio kodo, galite pakeisti RMI (JRMP) serverio objektą nauju RMI-IIOP objektu, kuriam CORBA klientas taip pat gali skambinti. Taigi RMI-IIOP išsaugo esamas investicijas į RMI (JRMP) dvejetainius failus, nes RMI-IIOP gali su jais bendrauti be jokių šaltinio kodo pakeitimų ar kompiliavimo.

Ši sąveika su RMI (JRMP) buvo vienas iš RMI-IIOP projektavimo principų. RMI-IIOP dizaineriai išvengė pagundos išstumti CORBA ir RMI su trečiuoju programavimo modeliu, nes tai tik suklaidintų paskirstytų objektų programuotojus ir dar labiau apsunkintų perėjimą iš RMI (JRMP).

Sąveika su CORBA

Dar kartą pažiūrėkite į 3 paveikslą. Skyrius po horizontalia linija yra IIOP pasaulis, kur RMI-IIOP klientas iškviečia CORBA serverį, o CORBA klientas - RMI-IIOP serverį. Autorius RMI-IIOP klientas, mes turime omenyje kliento programą, kurią parašė RMI programuotojas, nieko nežinantis apie CORBA ar IDL. Taip pat a CORBA klientas yra kliento programa, kurią parašė CORBA programuotojas, nežinantis RMI. Sąsajos atskyrimas nuo įgyvendinimo yra nusistovėjusi technika, leidžianti programuotojams pasiekti skirtingus išteklius nereikalaujant žinoti, kaip tie ištekliai yra įgyvendinami; jei laikomasi šios technikos, tiek RMI-IIOP, tiek CORBA vartotojai gali naudotis kito protokolo paslaugomis, jei gali pasiekti jo sąsają. RMI Java sąsajos failas yra sąsaja RMI-IIOP vartotojams, o IDL yra sąsaja CORBA vartotojams; 3 paveiksle pavaizduota RMI-IIOP ir CORBA sąveika pasiekiama suteikiant kiekvienam vartotojui jo numatomą sąsają, tuo pačiu išlaikant faktinį diegimą.

Paskutinė detalė, kurią reikia paaiškinti 3 paveiksle, yra punktyrinė rodyklė, nurodanti RMI-IIOP klientą, kviečiantį CORBA serverį. Kodėl taškuota tik ši rodyklė? RMI-IIOP klientas nebūtinai gali pasiekti visus esamus CORBA objektus. IDL apibrėžtų CORBA objektų semantika yra virš RMI-IIOP objektų rinkinio, todėl esamo CORBA objekto IDL ne visada galima susieti su RMI-IIOP Java sąsaja. Tik tada, kai konkretaus CORBA objekto semantika sutampa su RMI-IIOP, RMI-IIOP klientas gali paskambinti CORBA objektu. Punktyrinė rodyklė rodo ryšį, kuris kartais - bet ne visada - yra įmanomas.

Tačiau nereikėtų pervertinti nesuderinamumo. Taškine rodykle nurodyti apribojimai taikomi tik dirbant su esamais CORBA objektais. Tarkime, kad jūs suprojektuojate visiškai naują paskirstytą objektą su „RMI-IIOP Java“ sąsaja. Tokiu atveju galite automatiškai sugeneruoti atitinkamą IDL naudodami rmic įrankis. Iš šio IDL failo galite jį įdiegti kaip CORBA objektą - pavyzdžiui, C ++. Šis C ++ objektas yra grynas CORBA objektas, kurį gali iškviesti CORBA klientas, taip pat be jokių apribojimų gali iškviesti RMI-IIOP klientas. RMI-IIOP klientui šis C ++ CORBA objektas atrodo kaip grynas RMI-IIOP objektas, nes jį apibrėžia RMI-IIOP Java sąsaja. Trumpai tariant, skirtumas tarp CORBA objekto ir RMI-IIOP objekto yra tik įgyvendinimo klausimas. Panašiai, jei objektas yra įdiegtas RMI-IIOP, objektas CORBA klientui rodomas kaip CORBA objektas, nes CORBA klientas prie jo prisijungia per savo IDL.

Žemiau esančiame 4 paveiksle parodyta matrica, apibendrinanti rodykles 3 paveiksle. Punktyrinis apskritimas reiškia tą patį, ką ir 3 paveiksle rodoma punktyrinė rodyklė. 4 paveiksle parodyta, kad jei įdiegiate savo serverį RMI-IIOP, turite plačiausią klientų. Panašiai, jei diegiate savo klientą RMI-IIOP, galite kalbėtis su didžiausiu serverių asortimentu, nors egzistuojantiems CORBA objektams yra tam tikrų apribojimų, kuriuos nurodo punktyrinis apskritimas.

RMI-IIOP projektavimo politika

Buvo dvi pagrindinės prielaidos, kurios formavo RMI-IIOP protokolo dizainą: RMI semantiką reikėjo palikti kuo nepažeistą, o CORBA reikėjo patobulinti, kad RMI semantiką būtų galima įgyvendinti naudojant CORBA infrastruktūrą. Tai buvo lengviau pasakyti nei padaryti. Jei būtų įvestas trečiasis programavimo modelis, tai tik suklaidintų programuotojus. Norint sukurti laimingą RMI ir CORBA santuoką, reikėjo pasiekti kompromisą tarp skirtingų šių santuokos partnerių kilmės - jei abu partneriai atmes bet kokį kompromisą, santuoka niekur nedings. Laimei, CORBA bendruomenė tai pripažino ir sutiko su tam tikrais pakeitimais, kad RMI-IIOP galėtų tapti realybe.

Du pagrindiniai CORBA pakeitimai buvo: Objektai pagal vertę ir „Java-to-IDL“ atvaizdavimas specifikacijos. Pirmoji, jau prieinama RMI vartotojams „Java“ objektų serijos forma, yra CORBA specifikacija, skirta priversti kitas kalbas įgyvendinti panašias galimybes. Pastarasis yra susiejimas, naudojamas konvertuoti RMI Java sąsajas į CORBA IDL apibrėžimus, ir jo negalima painioti su IDL-Java susiejimu, jau apibrėžtu CORBA 2.2. (Žr. Šaltinius, kuriuose pateikiamos nuorodos į šias dvi naujas CORBA specifikacijas.)

OMG jau oficialiai priėmė abi CORBA 2.3 specifikacijas, tačiau CORBA diegimai turės pasivyti šią naują versiją, kol čia aprašyta nauja CORBA ir RMI santuoka taps plačiai paplitusia realybe. Pvz., CORBA 2.3 atitinkantį IDL-Java kompiliatorių iš „Sun“ galima naudoti kartu su RMI-IIOP ORB (objektų užklausų tarpininku), tačiau šiuo metu tai yra ankstyvosios prieigos versija, tinkama tik tiriant CORBA ir RMI-IIOP, o ne gamybai. Be to, „Sun“ išplatintas IDL – Java kompiliatorius, skirtas naudoti su „Java IDL ORB“ programoje „Java 1.2“, neatitinka CORBA 2.3, todėl jo negalima naudoti sąveikumui su RMI-IIOP išbandyti. Ši situacija bus išspręsta per ateinančius kelis mėnesius, kai CORBA pardavėjai pristatys naujas savo produktų versijas, palaikančias CORBA 2.3. Pavyzdžiui, kitame „Java 2“ platformos leidime „Standard Edition“ bus tiek RMI-IIOP, tiek produkcijos kokybės kompiliatorius „IDL – Java“, palaikantis CORBA 2.3.

Kūrimo procedūra

5 paveiksle parodyta tiek RMI-IIOP serverių, tiek klientų kūrimo procedūros. Pastebėsite, kad jie yra beveik tokie patys kaip RMI (JRMP). Kaip ir RMI (JRMP), paskirstyto objekto apibrėžimas yra jo RMI Java sąsaja (MyObject.java 5 paveiksle). Skirtumas yra -iiop parametras rmic sudarytojas. Ši parinktis naudojama rmic sugeneruoti šaknis ir kaklaraiščius, palaikančius IIOP protokolą. Be šito -iiop variantas, rmic sugeneruoja JRMP protokolo šaknį ir griaučius. Nors RMI-IIOP kūrimo procedūra yra artima RMI (JRMP), tačiau vykdymo trukmės aplinka yra kitokia, nes ryšys vyksta per CORBA 2.3 suderinamą ORB, naudojant serverio ir klientų ryšiams IIOP.

Jei ketinate konvertuoti RMI (JRMP) kodą į RMI-IIOP, turėtumėte žinoti, kad vykdant IIOP yra keletas įgyvendinimo skirtumų. CORBA nepalaiko paskirstyto šiukšlių surinkimo, kuris naudoja aiškų naikinimą ir nuolatines objektų nuorodas su skaidriu pasyvinimu ir aktyvavimu. RMI registrą pakeičia JNDI su „CosNaming“ arba LDAP paslaugos teikėjas, o RMI aktyvavimą pakeičia nešiojamasis objekto adapteris. Nuotolinių objektų nuorodos turi būti nutolusios naudojant programinę įrangą siauras () metodas, o ne tiesioginė „Java“ kalba. Kitos RMI semantikos, tokios kaip objektų nuoseklinimas, yra visiškai palaikomos per IIOP.

CORBA sąveikos procedūra

6 paveiksle parodyta, kaip pasiekti RMI-IIOP ir CORBA sąveiką. Kad mūsų diskusija būtų paprastesnė, apsvarstykime du tokio sąveikumo aspektus: CORBA klientas, naudodamas RMI-IIOP objektą, pavaizduotą kairiajame 6 paveikslo skyriuje, ir RMI-IIOP klientas, naudodamas CORBA objektą, pavaizduotas dešinėje dešinėje. Figūros centre yra tie bendri procesai, kurie leidžia veikti abiem sąveikos formomis.

$config[zx-auto] not found$config[zx-overlay] not found