HOJ RPC = Remote Procedure Call (ja Common Object Request Broker Architecture)

Samankaltaiset tiedostot
HSMT J2EE & EJB & SOAP &...

HOJ Kertausluento. Ville Leppänen. HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.1/58

HOJ J2EE & EJB & SOAP &...

Hajautettujen sovellusten muodostamistekniikat, TKO_2014 Johdatus kurssiin

Integrointi. Ohjelmistotekniikka kevät 2003

ORB CORBA 101. Palvelinolio. Asiakasolio. Yleistä. Toiminta ja arkkitehtuuri. CORBA 101 Graafisten käyttöliittymien ohjelmointi 2000

Sovellusarkkitehtuurit

RPC. Luku Taustaa. 7.2 Sovelluksen rakentaminen. - TODO: write as text (not just list of items)

HOJ Haja-aiheita. Ville Leppänen. HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.1/10

Etäproseduurikutsu, Remote Procedure Call (RPC) Etäproseduurikutsu. Poissulkeminen moduulin sisällä?

Etäproseduurikutsu. Etäproseduurikutsu, Remote Procedure Call (RPC)

Etäproseduurikutsu. RPC Toteutus Virhesemantiikka. Andrews 8.1, 10.3, Stallings 13.3

Hajautettujen järjestelmien rakentaminen - Jini. Ohjelmistotuotantovälineet-seminaarin esitelmä

Tietojärjestelmäarkkitehtuurit

Verkko-ohjemointia. TCP vs. UDP Socket, ServerSocket Datagrammit RMI

JavaRMI 1 JAVA RMI. Rinnakkaisohjelmoinnin projekti 1 osa C Tekijät: Taru Itäpelto-Hu Jaakko Nissi Mikko Ikävalko

Sisältöä luento 18. Hajautettu prosessointi. Stallings, Luvut Esimerkkejä: homogeenisia hajautettuja arkkitehtuureja

Hajautettu prosessointi. Stallings, Luvut Sisältöä luento 18

OHJ-5010 Hajautettujen järjestelmien perusteet

HSMT Tietokannoista. Ville Leppänen. HSMT, c Ville Leppänen, IT, Turun yliopisto, 2008 p.1/32

Visma Software Oy

Tietorakenteet ja algoritmit

Distribution issues, global state, clusters, CORBA, etc. Distributed objects

Harri Kaukovuo Senior Sales Consultant Technology Sales Oracle Finland Oy

Visma Nova Webservice Versio 1.1 /

DTEK1047: Hajautet ohjelmistojärjestelmät (HOJ)

Etäproseduurikutsu, Remote Procedure Call (RPC) Etäproseduurikutsu. Poissulkeminen moduulin sisällä?

Ohjelmoinnin perusteet Y Python

Olio-ohjelmointi Javalla

Ohjelmoinnin peruskurssien laaja oppimäärä

Kertaus on opintojen äiti: OSI malli. Oliokeskeiset välikerrokset. Transmission Control Protocol (TCP) Kuljetus eli transport kerros

Web Service torilla tavataan!

TIETORAKENTEET JA ALGORITMIT

Tietueet. Tietueiden määrittely

Stallings, Luvut Appendix B

Sisältöä luento 19. Stallings, Luvut Appendix B. Hajautettu olio. Parametrien välitys. Sidonta asiakkaan ja olion välillä

HOJ RMI = Remote Method Invocation

Järjestelmäarkkitehtuuri (TK081702)

in condition monitoring

Ohjelmistoarkkitehtuurit

Palveluperustaiset arkkitehtuurityylit

Ch [Stal 05] Ch , [Tane 01] Ch 20.7 [DDC 04] Ch [Stal05]

Tietorakenteet ja algoritmit

Rajapinta (interface)

OSI ja Protokollapino

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2

7. Oliot ja viitteet 7.1

Mikä yhteyssuhde on?

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä. Tiedonkätkentä. Aksessorit. 4.2

Ohjelmoinnin peruskurssien laaja oppimäärä

Teemat. Järjestelmätarpeet. Distributed object model. Väliohjelmistot /04/2004. Objekti- ja komponenttiväliohjelmistot. Objektijärjestelmät

