MokaByte Numero 34  - Ottobre  99
 
Domino R5,
eSuite e Java
di
Marco Fabbri
Un esempio lampante di interoperabilità fra  tecnologie differenti, anche se strettamente legate fra loro


 

Uno degli esempi commerciali che rappresenta più efficacemente la possibilità di far interagire le caratteristiche di numerose tecnologie basate su Java è senza dubbio la versione 2 della eSuite di Lotus (www.esuite.lotus.com). Il DevPack 2.0 della eSuite di Lotus è costituito da un set di Java applets e utility per creare applicazioni web based come reports, calendario, lista contatti. In questo articolo vedremo come utilizzare queste applet per creare un report di vendite i cui dati sono contenuti in una vista della Release 5 di Lotus Notes. Questo esempio ci consentirà di apprezzare il livello di interoperabilità che è possibile raggiungere in un ambiente Java enabled.  Vediamo  aggiormente nel dettaglio quali sono e come interagiscono le varie tecnologie che consentono di per ottenere questo semplice report.
R5 e CORBA
La grande rivoluzione della release 5 di Domino (d'ora in poi R5) è rappresentata dall'introduzione di CORBA per l'accesso ai dati. 
L'acronimo CORBA sta per Common Object Request Broker Architecture ed è costituito da una serie di specifiche standard necessarie per costruire gli ORB (Object Request Broker), oggetti distribuiti che devono essere in grado di dialogare tra di loro. Questi oggetti distribuiti comunicano tra loro attraverso messaggi costruiti seguendo le regole del protocollo GIOP (General Inter-ORB Protocol), la cui implementazione più conosciuta è l'IIOP (Internet Inter-ORB Protocol) nel quale il livello di trasporto utilizzato è il celeberrimo TCP/IP.
Quindi CORBA fornisce le specifiche necessarie per costruire oggetti distribuiti (gli ORB), implementabili in vari linguaggi quali, ad esempio, Java, C, C++ e per consentire ad essi di comunicare fra loro anche se sono stati costruiti da produttori di software diversi grazie al GIOP e alla sua più conosciuta implementazione, l'IIOP.
Per approfondimenti su CORBA trovate su Mokabyte del dicembre 1998 l'articolo di Bemporad o fate riferimento al sito della OMG (www.omg.org), la società che ha creato le specifiche.
L'implementazione di un ORB (Object Request Broker) all'interno del motore della R5, infatti, ha cambiato radicalmente la modalità di accesso ai database Domino: non occorre più un Notes client per interagire direttamente con il server ma è sufficiente un'applet in grado di parlare IIOP.
In particolare, insieme alla R5, vengono distribuiti alcuni file JAR che consentono di accedere agli oggetti Notes (documenti, viste, lista degli accessi, ecc.) via Java.
Tra questi troviamo i file NCSO.JAR e NCSOC.JAR che contengono l'implementazione delle classi CORBA a lato client.
Questo consente due cose: creare applet o applicazioni Java in grado di accedere agli oggetti Domino attraverso IIOP.
L'applet, tramite le classi CORBA, potrà avere accesso alla Notes Object Interface (d'ora in poi NOI) e colloquiare direttamente con il server per visualizzare il contenuto di viste, documenti, ecc.
 
 
Figura 1: schema del modello CORBA

L'utilizzo del NOI attraverso Java è stato introdotto da Puliti in Mokabyte di Giugno 1999.
Un'applicazione Java consentirà a computer privi del Notes Client di accedere agli stessi dati semplicemente aggiungendo NCSO.JAR e NOTES.JAR al CLASSPATH.
Ovviamente questi accessi saranno regolati dalle rigorose politiche di accesso dei server Domino.
Alcune note per l'installazione dell'ambiente. Per consentire all'applet di interagire con l'ORB implementato nella R5, occorre fare tre cose, entrambe importanti: avviare l'ORB, consentire le connessioni IIOP e includere le classi CORBA nell'applet attraverso il Designer.
Avviare l'ORB è molto semplice: posso aggiungere DIIOP ai ServerTasks nel NOTES.INI (immagine notesini.gif) o scrivere il comando LOAD DIIOP nella console Domino.
 
 
 

Figura 2: file di configurazione notes.ini. Si noti la riga relativa ai task da attivaer al momenot dell'inizializzazione del server

 
 
 

In questo modo si attiva il demone dell'IIOP (l'ORB) e la porta 63148 si pone in attesa di connessioni. Ora non resta che stabilire chi potrà accedere a questa posta attraverso la voce IIOP nella cartella Security
 
 

Figura 3: finestra di configurazione del servizio IIOP

In questo caso ho usato * per indicare che tutti possono accedere al DIIOP esclusivamente a scopo di test: solitamente si definisce un ACL che contiene l'utente Anonymous per le richieste da Internet.
Infine per inserire le classi CORBA client all'interno dell'applet, è necessario spuntare l'opzione "Applet uses Notes CORBA Classes" nelle proprietà dell'applet .
 
 
 

