520 likes | 604 Views
CORBA. Ce este CORBA?. Common Object Request Broker Architecture Infrastructura de comunicatii pentru obiectele distribuite Permite colectiilor de obiecte distribuite si eterogene sa colaboreze intr-un mod transparent. La ce este serveste CORBA ?. Dezvoltarea de aplicatii distribuite
E N D
Ce este CORBA? • Common Object Request Broker Architecture • Infrastructura de comunicatii pentru obiectele distribuite • Permite colectiilor de obiecte distribuite si eterogene sa colaboreze intr-un mod transparent
La ce este serveste CORBA ? • Dezvoltarea de aplicatii distribuite • Localizarea obiectelor de tip remote in cadrul unei retele • Trimiterea de mesaje catre aceste obiecte • Ofera o interfatare comuna pentru tranzactii, securitate, etc.
De ce aplicatii distribuite? • Datele sunt distribuite • Din motive administrative si de apartenenta • Utilizarii sistemelor eterogene • Impartirii acestora de catre mai multe aplicatii
De ce aplicatii distribuite? • Calculele sunt distribuite • Scalabilitate: multiprocesare • Arhitecturi heterogene • Utilizatorii sunt distribuiti • Utilizatori multipli care interactioneaza si comunica prin aplicatiile distribuite
Sisteme de obiecte distribuite • Toate entitatile sunt modelate ca obiecte • Sistemele suporta transpanenta locala • Interfetele si nu implementarile definesc obiectele • Sistemele de obiecte distribuite sunt deschise
Avantaje CORBA • Independenta de sistemul de operare si de limbajul de programare • Integrarea apliactiilor existente • Infrastructura bogata in obiecte distribuite • Transparenta locatiei. • Transparenta retelei. • Interfata de invocare dinamica
Dezavantaje CORBA • Investitie initiala ridicata. Aplicatiile bazate pe CORBA necesita investitii enorme in ceea ce priveste trainingul si lansarea arhitecturii, chiar si pentru aplicatii de dimensiuni mici. • Disponibilitatea serviciilor CORBA. Serviciile obiect specificate de OMG lipsesc inca in produse care implementeaza conceptele. • Scalabilitatea. Datorita naturii strans cuplate a arhitecturii CORBA orientate pe legaturi, scalabilitatea inalta asteptata in aplicatiile companiilor poate sa nu fie atinsa.
Ce este OMG? • Producatorii CORBA • Consortiu de 700+ companii • Nu este inclus Microsoft (DCOM ) • Membri: • Vanzatorii de platforme • Vanzatorii de baze de date • Dezvoltatorii de utilitare software • Corporatiile dezvoltatoare • Vanzatorii de aplicatii software
Este doar o SPEC*-ulatie • Nu a fost niciodata implementat integral • Probabil nici nu va fi • Industria se misca repede iar SPEC trebuie sa tina pasul • Interoperabilitate vs. portabilitate • Transmiterea parametrilor se face prin valoare *Standard Performance Evaluation Corporation
O simpla arhitectura CORBA Server Client response request ORB ORB “Object Bus”
Obiecte CORBA • Exemple • Servicii • Clienti • Componente • Obiecte de tip business • Obiectele CORBA se apropie de o accesibilitate universala • Orice limbaj • Orice host din retea • Orice platforma
Elemente CORBA • 1. ORB • 2. servicii CORBA • 3. facilitati CORBA • 4. obiecte aplicatie
Object Request Broker (ORB) • ORB este o componenta software care mediatizeaza transferul de mesaje de la un program la un obiect aflat pe un host la distanta, din retea.
ORB • Asigura comunicarea intre obiecte • Fiecare host (PC) are ORB-ul propriu • ORB-urile stiu sa comunice unele cu altele • ORB deasemenea asigura clientului servicii de baza
Rersponsabilitati ORB • Gaseste implementarea obiectului corespunzator cererii (request) • Pregateste implementarea obiectului pentru a putea primi cererea • Comunica datele din cadrul cererii • Salveaza datele unei cereri
Reteaua ORB-urilor • Exista un ORB si pe server • ORB-ul primeste cererile
IIOP • Internet Inter-Orb Protocol • IIOP defineste coloana de sustinere ORB, prin care fiecare ORB poate lega si oferi inter-operatii ale serviciilor sale asociate • Utilizeaza protocolul TCP/IP
ORB - Caracteristici • Invocarile de metode • Statice si Dinamice • Obiecte la distanta sau servicii CORBA • Legaturi in cadrul limbajelor de nivel inalt • Se poate utiliza orice limbaj; ORB il va “traduce” • Auto-descriptiv • Asigura metadata pentru toate obiectele si serviciile
ORB - Caracteristici • Local sau la distanta • Acelasi API indiferent de locul unde se gaseste obiectul tinta • Conserva contextul • Securitate si tranzactii distribuite • Coexistenta cu codul mostenit • Decat asigura impachetarea obiectului
Ce este de fapt un ORB ? • Nu este un proces separat • Cod al unei biblioteci care se executa in timpul procesului • Asculta conexiunile la porturile TCP • Un port pentru fiecare obiect • Deschide socketurile TCP pentru alte obiecte • N porturi pentru statia de calcul de la distanta
Stubs si Skeletons • Stub • Se afla pe client • Se presupune a fi un obiect remote • Skeleton • Se afla pe server • Primeste requesturi de la stub • Comunica cu adevaratul obiect remote • Livreaza raspunsul catre stub
Stubs si Skeletons -> Independenta fata de Platforma • Codul client nu are cunostinte de implementarea obiectului sau care ORB este utilizat pentru accesarea implementarii
Stubs si Skeletons (Fig.) Client Host Machine Server Host Machine Client Object Remote Object Stub Skeleton IIOP ORB ORB
Interface Definition Language (IDL) • Interface Definition Language • Defineste un protocol pentru a putea accesa obiectele • Este asemanatoare unui contract • Este bine specificata • Independenta de limbajul utilizat
Interface Definition Language (IDL) (Cont.) • Este un limbaj pur descriptiv. • Permite dezvoltatorilor sa descrie o interfata pe care sa o foloseasca de la distanta, intr-o maniera independenta de limbaj. • Este necesar un compilator specific fiecarui limbaj participant (ex. Idlj pentru Java) • Creaza fisierele necesare fiecarui limbaj pentru taskurile legate de CORBA.
Client vs. Server • in cazul CORBA, un client este un client relativ la obiect specific • Este un obiect cu o referinta catre un obiect “server” • Un client se poate comporta de asemenea ca server • Daca are un IDL, stubs si skeletos • Tehnic vorbind, un server CORBA contine unul sau mai multe obiecte CORBA
Diferite intelesuri pentru termenul de “Server” • Sistemul host • Program care ruleaza pe un host • Obiect CORBA ce ruleaza in cadrul unui program • are IDL, stub, skeleton • Uneori este numit si Servant
Modul de lucru CORBA • 1. Scrie un fisier IDL care descrie interfata obiectului distribuit • 2. Se ruleaza idlj pe fisierul IDL. Acesta genereaza codul Java care implementeaza stubul si skeletonul • 3. Se ruleaza nameserverul • 4. Implementeaza servantul (interfata IDL) • 5. Implementeaza serverul (inregistreaza servantul cu serviciul si asteapta cereri) • 6. Implementeaza clientul • 7. Ruleaza serverul • 8. Ruleaza clientul
Exemplu de IDL • Se compileaza codul IDL cu idlj. Acesta creaza fisierele sursa java in pachetul Tracker. • idlj -fclient -fserver –oldImplBase Tracker.idl module Tracker { interface Time { string getTime(); }; };
Idlj: Rezultatul compilarii IDL cu java • Idlj genereaza niste cod sursa in directorul Tracker. • _TimeStub (stubul pentru client) • Time (interfata pentru obiectul distribuit) • TimeHelper (helper) • TimeHolder (serializare & comunicatii; parametri in & inout) • TimeOperations (implementarea initiala a serverului) • _TimeImplBase (clasa de baza pentru servant)
Pornirea nameserver-ului • CORBA utilizeaza o tehnica similara cu cea a registrului RMI. Serverele se inregistreaza cu nameserverul iar clientii cer acestuia sa gaseasca serverul • orbd –ORBInitialPort <myPort> Exemplu: orbd –ORBInitialPort 900 • Aceasta este inlocuitorul vechiului Tnsnameserver • myPort trebuie sa corespunda cu proprietatile utilizate in gasirea nameserverului in cadrul clientului si serverului
Codul Client • Asemanator cu RMI • Detine referinta catre obiectul remote • Apeleaza metodele asupra obiectului via obiectul local proxy • Pe de alta parte, exista unele dificultati datorita background-ului multi-limbaj al CORBA
Client.java: package ex1; import Tracker.*; // The package containing our stubs. import org.omg.CosNaming.*; // Client will use the naming service. import org.omg.CORBA.*; // All CORBA applications need these classes. public class Client { public static void main (String args[]) { try { // Create and initialize the ORB ORB orb = ORB.init (args, null); // Get the root naming context org.omg.CORBA.Object objRef = orb.resolve_initial_references ("NameService"); NamingContext ncRef = NamingContextHelper.narrow (objRef); // Resolve the object reference in naming NameComponent nc = new NameComponent ("TimeServer", ""); NameComponent path[] = {nc}; Time timeRef = TimeHelper.narrow (ncRef.resolve (path)); // Call the time server object and print results String time = "Time on the Server is " + timeRef.getTime (); System.out.println (time); } catch (Exception e) { e.printStackTrace (); } } }
Codul Server De partea serverului se afla codul serverului si codul servantului. Codul servantului reprezinta implementarea obiectului. Codul serverului contine unul sau mai multi servanti.
Codul servantului package ex1; // The package containing our stubs. import Tracker.*; // Server will use the naming service. import org.omg.CosNaming.*; // The package containing special exceptions thrown by the name service. import org.omg.CosNaming.NamingContextPackage.*; // All CORBA applications need these classes. import org.omg.CORBA.*; import java.util.*; import java.text.*; class TimeServer extends _TimeImplBase{ public String getTime (){ SimpleDateFormat formatter = new SimpleDateFormat ("MMMMM dd, yyyyy GGG, hh:mm:ss:SSS aaa"); Date date = new Date (); return formatter.format ( date ); } }
Codul serverului Codul serverului exexuta urmatoarele: • Creaza un nou obiect servant • Inregistreaza servantul cu serviciul • Asculta cererile ce trebuie sa soseasca
Codul serverului package ex1; // The package containing our stubs. import Tracker.*; // Server will use the naming service. import org.omg.CosNaming.*; // The package containing special exceptions thrown by the name service. import org.omg.CosNaming.NamingContextPackage.*; // All CORBA applications need these classes. import org.omg.CORBA.*; public class Server { public static void main (String args[]) { try { // Create and initialize the ORB ORB orb = ORB.init (args, null); // Create the servant and register it with the ORB TimeServer timeRef = new TimeServer (); orb.connect (timeRef); // Get the root naming context org.omg.CORBA.Object objRef = orb.resolve_initial_references ("NameService"); NamingContext ncRef = NamingContextHelper.narrow (objRef); // Bind the object reference in naming NameComponent nc = new NameComponent ("TimeServer", ""); NameComponent path[] = {nc}; ncRef.rebind (path, timeRef); // Wait forever for current thread to die Thread.currentThread ().join (); } catch (Exception e) { e.printStackTrace (); } } }
Servicii CORBA • API de nivel scazut, taskuri obisnuite • Life Cycle Service • creare, copiere, mutare, stergere obiecte • Naming Service • Inregisreaza obiectele cu un nume simbolic • Cauta obiectele dupa nume
Servicii CORBA • Serviciu de control concurential • Obtine si elibereaza blocarile exclusive pentru asigurarea unui acces serializabil la obiecte • Serviciu tranzactional • Coordonarea accesului la obiecte • Persistence Service • Depozitarea obiectelor intr-o multitudine de baze de date • RDBMS (Relational DataBase Management System ), OODBMS (object-oriented database management systems ), sisteme de fisiere
Servicii CORBA • Serviciu de securitate • Autentificari, ACL (access control list), criptari, etc. • Servicii eveniment • Notificari necuplate
Servicii CORBA • Relationare - asigura relatii de tip n-ar intre obiectele CORBA • Externalizare –coordoneaza transformarea obiectelor CORBA catre si dinspre exterior • Interogare –suporta interogari pentru obiecte • Proprietati –suporta asocierea de perechi nume-valoare cu obiectele CORBA • Trader –suporta gasirea obiectelor CORBA bazate pe proprietati ce descriu serviciul oferit de obiect
Facilitati CORBA • Asigura framework-uri pentru aplicatiile specializate • Faciliteaza componenta de documente distribuite • OpenDoc • In lucru: • Agenti • Business Objects • Internationalizare
Application objects CORBA domains CORBA facilities Object Request Broker CORBA services Rolul CORBA si al ORB sunt definite in Object Management Architecture Exista 4 categorii de obiecte incluse in OMA.
Cele 4 categorii ale OMA: • servicii CORBA: creare/mutare de obiecte, interogari/tranzactii, controlul concurentei, servicii director • domeniile CORBA sunt standarde ale “pietii verticale”. De exemplu: financial, medical, telecomunicatii si manufacturing • facilitatile CORBA includ documente compuse si managementul sistemului. Ambele se pot aplica peste multiple domenii verticale pentru functionalitati aditionale • Aplicatii: interfete particulare si definite de utilizator
Rezultatul: • programatorul este liber sa realizeze sistemul asa cum vor; ORB defineste protocolul aplicatiei via IDL • programatorul este liber sa aleaga limbajul de programare, mediul si sistemul de operare • ORB permite integrarea componentelor existente intr-o arhitectura a unei retele de obiecte • este posibila integrarea sistemelor existente cu produse off-the-shelf