Operaattoreiden ylikuormitus. Operaattoreiden kuormitus. Operaattoreiden kuormitus. Operaattoreista. Kuormituksesta

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. X Poikkeusten käsittelystä

Ohjelmoinnin peruskurssien laaja oppimäärä

Kompositio. Mikä komposition on? Kompositio vs. yhteyssuhde Kompositio Javalla Konstruktorit set-ja get-metodit tostring-metodi Pääohjelma

Sisällys. JAVA-OHJELMOINTI Osa 7: Abstrakti luokka ja rajapinta. Abstraktin luokan idea. Abstrakti luokka ja metodi. Esimerkki

Stallings, Luvut Appendix B

Lab SBS3.FARM_Hyper-V - Navigating a SharePoint site

JUnit ja EasyMock (TilaustenKäsittely)

Ohjelmistoarkkitehtuuri. Verkotettu multimedia. Mediavirtojen puskurointi. Multimedian vaikutukset. Selain-ohjelmistoarkkitehtuuri.

Tietokannat II -kurssin harjoitustyö

Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä

1. Olio-ohjelmointi 1.1

Tietoliikenne II (2 ov)

Ohjelmointikielet ja -paradigmat 5op. Markus Norrena

TIE Samuel Lahtinen. Lyhyt UML-opas. UML -pikaesittely

Sisältöä luento 19. Stallings, Luvut Appendix B. Hajautettu olio. Parametrien välitys. Sidonta asiakkaan ja olion välillä

Olion elinikä. Olion luominen. Olion tuhoutuminen. Olion tuhoutuminen. Kissa rontti = null; rontti = new Kissa();

14. Poikkeukset 14.1

.NET ajoympäristö. Juha Järvensivu 2007

SAP. Lasse Metso

CODEONLINE. Monni Oo- ja Java-harjoituksia. Version 1.0

815338A Ohjelmointikielten periaatteet Harjoitus 5 Vastaukset

Ohjelmistoarkkitehtuuri. Verkotettu multimedia. Multimedian vaikutukset. Mediavirtojen puskurointi. Ohjelmointi. Selain-ohjelmistoarkkitehtuuri

Sisällys. 1. Omat operaatiot. Yleistä operaatioista. Yleistä operaatioista

14. Poikkeukset 14.1

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

Taustaa. CGI-ohjelmointi

1. Omat operaatiot 1.1

Security server v6 installation requirements

1.3Lohkorakenne muodostetaan käyttämällä a) puolipistettä b) aaltosulkeita c) BEGIN ja END lausekkeita d) sisennystä

Common Language Runtime

Sisällys. 7. Oliot ja viitteet. Olion luominen. Olio Java-kielessä

TIETOKONEYLIASENTAJAN ERIKOISAMMATTITUTKINTO

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

Ohjelmoinnin perusteet Y Python

HELIA 1 (19) Outi Virkki Käyttöliittymät ja ohjelman suunnittelu

Sisällys. Metodien kuormittaminen. Luokkametodit ja -attribuutit. Rakentajat. Metodien ja muun luokan sisällön järjestäminen. 6.2

Ohjelmoinnin perusteet Y Python

16. Javan omat luokat 16.1

Microsoft Visual J++ ohjelmointiympäristö

812336A C++ -kielen perusteet,

Security server v6 installation requirements

Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 1

Luento 4 Aliohjelmien toteutus

Metodien tekeminen Javalla

Sisällys. 6. Metodit. Oliot viestivät metodeja kutsuen. Oliot viestivät metodeja kutsuen