Figura 4: impostazione delle proprietà del client

Torniamo al NOI. La radice dell'Object Model di Notes è rappresentato dall'oggetto Session. Instanziandolo, sono in grado di accedere ai database, da questi alle viste e così via.
 
 

Figura 5: schema della architettura di NOI

Un piccolo esempio di applicazione Java stand alone che visualizza il nome dell'utente e del database su di una macchina priva del Notes client ma dotata dei file NCSO.JAR e NOTES.JAR:
 

import java.lang.*; 
import java.util.*; 
import lotus.notes.*;
public class DatiMinimi { 
    public static void main(String argv[]) 
        {
        try {

            NotesThread.sinitThread();
            Session s = Session.newInstance();
  System.out.println("Utente corrente: " + s.getUserName());
            Database db = s.getDatabase("", "names.nsf");
System.out.println("Nome database: " + db.getTitle());
            }
        catch (Exception e) {e.printStackTrace();}
        finally 
        {
    System.out.println("Chiusura connessione...");
    NotesThread.stermThread();
    }
        }
}  // end class


Lanciando questa applicazione da riga di comando verrà visualizzato il nome dell'utente e del database dei contatti personali.
Per maggiori dettagli, è possibile scaricare il Domino Toolkit for Java versione 2.0 dal sito Lotus dedicato agli sviluppatori: www.lotus-developer.com.
Oppure è possibile fare riferimento al Domino and Java Technology Learning Center di Lotus (http://waterworks.lotus.com/wwbpp/javatlc.nsf/).
 
 
 

LiveConnect

Questa tecnologia inventata da Netscape consente di leggere, scrivere proprietà, invocare metodi di un applet usando JavaScript. Quindi se voglio cambiare la proprietà sfondo di un applet che ho chiamato esempio attraverso Javascript, non devo far altro che usare l'istruzione:
 
document.esempio.sfondo = "yellow".


Combinando LiveConnect con le funzionalità CORBA, ottengo un'altra delle features particolarmente interessanti della R5: l'accesso ai dati Domino attraverso JavaScript.
In altre parole, posso visualizzare e modificare il contenuto di documenti Notes ottenendo i dati direttamente dal server senza richiedere singolarmente ogni dato così come era necessario fare nelle versioni 4.x.
Nel dettaglio le informazioni viaggiano in questo modo: viene inserita nella pagina HTML un applet che crei il ponte IIOP con il server. Per far ciò è sufficiente derivare la classe AppletBase e inserire fra gli archivi NCSO.JAR: un'operazione molto rapida all'interno del Domino Designer come già visto in precedenza. (immagine PinPointDesigner.gif)
 
 

Figura 7: Notes Designer in azione per la definizione delle funzionalità del client

Grazie a LiveConnect, invoco via JavaScript il metodo openSession() dell'applet. In questo modo ho istanziato sul browser un oggetto Session e ho aperto un canale di comunicazione con il server Domino.
Ora non mi resta che utilizzare la NOI così come avrei fatto in una normale applicazione Java: infatti, se assumo di creare una pagina HTML con un applet chiamata PinPoint, l'esempio precedente può funzionare in un browser invece che in un'applicazione Java stand alone.
Sarà sufficiente scrivere una funzione JavaScript come questa:
 

function DatiMinimi { 
var dominoAccessApplet = document.PinPoint; 
 var sessione = dominoAccessApplet.openSession();
alert("Utente corrente: " + session.getUserName());
var db = session.getDatabase("", "names.nsf");
alert("Nome database: " + db.getTitle());
alert("Chiusura connessione...");
 dominoAccessApplet.closeSession(session);
}


Associando questa funzione, ad esempio, alla pressione di un tasto, accadono diverse cose interessanti.
Per prima cosa alla variabile sessione viene associato un oggetto Session sul server con il quale comunicare tramite CORBA; l'applet ha aperto il canale di comunicazione grazie al metodo openSession.
Ora, grazie a LiveConnect, posso chiamare gli stessi metodi che abbiamo visto in precedenza come se avessi un accesso locale al NOI.
Quindi uso il metodo getUserName dell'oggetto Session per visualizzare il nome dell'utente in una finestra alert e così via.
 
 
 

Infobus


Per visualizzare i dati della nostra campagna vendite, utilizzeremo una delle applet distribuite con la eSuite ma come faremo a trasformare le informazioni giunte al browser via CORBA in parametri del grafico?
Utilizzeremo InfoBus, una serie di Java API che consentono la cooperazione fra componenti come i JavaBeans o le  applets di scambiarsi dati in modo dinamico. Senza entrare nei dettagli di questa tecnologia, per i quali vi rimandiamo all'articolo di Chiarelli nel Mokabyte di Maggio 1999, InfoBus stabilisce le regole di comunicazione fra applets e JavaBeans basandosi sul concetto di produttori e consumatori.
Ad esempio se abbiamo due applet su di una pagina HTML, una può comunicare dati all'altra pubblicandoli sull'InfoBus sotto forma di data item divenendo produttrice mentre la seconda, in ascolto sull'InfoBus, diviene consumatrice. Ogni applet contenuta nel DevPack può essere sia consumatore che produttore.
Esistono diversi tipi di data item: nel nostro caso utilizzeremo un array bidimensionale che riporti la tabella con i dati relativi alle vendite.
Occorrerà quindi un applet che sia in grado di fare da ponte fra l'InfoBus e i dati ricavati dal database Domino e una seconda applet che fungerà da consumatore prelevando il data item e graficandolo.
Per far ciò utilizzeremo la Script Helper applet e la Chart Applet.
 
 
 

Report esemplificativo

Riassumiamo brevemente il funzionamento del nostro piccolo esempio: i dati sono contenuti all'interno di un database Notes e, in particolare in una vista creata ad hoc e chiamata AcquistiStat.
 
 
Figura 8: la vista finale

Per coloro che non hanno dimestichezza con l'ambiente Notes, una vista è una raccolta di documenti che hanno caratteristiche comuni. Una sorta di query SQL anche se il parallelo fra i database relazionali e Notes, database documentale, non è diretto.
Per altri dettagli introduttivi su Domino, vedere l'articolo di Puliti del giugno 1999.
Questa vista contiene 3 semplicissimi documenti che riportano il nome del continente in cui si sono registrate le vendite e i dati di vendita relativi ai 4 trimestri.
 
 

Figura 9: a vista in funzione

Quando apro il form con il browser, vengono caricate tre applet: l'applet PinPoint per creare il canale di comunicazione CORBA con il server, l'applet Script Helper che chiameremo bridge che avrà il compito di pubblicare il data item sull'InfoBus e infine l'applet Chart che chiameremo statistiche che dovrà visualizzare i dati delle vendite ricevuti da Domino.
 

Figura 10: consultazione della la vista tramite il browser

Inizialmente il grafico non viene mostrato in quanto non contiene dati.
Quando premo il pulsante Visualizza Statistiche, il browser avvia la funzione che consente di visualizzare i dati sull'applet statistiche.
Per prima cosa viene aperta la sessione e lo script segnala l'avvenuta connessione con il server Domino con una finestra che riporta il nome del database con il quale è avvenuta la connessione.
(immagine PulsantePremuto.gif)
A questo punto la PinPoint applet ha aperto la sessione CORBA con il server e, tramite JavaScript e LiveConnect, ho chiamato il metodo getTitle() per avere il titolo del database con il quale sta colloquiando il browser.
Poi leggo i dati contenuti in ciascun documento e li pubblico come vettore su InfoBus tramite la brigde applet.
(immagine InserimentoDataItem.gif)
Mentre la bridge applet si comporta da produttore, il Chart è in attesa del data item e agirà come consumatore del vettore che viene pubblicato sull'InfoBus.
Nel momento in cui effettuo il merge del vettore sull'InfoBus, cioè ho completato la lettura dei documenti da Domino e la pubblicazione sull'InfoBus, il Chart ottiene il data item ed è in grado di produrre il grafico.
 
 

Figura 11: l'applet in esecuzione nel browser

 
 
 
 

Conclusioni

Come si può notare abbiamo raccolto in questo esempio alcune delle tecnologie più recenti che coinvolgono il mondo Java. Da questo punto di vista Lotus è senz'altro all'avanguardia e la R5 rappresenta un notevole passo in avanti per trasformare la piattaforma Domino in una piattaforma aperta.
In questo esempio abbiamo velocemente percorso l'integrazione fra numerose tecnologie per farvi comprendere come sia semplice e allo stesso tempo molto potente integrare funzionalità basate su Java.
I difetti di questo tipo di applicazioni basati sulla eSuite sono comunque piuttosto evidenti.
Primo fra tutti la velocità: mediamente le applet della suite "pesano" 200 KB e la versione "compact" delle classi CORBA lato client, NCSOC.JAR, consta di 790 KB.
Questo significa che l'avvio dell'applicazione su di un Pentium 133 con 32 MB di RAM risulta completo dopo circa un minuto di attesa.
Ovviamente è possibile installare i JAR localmente e quindi "pagare" lo startup solo una volta ma comunque a meno che non si possieda una connessione piuttosto veloce, le applicazioni basate sulla eSuite sono fortemente orientate alla presenza di una Intranet.
I vantaggi comunque sono evidenti: indipendenza dalla piattaforma e ridotto traffico fra client e server rendono comunque una soluzione basata sulla eSutie molto interessante.
Grazie all'accesso via CORBA infatti non sarà più necessario il "ping-pong" fra browser e server per avere i dati aggiornati ma sarà possibile leggerli via JavaScript in tempo reale.

 
 

MokaByte rivista web su Java

MokaByte ricerca nuovi collaboratori
Chi volesse mettersi in contatto con noi può farlo scrivendo a mokainfo@mokabyte.it