Sistemi distribuiti e Java

Sistemi distribuiti e Java

Java è un linguaggio Object-Oriented, originariamente nato per la realizzazione di semplici applicazioni per la programmazione di apparati o periferiche intelligenti. La novità principale di Java consiste nel fatto che un programma non viene compilato in linguaggio macchina, ma in un codice virtuale, detto Java bytecode; questo successivamente viene interpretato a run-time da una macchina virtuale, detta Java Virtual Machine (JVM), le cui specifiche di funzionamento sono uguali per  tutti  i sistemi, ma la cui realizzazione è particolare per ogni sistema operativo: la JVM si occupa di effettuare la traduzione del Java bytecode nel codice macchina del sistema ospite. Fornendo per ogni sistema la sola implementazione specifica della JVM e rimanendo invece uguali le caratteristiche e l’ambiente a run-time di Java, si ha un’architettura indipendente dall’hardware e dal sistema operativo. In questo modo si ha la portabilità del software da una piattaforma ad un’altra, cioè la cosiddetta “WORA portability” (Write Once, Run Anywhere) che è alla base del successo di Java non solo come linguaggio, ma come vero e proprio approccio allo sviluppo di sistemi distribuiti (Sistemi distribuiti e Java).

Il modello Java sostanzialmente prevede la realizzazione di oggetti, eseguiti in modalità interpretata su Java machine, che dialogano fra loro mediante protocollo il RMI (Remote Method Invocation) ed hanno la capacità di migrare da una Java machine ad un’altra a questa collegata in rete, si veda a tal proposito la figura seguente.

Questo modello appare particolarmente adatto in scenari di distribuzione su internet/intranet di servizi a insiemi aperti di utenti non predefiniti, per i quali non è possibile imporre vincoli sulle piattaforme utilizzate.

Sistemi distribuiti e Java - Approccio SUN Java
Sistemi distribuiti e Java – Approccio SUN Java

Applet Java

Java ha introdotto un nuovo modello architetturale che appare particolarmente adatto alla distribuzione di applicazioni sul Web e che si basa sulla scrittura di piccoli componenti software chiamati applet che possono essere scaricati dalla rete ed eseguiti da un browser compatibile con Java. In questo modo è possibile distribuire software che permette l’interazione con il sistema server anche a chi usa macchine differenti. L’utente, utilizzando un browser Web, può richiedere il download di un applet Java presente su una pagina HTML di un sito. L’applet scaricato è memorizzato in una apposita area dedicata al codice esterno (detta sandbox), dove è sottoposto ad una procedura di controllo per accertare la sua innocuità; se la verifica è positiva l’applet è eseguito e permette quindi l’interazione dell’utente con i servizi messi a disposizione dall’applet stesso. Un’applet fornisce dunque una GUI (Graphical User Interface) per la  richiesta  di  servizi  al server HTML, ovvero il codice di un’applicazione, permettendo di creare pagine Web interattive.

Concetti sostanzialmente analoghi a quelli introdotti da Java e dagli applet vengono forniti  anche  dai  componenti ActiveX della Microsoft, in cui il linguaggio utilizzato è sostanzialmente il VisualBasic; chiaramente, in questo caso, è necessario che il browser sia “ActiveX compatibile”. Nella realtà i browser che attualmente hanno larga diffusione sul mercato sono solamente due: Netscape Communicator che punta sul binomio Java/CORBA, e Microsoft Internet Explorer che è orientato verso ActiveX/ASP/DCOM. Comunque entrambi permettono la possibilità di eseguire anche la tecnologia “concorrente”.

Enterprise Java Beans (EJB)

La tecnologia degli Enterprise JavaBeans (EJB) estende il concetto di portabilità dei componenti Java dai client ai server applicativi. Un componente Java, per poter essere eseguito su un client, ha bisogno soltanto della JVM che lo interpreti e lo traduca nel codice della piattaforma ospite. L’esecuzione di applicazioni su server si presenta invece molto più complessa ed ha bisogno della disponibilità di un insieme di servizi quali la gestione delle transazioni e l’accesso concorrente a basi di dati. La tecnologia degli EJB  è una specifica, guidata dalla Sun con il supporto di altri fornitori, che definisce quali debbano essere questi servizi e come i componenti possano richiamare le API (Application Programming Interface) che implementano tali servizi.

L’effettivo successo e utilità di questo approccio dipende dal concreto impegno, da parte dei fornitori, a sviluppare le API necessarie a rendere i loro server “EJB-compliant”. Nella tabella seguente sono elencate alcune Java API a titolo esemplificativo (Esempi di Java API).

