Con il termine di middleware di accesso remoto ai dati (Remote Data Access o RDA) si intendono quelle piattaforme – spesso anche denominate database middleware – che offrono servizi per lo sviluppo di applicazioni di accesso a basi di dati remote, basate sul paradigma cliente-servente.
I database middleware forniscono servizi di accesso ad archivi o a sistemi DBMS di tipo relazionale, gerarchico, reticolare o a oggetti, con vari livelli di trasparenza per mascherare la distribuzione dei dati sui nodi di rete e le eterogeneità tra i sistemi
Viene adoperato il linguaggio standard SQL (Structured Query Language) per l’interrogazione e la manipolazione logica di dati remoti.
Le interfacce di programmazione offerte sono di tipo proprietario, oppure basate su standard de facto, quale ad esempio la specifica Open DataBase Connectivity (ODBC).
Il funzionamento nel caso di applicazioni a due livelli può essere così schematizzato:
Vantaggi dello strato database middleware
Un’interrogazione SQL produce in generale una quantità di dati variabile: la dimensione della risposta non è perciò nota a priori (a differenza di una RPC).
L’applicazione cliente non accede direttamente al DBMS ma preleva i record risultanti dall’istruzione SQL direttamente dall’interfaccia RDA locale.
Il DBMS viene quindi sollevato dall’onere di gestione delle sessioni applicative.
La trasmissione dei dati su rete avviene in maniera ottimizzata a cura dei due componenti middleware.
Se i comandi SQL sono generati dinamicamente (dynamic SQL), il middleware locale al cliente svolge anche controlli sintattici, evitando di richiedere al DBMS remoto l’esecuzione di istruzioni incorrette.
Il modello a oggetti distribuiti è un’estensione in ambiente distribuito delle tecniche di programmazione ad oggetti.
Schematizzando:
DO = OOP + C/S
Distributed objects = object-oriented programming + client-server
L’utilizzo di una piattaforma Distributed Object Middleware (DOM) permette di invocare un metodo su di un oggetto remoto come fosse locale.
Esempi di tecnologie DOM:
I componenti di un’applicazione distribuita sono oggetti che risiedono su macchine diverse e comunicano mediante invocazione di metodi.
Il meccanismo di invocazione di un metodo su di un oggetto remoto è analogo a quello delle RPCs.
Il programmatore applicativo viene sollevato dall’onere di gestione della complessità dovuta alla distribuzione dei componenti su piattaforme eterogenee, sviluppando software ad oggetti in maniera (il più possibile) simile al caso sequenziale.
Sono disponibili strumenti di sviluppo simili al caso RPC:
Le piattaforme Distributed Object Middleware si presentano spesso sotto forma di Object Request Brokers.
Un ORB è una sorta di bus software per la comunicazione tra oggetti su rete. Esempi di ORB:
Il ciclo di sviluppo è analogo al caso RPC.
Un middleware a oggetti non basato su ORB
I processi serventi creano oggetti e ne registrano il nome in un catalogo (RMI registry).
I clienti ottengono riferimenti agli oggetti remoti – eventualmente tramite ricerca nel catalogo – e ne invocano i metodi.
RMI fornisce i meccanismi per
Il trasferimento del codice utilizza un web server.
Tali meccanismi consentono di realizzare sistemi con codice mobile.
Componente
Component Based Software Engineering (CBSE)
Il modello a componenti può essere considerato una evoluzione del modello a oggetti
Offrono ai componenti meccanismi predefiniti di
Lo sviluppatore ha il compito di dichiarare le strategie con cui associare i servizi standard a un componente.
Ciò avviene in fase di programmazione o, più tipicamente, di distribuzione del componente (deployment).
Basate sul concetto di contenitore (container).
Ambiente di esecuzione di componenti, in grado di gestirne il ciclo di vita, eseguirli, offrire i servizi standard necessari.
Quattro tipi di componenti:
I componenti EJB sono ospitati in contenitori, che ne gestiscono il ciclo di vita.
2. La modellazione a oggetti e il linguaggio UML (richiami)
3. Generalità su Java e la programmazione ad oggetti
6. Regole di traduzione da UML a Java/C++
7. Programmazione multi-thread
8. Sincronizzazione tra thread
9. Programmazione client-server con socket TCP/IP (Java networkin...
10. Programmazione di applicazioni client-server: il Pattern Proxy...
12. Design Patterns
13. Pattern architetturali - Esempi
14. Design pattern creazionali. Esempi
15. Design pattern strutturali. Esempi
16. Introduzione alle tecnologie middleware
17. Modelli di middleware: RPC, MOM, TP, TS
AA. VV., Java Server Programming – J2EE Edition, Wrox Press, 2000.
Bernstein P.A., Middleware: A Model for Distributed Services, Communications of the ACM, Vol. 39, N. 2, 1996.
Birrell A.D., Nelson B.J., Implementing Remote Procedure Calls, ACM Transactions on Computer Systems, Vol. 2, N. 1, 1984.
Gelernter D., Generative Communication in Linda, ACM Transactions on Programming Languages and Systems, Vol. 7, N. 1, 1985.
Carriero N., Gelernter D., How to Write Parallel Programs: A Guide to the Perplexed, ACM Computing Surveys, 1989.
Coulouris G., Dollimore J., Kindberg T., Distributed Systems: Concepts and Design, Addison-Wesley, 1998.
Edwards W.K., Joy B., Core Jini – 2nd ed., Prentice Hall, 2001.
Lehman T.J. et al., Hitting the distributed computing sweet spot with TSpaces, Computer Networks, Vol. 35, 2001.
Monson-Haefel R., Enterprise Java Beans, O’Reilly, 2000.
Mullender S., Distributed Systems, Addison-Wesley, 1993.
Natis Y., Pezzini M., Shulte R., Middleware Deployment Trends: Survey of Real-World Enterprise Applications, Gartner Strategic Report, 1999.
Sing Li, Professional Jini, Wrox Press, 2000.