Alte facilitati oferite de Middleware Exemplul introductiv ilustreaza

  • Slides: 15
Download presentation
Alte facilitati oferite de Middleware • Exemplul introductiv ilustreaza doar facilitatile elementare oferite de

Alte facilitati oferite de Middleware • Exemplul introductiv ilustreaza doar facilitatile elementare oferite de un Broker: – Inregistrarea unui serviciu la Broker – Localizarea unui serviciu prin Broker – Obtinerea unei referinte la un obiect la distanta (o instant a proxy) • In functie de fiecare tehnologie, se mai poate oferi suport si pentru unele din urmatoarele: – Invocare dinamica – Livrare dinamica – Transferul obiectelor (inclusiv remote objects) ca parametri la serviciile la distanta – prin valoare sau referinta – Activarea unui obiect la distanta – Concurenta in interiorul obiectelor server – Securitate – Garbage collection pentru obiectele la distanta – Interoperabilitatea intre clienti si servere din limbaje diferite – Bridge cu alte tehnologii de Middleware

Alte facilitati oferite de Middleware - detalii • Invocare statica vs. Invocare dinamica –

Alte facilitati oferite de Middleware - detalii • Invocare statica vs. Invocare dinamica – Invocare statica: daca clientul cunoaste de la design-time care este interfata serviciului la distanta utilizat: • Se pot genera clasele de tip Client. Side. Proxy pentru serviciul respectiv • Clientul interactioneaza cu acest proxy • Apelurile sunt hard-codate in codul sursa – Invocare dinamica: daca clientul nu cunoaste la design-time care este interfata serviciului la distanta utilizat (acesta va fi descoperit la runtime) • Apelurile nu pot fi hardcodate in codul sursa al clientului • Solutie: un mecanism tip Reflection: orice server ofera o operatie de tip invoke, care primeste ca parametrii operatia concreta si valorile parametrilor • Livrare statica vs livrare dinamica – Livrare statica: Programul server cunoaste de la design-time care sunt obiectele server pe care le gazduieste – Livrare dinamica: Obiecte server pot fi create dinamic la runtime • Server. Side. Proxy poate fi unul generic, care suporta o operatie de tip invoke ca la invocarea dinamica

Alte facilitati oferite de Middleware – detalii (cont) • Concurenta – Varianta simpla: Programul

Alte facilitati oferite de Middleware – detalii (cont) • Concurenta – Varianta simpla: Programul server (Server. Side. Proxy) contine un ciclu in care accepta cereri si le trateaza secvential – Server concurent: creaza cate un thread pentru tratarea cererilor • Problema: Obiectul server poate fi utilizat de thread-uri diferite in acelasi timp – poate necesita utilizarea unor mecanisme de sincronizare

Alte facilitati oferite de Middleware – detalii (cont) • Activarea obiectelor server – Varianta

Alte facilitati oferite de Middleware – detalii (cont) • Activarea obiectelor server – Varianta simpla: Programul server creaza obiectul server, acesta exista atat timp cat ruleaza programul server Activarea obiectelor la cerere: obiectul server este creat doar daca apare prima cerere pentru el – • Activator: un server care: – – – • – Are evidenta unde se gasesc Implementarile (clasele) din care pot fi instantiate obiecte server Are evidenta obiectelor server create Primeste cererea de la client, daca obiectul server nu exista inca - il creaza, altfel invoca operatia solicitata pe obiectul server Activator Pattern: Michael Stal, Douglas Schmidt, PLOP 2005 http: //www. stal. de/Downloads/Activator. pdf Exemple: Implementation repository in CORBA, rmid (Java RMI Activation System Daemon )

Alte facilitati oferite de Middleware – detalii (cont) • Garbage collection pentru obiectele server:

Alte facilitati oferite de Middleware – detalii (cont) • Garbage collection pentru obiectele server: – Obiectele server pentru care nu mai exista nici o remote reference pot fi dezactivate – Variante: • Stil cooperativ: clientii anunta cand nu mai au nevoie/elibereaza referinta la server object, serverul pastreaza evidenta prin contoare • Brokerul pastreaza evidenta canalelor de comunicatie care sunt active • Persistent remote reference – Un client poate sa detina o remote reference catre un server object, chiar daca acesta a fost oprit intre timp (accidental sau time-out) – Daca clientul incearca sa acceseze obiectul server pentru care detine o referinta, broker-ul trebuie sa il reactiveze si sa il aduca in starea in care acesta a fost inainte de dezactivare • sunt necesare mecanisme de salvare a starii obiectelor server, de aplicat automat inainte de dezactivare

Alte facilitati oferite de Middleware – detalii (cont) • Interoperability intre clienti si servere,

Alte facilitati oferite de Middleware – detalii (cont) • Interoperability intre clienti si servere, indiferent de limbajul in care sunt implementate: – Interface Description Languages: • Exista un model comun (model orientat pe obiecte, stabileste un sistem de tipuri, operatii, interfete, exceptii) • interfata obiectelor server este descrisa folosind un limbaj de descriere neutru • Exista reguli (si tool-uri) care mapeaza conceptele IDL pe particularitatile unor limbaje de programare concrete – Arhitectura de referinta CORBA