API Descrizione
RMI Remote Method Interface: crea interfacce per la chiamata a metodi remoti
Java IDL Java Interface Definition Language: crea interfacce per il supporto a CORBA
JMS Java Messaging Service: supporta comunicazioni asincrone con diversi meccanismi, quali il Publish&Subscribe
JTA e JTS Java Transaction e Java Transaction Service: gestione delle transazioni distribuite
JDBC Java Data Base Access: interfaccia unica per l’accesso ai database relazionali

La struttura e l’organizzazione dell’architettura EJB si basa su alcuni concetti fondamentali:

  • Componente: software riutilizzabile che può essere combinato con altri componenti per produrre sistemi complessi e personalizzati; si distinguono essenzialmente due tipi di componenti, client e server, ed entrambi vengono eseguiti all’interno di un container; l’invocazione delle funzioni, l’accesso e la manipolazione dei dati sono realizzate mediante interfacce standard con cui vengono rese disponibili ad altri componenti le proprie funzionalità;
  • Container: software che fornisce un contesto applicativo per uno o più componenti, garantendo i servizi di gestione e di controllo degli stessi; quando un client invoca un componente server, un container alloca le risorse necessarie alla sua esecuzione (memoria, spazio di processo, ecc.), inizializza il componente e gestisce tutte le interazioni tra il componente e l’esterno; un componente client normalmente è eseguito all’interno di un contenitore di tipo visuale (una form, una pagina web), mentre un componente server è eseguito all’interno di un container fornito da un server applicativo;
  • JavaBean: è una classe Java specializzata che può essere usata e modificata per lo sviluppo di applicazioni; una caratteristica importante dei bean è la possibilità di personalizzarne alcuni aspetti attraverso il meccanismo dell’attributo con valore/stato: ogni bean offre, attraverso un’interfaccia OO, degli attributi i cui valori, assegnati durante lo sviluppo o anche durante l’esecuzione, ne specificano il comportamento; questo meccanismo permette di sviluppare componenti altamente riusabili, in quanto tutte le proprietà dipendenti dal progetto del particolare sistema possono essere specificate nel momento di assemblare i bean, e non in fase  di progettazione. Una cosa analoga avviene per i widget degli ambienti di sviluppo di GUI (Java   AWT, VisualBasic, ecc.), in cui esistono degli oggetti, ad esempio la finestra, e settando alcuni attributi si specifica il comportamento, ad esempio colore, il titolo, il modo di aprirsi, chiudersi, iconizzarsi, ecc. In questo modo il widget può essere riutilizzato in una molteplicità di applicazioni differenti, e la GUI viene semplicemente costruita per assemblaggio di widget differenti.
  • Enterprise Java Beans: concettualmente sono analoghi ai semplici JavaBean e ne possiedono tutte le caratteristiche di assemblabilità e personalizzabilità; JavaBean è la nomenclatura utilizzata per i componenti sul lato client (che tipicamente sono widget GUI), mentre Enterprise JavaBean è quella usata per i componenti sul lato server (tipicamente oggetti di business), che devono essere sviluppati e modificati usando dei tool forniti dai server

L’architettura EJB fornisce quindi un ambiente applicativo integrato che semplifica il processo di sviluppo di sistemi ed applicazioni: un EJB server fornisce un ambiente che supporta l’esecuzione di applicazioni sviluppate utilizzando la tecnologia EJB, gestendo  e combinando l’allocazione di risorse a tali applicazioni. All’interno di questo modello, un EJB server deve fornire un insieme di servizi standard impliciti, fra i quali:

  • Ciclo di vita: vengono gestite l’allocazione del processo in cui il componente viene eseguito, nonché l’attivazione e la distruzione dell’oggetto;
  • Gestione dello stato: viene assicurata la conservazione e il ripristino dello stato originale dell’oggetto dopo l’attività transazionale, o comunque in relazione all’invocazione dei metodi che possono modificare lo stato;
  • Sicurezza: viene effettuata l’autenticazione degli utenti e/o la verifica dei necessari livelli di autorizzazione;
  • Transazione: in altri modelli la gestione delle attività transazionali dell’oggetto, in particolare il commit a seguito del completamento positivo della transazione, ovvero il rollback in caso contrario, vengono assicurati mediante apposito codice specifico; nel caso del modello EJB ciò viene gestito automaticamente mediante il Container.
  • Distribuzione: i servizi vengono assicurati attraverso la API RMI (vedi tabella precedente), che rende le locazioni dei server trasparenti ai client; RMI supporta più protocolli di comunicazione fra cui, oltre a quello nativo JRMI (Java Remote Method Invocation), il protocollo IIOP che consente di realizzare una integrazione tra sistemi CORBA e sistemi

 

Precedente Il middleware DCOM per sistemi distribuiti Successivo Sistemi distribuiti e Tecnologie web

Lascia un commento

*