Rutiinin muodostaminen. 2. Rutiinin muodostaminen. specification) Määrittely (specification( Määrittelyn osapuolet. Hyvän ohjelman tunnusmerkit

Web Services tietokantaohjelmoinnin perusteet

Lisenssin hakeminen PTC:n verkkosivun kautta

Transkriptio:

HOJ RPC = Remote Procedure Call (ja Common Object Request Broker Architecture) Ville Leppänen HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.1/36

Missä mennään... 1. Johdanto (1h) 2. Säikeet (2h) 3. Samanaikaisuudesta (2h) 4. Hajautetuista sovelluksista (1h) 5. Soketit (3h) 6. RMI ja J2EE (2h) 7. RPC (1h) 8. WWW-sovellustekniikoista (2h) 9. Pilvialustat (4h) 10. Haja-aiheita (2h) 99. Kertausluento (2h) + 1h pelivaraa HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.2/36

Remote Procedure Call, RPC Birrell & Nelson (1984) (vaikka keskusteltu jo aiemmin kirjallisuudessa). RFC 1057 (vähän ympäripyöreä). RPC:n (Remote Procedure Call) idea on välittää (UDP:n tai TCP:n avulla) verkon yli proseduurin kutsu(ja) argumentteineen ja palauttaa takaisin etäällä suoritetun proseduurin tulos. Syy irrottaa proseduuri etäproseduuriksi liittyy yleensä työmäärään tai keskitettyyn suureen tietomäärään (jota ei ole järkevä kopioida moneen paikkaan). RPC:ssä, etäproseduurin kutsu näyttää ohjelmassa tavalliselta metodin kutsulta. Toteutus (kommunikointi verkon yli) on näkymätön ohjelmoijan kannalta. C-pohjainen ei olioita kuten RMI:ssä. HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.3/36

RPC:n toteutus Paikallinen RPC-kutsu näyttää normaalilta kutsulta. Jotta tämä olisi mahdollista, todellista proseduuria vastaten pitää määrittää rajapinta ja sille toteutus paikalliseen koneeseen. Jokainen paikallinen RPC-kutsu on edustaproseduurin (client stub) kutsu, joka hoitaa kommunikoinnin etäkoneen kanssa. Etäkoneessa (palvelimessa) on etäkutsupalvelin (server stub), joka odottaa etäkutsun tiedot sisältäviä viestejä. Palvelin tulkitsee viestin ja suorittaa muistiavaruudessaan vastaavaan etäproseduurin palauttaen tuloksen takaisin. (Stub = tynkä) HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.4/36

RPC-kutsu käytännössä 1. Kutsuva ohjelma kutsuu edustaproseduuria kuten muitakin paikallisia proseduureja. 2. Edustaproseduuri koodaa parametrit viestiin ja lähettää viestin. 3. Etäkutsupalvelin ottaa viestin vastaan, purkaa sen ja kutsuu vastaavaa etäproseduuria. 4. Etäkutsupalvelin koodaa tuloksen viestiin ja lähettää sen takaisin. 5. Paikallinen edustaproseduuri ottaa viestin vastaan, purkaa tuloksen ja palauttaa sen paikalliselle ohjelmalle. 6. (Edellisessä: synkroninen RPC-kutsu.) HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.5/36

Parametriongelmia Etäproseduurikutsujen toteuttaminen olisi helppoa, jos kaikki parametriarvot olisivat skalaariarvoja ja molemmat RPC-järjestelmät olisivat samoja. RPC-toteutukset perustuvat usein alla olevaan käyttöjärjestelmään ja siinä tiedon esitysmuoto voi vaihdella. Parametrien koodauksen (mashalling) täytyy ottaa tämä huomioon. (XDR) Jotkin paikalliset parametrit voivat olla viiteparametrejä. Jos sallittua, marshallointi tarkoittaa viitatun rakenteen kopiointia. Tulisiko muutosten heijastua takaisin? Mahdollista! Copy/restore-parametrit! HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.6/36

Kohti RPC-sovelluksia Koneessa pitää olla RPC:n toteutus. Useita saatavilla. (Kokeile esim. Unixissa man rpcgen.) Helpoin tapa tehdä RPC-sovellus on käyttää rajapintakieltä Interface Definition Language (IDL), jonka avulla määritellään kutsuttavien etäproseduurien muoto. Järkevää, koska IDL kuvausta käyttäen voidaan generoida edustaproseduuri ja etäkutsupalvelin (+muuta)!! rpcgen: ei IDL vaan RPC Language kuvaus rajapinnasta. HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.7/36

Esimerkki: DCE RPC http://www.opengroup.org/dce/ Open Software Foundation (OSF) on tehnyt RPC-toteutuksen nimeltä Distributed Computing Environment useille käyttöjärjestelmille. DCE RPC tarjoaa välikerroksen käyttöjärjestelmän ja hajautettujen sovellusten välille. Seuraavan kalvon kuva näyttää, miten tehdä DCE RPC-sovellus käytännössä (asiakas- ja palvelinpää). HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.8/36

DCE RPC Uuidgen Interface definition file IDL compiler Client code Client stub Header Server stub Server code #include #include C compiler C compiler C compiler C compiler Client object file Client stub object file Server stub object file Server object file Linker Runtime library Runtime library Linker Client binary Server binary HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.9/36

DCE RPC-sovellusten tekeminen IDL description + client code + server code = app. Rajapintakuvaus on kirjoitettu IDL-kielellä ja kuvaus on kaikkia yhteensitova liima. Jokaisella kuvauksella tulee olla yksikäsitteinen tunnistenumero. Asiakas sidotaan etäkutsupalvelimeen hakemistopalvelun avulla. Palvelimessa on käynnissä DCE daemon, joka tunnistaa sisääntulevat RPC-viestit ja välittää ne oikealle prosessille. Varsinainen RPC-kutsun toteutus on normaali: koodaus, viestin lähettäminen, purkaminen, prosessointi, (tuloksen) koodaus, lähettäminen, purkaminen. HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.10/36

Sun RPC-esimerkki Ei ilmeisesti ole aivan samanlainen kuin DCE RPC. Esimerkki (dice.x, dice_prog.c, rdice.c) on kurssin kotisivulla. HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.11/36

Miten käyttää esimerkkiä Generoi rajapinnat rpcgen dice.x Käännä client gcc rdice.c dice_clnt.c -o dice_client -lnsl Käännä server gcc dice_prog.c dice_svc.c -o dice_server -lnsl Serverin käynnistys./dice_server Clientin käynnistys./dice_client staff.cs.utu.fi 10 HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.12/36

dice.x /* dice.x: Remote random dice protocol */ program DICEPROG { version DICEVERS { int GETDICE(string) = 1; } = 1; } = 0x20000001; HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.13/36

Palvelimeen: dice_prog.c /* * dice_proc.c: implementation of the * remote procedure "getdice" */ #include <stdio.h> #include "dice.h" /* dice.h generated by rpcgen */ #define RANDOM random long random(); int * getdice_1_svc(char **who, struct svc_req *req) { static int result; /* must be static! */ result = (unsigned long int)(random()%6) + 1; printf("sending %d back to %s\n", result, *who); return (&result); } HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.14/36

Asiakas: rdice.c 1/3 /* * rdice.c: main program for getting random dice numbers */ #include <stdio.h> #include "dice.h" /* dice.h generated by rpcgen */ main(int argc, char **argv) { CLIENT *clnt; int *result; char *server; int howmanytimes,i; if (argc!= 3) { fprintf(stderr, "usage: %s host number\n", argv[0]); exit(1); } HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.15/36

Asiakas: rdice.c 2/3 server = argv[1]; sscanf(argv[2],"%d",&howmanytimes); if (howmanytimes < 1) howmanytimes = 1; // Create client "handle". clnt = clnt_create(server, DICEPROG, DICEVERS, "tcp"); if (clnt == (CLIENT *)NULL) { // No connection established clnt_pcreateerror(server); exit(1); } HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.16/36

Asiakas: rdice.c 3/3 // Call the remote procedure for (i=0; i<howmanytimes; i++) { result = getdice_1(&server, clnt); printf("got %d \n", *result); } } printf("dice asking from %s done.\n", server); clnt_destroy( clnt ); exit(0); HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.17/36

Huomioita RPC:stä RPC:n viestin voi tehdä itse. RPC:n kirjasto tarjoaa suuren määrään proseduureja asiakkaita ja palvelimia varten. Parametrien koodausstandardi: XDR (external Data Representation). Asiakkaan ja palvelimen voi tehdä alusta alkaen itse tai ne voi toteutusympäristöstä riippuen osittain generoida. HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.18/36

Huomioita RPC:stä (jatkoa) IDL-kieli on kohtuullisen rikas. DCE RPC:n IDL-kieli on toiminut pohjana Microsoftin COM:n (ja DCOM:n) IDL-kielelle (lähes identtinen). Kutsun ei tarvitse olla synkroninen kutsuja voi jatkaa suoritustaan ja kun kutsu on valmis, kutsujalle ilmoitetaan. TCP:n tilalla voi olla jokin muu kuljetusmekanismi (XML-RPC: HTTP). RPC ei ole vain C-kielisille ohjelmille esim. XML-RPC toteutuksia on useille kielille: Java, C/C++, Perl, PHP, Python. HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.19/36

Corba CORBA (Common Object Request Broker Architecture) on RMIn tapaan arkkitehtuuri hajautetuille järjestelmille. Useita toteutuksia: Sunin J2SE:n mukana tulee Corban toteutus. Katsaus Yleistä Esimerkkejä Corban muita ominaisuuksia HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.20/36

Corba yleiskatsaus CORBA (Common Object Request Broker Architecture) on ryhmän nimeltä OMG (Object Management Group) määrittelemä. OMG perustettu 1989. (www.omg.org.) Tavoitteena on mahdollistaa hajautettujen järjestelmien kehittäminen kieliriippumattomuutta tukien. Ensimmäinen versio 1991. Versio 2.0 vuonna 1996 ja versio 3.0 vuonna 2002. Määrittely on n. 2000 sivua. Tehty ennen RMI:tä ja Javaa. RMI:tä laajempi. Soveltuu myös muille kuin OO-kielille. HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.21/36

jatkuu... CORBAn ydin on ORB (Object Request Broker), joka on alustaja kieliriippumaton taso etäkutsujen tekemiseksi. Huolehtii mm. marshalloinnista. Sovelluksissa olevat ORBit keskustelevat GIOP:llä (General Inter-ORB Protocol). Sen TCP/IP-mukaelma on IIOP (Internet Inter-ORP Protocol). Asiakas/palvelin rajapinnat kuvataan Corbassa IDL:llä (Interface Description Language). HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.22/36

IDL esimerkki module Bank { interface Account { typedef double Amount; readonly attribute Amount balance; exception InsufficientFunds { Amount overdraft; }; void withdraw(in Amount x) raises (InsufficientFunds); }; }; HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.23/36

Noppa.idl interface Noppa { void setseed( in long long l ); void setmax( in long m ); void setmin( in long m ); readonly attribute long next; oneway void shutdown(); }; HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.24/36

Corba havainnollistus Client machine Client application Server machine Object implementation Static IDL proxy Dynamic Invocation Interface ORB interface Object adapter Skeleton Dynamic Skeleton Interface ORB interface Client ORB Local OS Server ORB Local OS Network HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.25/36

Corba havainnollistus (2) Interface repository IDL compiler Implementation repository CLIENT operation OBJECT DII IDL stub IDL skel. DSI ORB interface object adaptor GIOP/IIOP ORB CORE HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.26/36

CORBA:n keskeiset osat Edustaolio (client object) kutsuu jotain palvelimessa olevan etäolion (server object, servant) metodia ORBin kautta. Muita komponentteja: IDL (Interface Definition Language) on RPC:n IDL-kieltä muistuttava kieli (yhteyksiä C++:aan ja Javaan). Sillä kuvataan etäolioiden rajapinnat (metodit, attribuutit) mutta ei toteutusta. IDL-kuvauksesta voidaan generoida asiakas- ja palvelintyngät. Asiakastynkä (IDL stub) on etäolion edustaolio. Asiakastyngät ovat kieliriippuvaisia. Kielestä riippuen näyttää metodin tai proseduurin kutsulta. Palvelintynkä (IDL skeleton) on palvelinpuolen osuus, joka kykenee toteuttamaan kutsun palvelimessa. HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.27/36

Jatkoa DII (Dynamic Invocation Interface) on vaihtoehtoinen käyttötapa (korvaa asiakastyngän). Joskus staattista IDL-kuvausta (ja siten asiakastynkää) ei ole saatavilla, ja DII:n avulla kutsu voidaan rakentaa dynaamisesti (vertaa Javan reflektioon). DSI (Dynamic Skeleton Interface) on palvelinpuolen vastine DII:lle. Object Adapter kuuntelee verkkoa (kutsuja) ja välittää kutsun palvelintyngälle. (Tukee turvallisuutta, palvelun aktivointia ja deaktivointia.) HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.28/36

Edelleen jatkoa Rajapintavarasto (Interface Repository) on rajapintakuvausten tietokanta, johon voi tehdä hakuja suoritusaikana (DII:n kautta käyttäminen). Toteutusvarasto (Implementation Repository) on edellisen vastine palvelinpuolella sisältäen toteutuskoodia erilaisille etäolioille. IOR (Interoperable Object Reference). IOR on yksikäsitteinen, globaali tunniste, joka jokaisella CORBA-oliolla on. HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.29/36

Python: Client esim. import CORBA, Bank orb = CORBA.ORB_init() # Read the IOR written by the server ior = open("/tmp/orbit-python.ior").readline() account = orb.string_to_object(ior) print "Current balance:", account.balance try: account.withdraw(30.00) print "New balance:", account.balance except Bank.Account.InsufficientFunds, data: print "Withdraw failed: overdrawn by", data.overdraft HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.30/36

Python: Server esim. import CORBA, Bank, Bank POA class Account(Bank POA.Account): def init (self): self.balance = 100.0 def withdraw(self, amount): if self.balance - amount < 0: d = Bank.Account.InsufficientFunds() d.overdraft = amount - self.balance raise Bank.Account.InsufficientFunds, d else: self.balance = self.balance - amount orb = CORBA.ORB_init() poa = orb.resolve_initial_references("rootpoa") ref = Account()._this() # implicit activation # Write the IOR to a file to be read by the client open("/tmp/orbit-python.ior", "w").write(orb.object_to_string(ref)) poa._get_the_poamanager().activate() HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.31/36

Java esimerkkejä HelloWorld; ks. http://java.sun.com/j2se/1.4.2/ docs/guide/idl/jidlsamplecode.html Tehdään RMI-esimerkistä Noppa Corba-sovellus... (rmic -idl + idlj -fall + client + server) HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.32/36

Nimeäminen CORBAssa CORBAssa viitteet etäolioihin esitetään IOR-muodossa (Interoperable Object Reference): Tagged Profile Interoperable Object Reference (IOR) Repository identifier Profile ID Profile IIOP version Host Port Object key Components POA identifier Object identifier Other serverspecific information HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.33/36

Nimipalvelu Toimiakseen CORBA vaatii nimipalvelun (kuten RMI), joka kuvaus symbolisista nimistä IOR-muotoon. RMI:n tapaan nimipalvelu tarjoaa rekisteröinti- ja hakupalvelun. Koodissa käytetään/muodostetaan symbolisia nimiä IOR-muotoisten sijaan. Java: orb toteuttaa CORBA-nimipalvelun. HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.34/36

Muita CORBAn ominaisuuksia Tukee lukkoja ja transaktioita. Tukee replikointia (ja cachea). Tukee vikasietoisuutta. Tukee kryptausta, autentikointia,...... + paljon muuta. HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.35/36

Lopuksi RPC on esitelty välitystekniikkana. Sovellusten tekemisen problematiikka samanlaista kuin RMI:n kohdallakin. Etäproseduurit eivät ole mitään aktiivista, vaan passiivisia palveluita. Ja yleisemmin monisäiesovellusten ongelmat koskien tiedon samanaikaista käsittelyä ovat myös RPC-sovellusten ongelmia. Corba hyvin samanlainen kuin RMI, mutta yleisempi. Kaikkia ominaisuuksia ei kaikissa toteutuksissa. RMI:n ja RPC:n ja samanaikaisuuden ongelmat ovat myös CORBAn ongelmia. HOJ, c Ville Leppänen, IT, Turun yliopisto, 2012 p.36/36