CORBA: Arhitectura Server Remote Interface IDL Client Interface Repository Dynamic IDL Stub Invocation (Client.

CORBA: Arhitectura Server Remote Interface IDL Client Interface Repository Dynamic IDL Stub Invocation (Client. Side Interface Proxy) ORB Interface Remote Object IDL Skeleton (Server. Side Proxy) ORB (Object Request Broker) Object Adapter Implem Repository

CORBA - Pas 1. Definire interfata • Se defineste interfata Stock. Market • Aceasta

CORBA - Pas 1. Definire interfata • Se defineste interfata Stock. Market • Aceasta exporta operatia get_price: – Parametru: numele companiei cotate la bursa – Rezultat: valoarea actiunilor Specific CORBA: • Interfata se defineste intrun limbaj neutru, CORBA IDL module Simple. Stocks { interface Stock. Market { float get_price(in string Company); }; }; Fisier Stock. Market. idl

CORBA - Pas 2. Generare Proxy-uri CORBA IDL Stub/Skeleton Se genereaza automat din definitia

CORBA - Pas 2. Generare Proxy-uri CORBA IDL Stub/Skeleton Se genereaza automat din definitia interfetei IDL > idl 2 java Stock. Market. idl Rezulta clasele/fisierele: Client Stub: _st_Stock. Market. java Server Stub: _Stock. Market. Impl. Base. java

CORBA - Pas 3. Implementare Obiect • Se implementeaza clasa Stock. Market. Impl •

CORBA - Pas 3. Implementare Obiect • Se implementeaza clasa Stock. Market. Impl • Aceasta realizeaza operatia get_price Specific CORBA: • Un obiect accesibil la distanta trebuie sa extinda server-side-proxy-ul generat automat din descrierea interfetei • Acest lucru faciliteaza rezolvarea cazurilor cand limbajul nu permite reflection import org. omg. CORBA. *; import Simple. Stocks. *; public class Stock. Market. Impl extends _Stock. Market. Impl. Base { public float get_price(in string company) { float price=12345; return price; } public Stock. Market. Impl (String name) { super(name); } } Fisier Stock. Market. Impl. java

CORBA - Pas 4. Implementare Server • Se implementeaza un program Stock. Market. Server,

CORBA - Pas 4. Implementare Server • Se implementeaza un program Stock. Market. Server, care creaza un obiect de tip Stock. Market. Impl, ce poate fi accesat de la distanta • Obiectul creat este inregistrat sub numele “NASDAQ” Specific CORBA: • ORB • BOA import org. omg. CORBA. *; Import Simple. Stocks. *; public class Stock. Market. Server { public static void main(String[] args) { try { ORB orb=ORB. init(); BOA boa=orb. BOA_init(); Stock. Market. Impl stock. Market. Impl= new Stock. Market. Impl(“NASDAQ”); boa. obj_is_ready(stock. Market. Impl); boa. Impl_is_ready(); } catch (Exception e) {} } } Fisier Stock. Market. Server. java

CORBA - Pas 5. Implementare Client • Se implementeaza un program Stock. Market. Client,

CORBA - Pas 5. Implementare Client • Se implementeaza un program Stock. Market. Client, care acceseaza un obiect de tip Stock. Market aflat la distanta, si invoca operatia get_price pentru un nume de companie • Prin intermediul Broker se localizeaza obiectul cu numele “NASDAQ” Specific CORBA: • Stock. Market. Helper = proxy generat • Codul client instantiaza direct client-side proxy ! (pentru ca doar asa se poate trata si cazul cand limbajul de implementare nu suporta reflection) import org. omg. CORBA. *; import Simple. Stocks. *; public class Stock. Market. Client { public static void main(String[] args) { try { ORB orb=ORB. init(); Stock. Market market= Stock. Market. Helper. bind(orb, “NASDAQ”); market. get_price(“ABC SRL”); } catch (Exception e) {} } } Fisier Stock. Market. Client. java

CORBA - Pas 6. Rulare aplicatie Location service (numele OSAgent e specific unei anumite

CORBA - Pas 6. Rulare aplicatie Location service (numele OSAgent e specific unei anumite implementari CORBA) > start osagent > start java Stock. Market. Server > start java Stock. Market. Client

Scenariu Broker in care clientul si serverul sunt in limbaje diferite 1. Definire interfata

Scenariu Broker in care clientul si serverul sunt in limbaje diferite 1. Definire interfata obiect la distanta – in IDL neutru IDL INTERFACE Stock. Market 5. Implementare Client Folosind LANGUAGE 1 Stock. Market. Client 3. Generare Proxy TOOL 1 IDL-to-LANG 1 Stock. Market Client. Side PROXY float get_price(Company) 2. Implementare obiect 4. Implementare Server Folosing LANGUAGE 2 Stock. Market. Server Toy. ORB library impl in LANG 1 Toy. ORB library impl in LANG 2 Byte. Comm in LANG 1 Byte. Comm in LANG 2 Naming. Service Stock. Market. Impl 3. Generare Proxy TOOL 2 IDL-to-LANG 2 Stock. Market Server. Side PROXY

Bibliografie suplimentara facultativa • [POSA 2]: Pattern-Oriented Software Architecture – Volume 2: Patterns for

Bibliografie suplimentara facultativa • [POSA 2]: Pattern-Oriented Software Architecture – Volume 2: Patterns for Concurrent and Networked Objects, Wiley, 2000. http: //www. cs. wustl. edu/~schmidt/POSA 2/