MokaByte Numero  42  - Giugno 2000
 
Java nel 
Database Informix
di 
Nicola Venditti
Introduzione al database di Informix e 
alla sua  piattaforma server IIF.2000 

Quest’articolo è  una introduzione al mondo middleware di Informix, con particolare riguardo alle tecnologie Java. Introdurremo, per cominciare, il  database nella sua più recente e avanzata evoluzione, che si compone di “Informix Dynamic Server 2000” (il motore di database vero e proprio) e della piattaforma di sviluppo  “Informix Internet Foundation 2000” (che ingloba tutta l’infrastruttura e le tecnologie middleware)

Introduzione
Informix è una tra le più grandi società al mondo produttrici di DBMS e software correlato, insieme con Oracle e IBM.
Queste ultime due, con i loro prodotti di punta “Oracle 8i” e “DB2” sono le sue più serie rivali sul mercato dei database.
Dal punto di vista tecnologico però il vero concorrente  di Informix è Oracle, che può vantare un potente motore transazionale e un application server universalmente riconosciuto come uno dei migliori in questo campo : per questo occasionalmente faremo, là dove ha rilevanza, delle comparazioni che ci aiuteranno a capire la diversa filosofia con cui  sono stati disegnati i due DBMS e come hanno integrato nel tempo la funzionalità di server applicativo(e quindi Java).
 
 
 

Informix Dynamic Server 2000 
Dynamic Server.2000 è l’ultima versione del server di database, rilasciata meno di un anno fa. E’ un motore transazionale estremamente performante di alta affidabilità , strutturalmente estendibile e dinamicamente scalabile. 

Dynamic Server è un server di database: un programma applicativo che gestisce l’accesso simultaneo di più applicazioni client a una o più basi di dati.
IDS (Informix Dynamic Server) è stato progettato secondo il modello architetturale di Informix chiamato Dynamic Scalable Architecture (DSA), che si articola essenzialmente in tre componenti:
 

  • hared Memory Management (controllo delle caches e risurse condivise)
  • Disk management (gestione dei volumi, degli accessi al disco ecc..)
  • Virtual Processors (gestione dei tasks)


Questo modello rende IDS così flessibile da poter essere utilizzato in situazioni completamente differenti come ambienti OLTP, data-warehouse, Web, gestione del multimediale ecc..

Chi si occupa e conosce almeno un po’ l’object oriented è naturalmente portato a pensare che il suo ambito sia quello applicativo e il database , con la sua struttura relazionale e quindi non-OO, sia non solo estraneo al proprio mondo,ma, visto che in ogni caso occorre archiviare i dati e i DBMS in azienda sono per lo più relazionali, sono anche una non banale complicazione. Esistono non a caso sul mercato diversi (e costosi)  prodotti che si occupano di migrare il modello OO di un’applicazione su una struttura relazionale.
Nel caso di Informix c’è un parziale rimedio a questa situazione e vedremo tra poco come un analista OO può avere un ruolo fondamentale nel disegno di un database.
IDS.2000 è un ORDBMS ovvero un Object Relational Database Management System: esso combina le capacita di un Relational DBMS con le caratteristiche avanzate di un Object Oriented DBMS (le caratteristiche note del mondo OO).
A un sistema di tipo RDBMS  è richiesto di gestire tipi di dati semplici (i tipi di dati standardizzati dall’ANSI SQL) e di permettere l’accesso e la loro manipolazione attraverso l’SQL, il linguaggio universale per l’interrogazione dei database.Un sistema di gestione delle risorse di tipo OO è radicalmente diverso: si basa sui principi dell’OO, per cui entrano in gioco i concetti di classe, oggetto, polimorfismo, subclassamento, serializzazione,  persistenza ecc…
Insomma un OODBMS può essere considerato un’applicazione OO che si occupa dell’archiviazione e del recupero di dati.
Il problema fondamentale degli OODBMS sono le prestazioni (e dunque la scalabilità, un requisito chiave dei db di fascia alta) e l’uso eccessivo di risorse (memoria, CPU). Al contrario i database relazionali possono vantare un ventennio di crescita e miglioramenti che li rende insuperabili da questo punto di vista. 
Ecco perché Informix, come altri, ha scelto la via della soluzione intermedia, che garantisca le performance gradualmente raggiunte nel corso degli anni e, d’altro canto, aggiunga ai sistemi tradizionali , per quanto possibile integrandole col modello relazionale, le nuove caratteristiche dell’Object Oriented.

                             

IDS.200 può dirsi Object Oriented per le seguenti caratteristiche:
 

  • Possibilità di definire tipi di dati complessi (UDT : user defined data type) e di routines associate (UDR: user defined routine)che li gestiscono (proprio ciò che si fa quando si definisce una classe in C++ o Java)
  • Possibilità di overriding (e polimorfismo) delle routines (che rende lo stesso codice adattabile a più tipi).
  • Concetto di gerarchia delle tabelle ( una tabella può subclassare un’altra tabella)


Abbiamo visto molto brevemente cos’è IDS.2000 rimarcando il suo carattere di database (parzialmente) OO per poter introdurre e parlare più diffusamente di cos’è stato costruito utilizzando la tecnologia OO : la sua piattaforma middleware ovvero la Internet Foundation.2000.
 
 
 

Informix Internet Foundation 2000
La piattaforma server IIF.2000 introdotta con l’ultima versione del database integra in una intelligente soluzione le più avanzate tecnologie applicative attualmente sul mercato (EJB, JDBC 2.1,  SQLJ0-2,  pluggable JVM, OLEDB, ActiveX/COM+, Office Connect, XML, XSL, e altro), più alcune tecnologie di sviluppo proprietarie come la Virtual Table Interface per la definizione di tabelle virtuali e gateway verso sorgenti di dati esterni,  la Virtual Index Interface per l’indicizzazione di non standard (es. dati geospaziali), Data Source Interface per l’accesso a altri databases, e il DataBlade Development Kit per la creazione dei datablades.
Commercialmente parlando si tratta di una suite che comprende IDS.2000, alcuni datablades ( dei moduli eseguibili che ne estendono le potenzialità introducendo nuovi tipi e nuove routines come per esempio il datablade per la ricerca ipertestuale), J/Foundation per il supporto Java e altri package che aggiungono alla soluzione le tecnologie di cui sopra.
 
 

                                         

Anche solo un cenno su tutti gli aspetti di IIF.2000 richiederebbe molto spazio. 
Quello che è interessante notare a proposito di IIF.2000 è ciò che essa effettivamente rappresenta e tende a diventare : una piattaforma di sviluppo per Internet integrata in un potente server di database.
Come piattaforma di sviluppo per Internet è già ora abbastanza ricca e robusta : abbiamo già visto come essa ingloba le più recenti tecnologie di sviluppo, anche se da questo lato si aspettano nuove aggiunte.
Essa è poi integrata nel database server : e questo è l’aspetto più interessante. 
Per realizzare tale intima integrazione con il database Informix adotta due soluzioni.
Le tecnologie come la JVM, ActiveX/COM+, EJB (che richiede un  EJB container ) che richiedono una parte attiva 
(una parte server cioè) possono contare su un Virtual Processor loro dedicato che si occupa di inizializzare, gestire e fermare il relativo componente server. Per esempio, la JVM nel database è in realtà un Virual Processor che si occupa di caricare un Java Run Time preventivamente installato sul sistema.
Le tecnologie invece come XML, la ricerca ipertestuale ecc…, vengono gestite introducendo per gli oggetti che trattano (file XML, documento PDF, WORD e così via) un tipo di dato ad hoc e le relative routines (le due cose costituiscono un datablade). Per esempio, per rendere il database XML-enabled si aggiunge ad esso un datablade, l’XMLBlade, che definisce il tipo XML nel database più alcune routines per indicizzare, archiviare, recuperare e processare oggetti di questo tipo.
Questa estendibilità è resa possibile dalla tecnologia OO che Informix ha saputo produttivamente integrare nel suo prodotto.
 
 
 

IIF.2000 e Java : “il meglio dei due mondi”
L’integrazione di Java nel database ha portato ad avere, come dice il motto che per un po’ ha circolato negli annunci
della Corporate, il meglio dei due mondi, ovvero del relazionale e dell’Object Oriented.
Rispetto ai concorrenti, Informix ha iniziato tardi a puntare e investire su Java : questo è dovuto più che altro a fattori esterni. Attualmente, soprattutto dopo la strategica acquisizione di Cloudscape, la società che produce l’omonimo e popolare database 100% Java per il mercato del mobile computing, e la partnership con ATG , la software house proprietaria di ATG Dynamo , un tra i più potenti application server esistenti in circolazione,  si è assicurata un ruolo 
di primo piano in quest’area.


Vediamo ora cosa intende Informix con “Java in the Database”.
Per iniziare diciamo che la Internet Foundation.2000 include quasi tutte le tecnologie Java di Informix : occorre quindi acquistare questo bundle e non semplicemente IDS.2000 che comprende solo il motore e gli strumenti di amministrazione.
Ecco un dettaglio come si articola il supporto per Java in Informix:
 

  • Pluggable JVM (1.1 e Java2)
    Informix ha fatto una scelta intelligente rispetto al suo concorrente Oracle : ha deciso che l’utente può scegliersi la Java Virtual Machine e quindi il JDK che vuole utilizzare. Ciò porta a qualche ulteriore complicazione progettuale, ma è sicuramente la strada razionale e più “aperta”. Per utilizzare un certo JDK invece di un altro è sufficiente specificarlo in un file di configurazione e riavviare il server : un Virtual Processor dedicato al caricamento e all’esecuzione della JVM si occupa del caricamento del run time di Java e della sua esecuzione.
  • Informix  JDBC Driver (type 4) v 1.5 (supporta 1.1)
    Si tratta del primo vero punto segnato Informix con Java : creò questo driver (il cui primo rilascio aveva la versione 1.22) in sostituzione di un artificiosa soluzione basata su RMI e chiamata a librerie native fini per superare perfino Oracle, che solo più tardi ha rilasciato il tipo 4  del suo driver (per un approfondimento sul significato della dicitura “type 4” rimando all’articolo [7]). 
  • Informix JDBC Driver (type 4) v2.1 (supporta 1.2)
    Dopo qualche mese dal primo rilascio del driver JDBC per Java 1.1 terminò il programma Beta della versione del driver per l’allora nuova specifica JDBC 2.0 di SUN.  Il versioning del software segue più o meno quello delle specifiche. Quest’ultima versione, la 2.1, supporta infatti non solo tutto JDBC 2.0, ma anche le estensioni successivamente introdotte da SUN (es. il connection pooling)
  • SQLJ Parte 0 (Embedded  SQL in Java)
    Informix è stato tra uno dei protagonisti del consorzio da cui è nato SQLJ (http://www.sqlj.org per tutte le informazioni)  insieme agli altri grandi produttori di database. Il livello 0 dello standard viene supportato essenzialmente attraverso il compilatore sqlj che si trova nel jar package relativo a SQLJ. E’ un tool java, quindi occorre il Sun JDK o una qualsiasi JVM compatibile per utilizzarlo.
  • SQLJ Parte 1 (Java Stored Procedures) (“Krakatoa”)
    La parte 1 dello standard si occupa di definire le modalità di creazione, registrazione ecc.. delle procedure Java nei database. Il nome in codice di questo progetto, per quanto riguarda Informix, era “Krakatoa”, il noto vulcano ad est di Java : benchè sia ormai prodotto fatto e finito il nome ha avuto così successo da diventare definitivo. Per poter utilizzare Krakatoa occorre chiedere all’Amministratore del Database che modifichi il file di configurazione, in modo che il server al riavvio crei un Virtual Processor di tipo JVP che carica la JVM da voi preferita, e i jars relativi a Krakatoa.
    A questo punto il database è pronto a ospitare procedure in Java : è sufficiente di qui in poi seguire la procedura per installare e registrare le proprie routines nel database da Informix indicate nello specifico manuale.
  • SQLJ Parte 2 (Mapping Java classes to SQL types) 
    La terza parte di SQLJ è sicuramente la più interessante, perché tenta finalmente una un’unificazione là dove è già stato prodotto tanto da diverse grandi software house, come ho già accennato in precedenza.
    SQLJ 3  propone delle regole su come unire due aree di confine : quella Object Oriented dell’area applicativa e quello relazionale dei database tradizionali. Tecnicamente il problema è quello di dover determinare il modello relazionale più adatto e performante a un modello dei dati a oggetti definito da un’applicazione OO o viceversa.  Lo strumento che Informix fornisce agli analisti e sviluppatori per affrontare questo problema si chiama “Object Translator” e non è per ora compreso in IIF.2000. L’ Object Translator verra rilasciato anche com plig-in per Rational Rose il noto strumento di analisi della Rational. L’implementazione di SQLJ Part 3 non è compresa in IIF.2000 perché al momento del suo rilascio non era ancora stato definita questa parte dello standard.
  • Java DataBlade Modules (Java DBDK)
    Si tratta della versione per Java del kit per creare i DataBlade. Anche con il linguaggio Java, oltre che in C e C++, è possibile scrivere un DataBlade, ovvero un modulo software che estende le potenzialità del server introducendo un nuovo dato oltre ai built-in e a quelli esistenti e le ruoutines per manipolarlo come dato SQL. Si può anche usare Java DBDK per creare semplici collezioni di procedure in Java logicamente correlate : si ha in tal caso il vantaggio di poter utilizzare il potente wizard per l’autogenerazione del codice.
  • Java Virtual Table Interface (JVTI)
    La Virtual Table Interface è una tecnologia che permette di introdurre in un database Informix una qualsiasi sorgente di dati esterna (es.: un server di news, un file system, una tabella di un altro database non Informix ecc..) come una normale tabella relazionale.
    Per queste tabelle virtuali cambia la semantica delle normali operazioni SQL. Per esempio se la sorgente di dati è un server di news la “CREATE TABLE….” avvierà una connessione al server stesso, l’istruzione “SELECT * FROM news WHERE newsgroup=’comp.database.informix.*’“ mi selezionerà tutte le news relative a Informix ecc…
  • Enterprise JavaBeans (Session & Entity Beans) (“Solano”)
    Informix supporta gli EJBs attraverso un EJB framework nel  server di database. Con gli EJBs nel database si ha lo straordinario vantaggio di poter disporre di un accesso row-level di tipo non SQL ai dati. A questo punto non c’è limite alla fantasia sulle possibilità di EJBs così “vicino ai dati”.
    “Solano” che era il nome in codice del progetto non fa parte di IIF.2000 e sarà essere rilasciato entro qualche settimana, con la nuova versione del server.

 
 

Cloudscape
Cloudscape e’ un database distribuito scritto completamente in Java creato dalla omonima societa che la Informix ha acquisito lo scorso anno. 
Piu’ che un prodotto e’ una suite di prodotti che comprende:
 

  • Cloudscape SQL DBMS
    E’ il componente di base : un DBMS scritto in Java e qualche strumento di amministrazione.
  • CloudSync
    E’ il componente di sincronizzazione : permette di creare sistemi distribuiti di replicazione e sincronizzazione.
  • CloudConnector
    Un application server sottoinsieme di WebLogic che permette di creare una soluzione completa per l’eBusinness, dall’archiviazione dei dati alla loro replicazione, sincronizzazione  e pubblicazione sul Web

 

 

 
Cloudscape e’ molto apprezzato nel mondo Java : basti pensare che la SUN stessa lo distribuisce in evaluation con la sua implementazione della J2EE (quindi tutti gli sviluppatori che hanno scaricato J2EE stanno utilizzando questo database) e da BEA Systems che lo distribuisce sempre in evaluation con WebLogic.
 
 

Abbiamo concluso la nostra panoramica introduttiva su Java e Informix.
Come si vede Informix ha puntato molto su Java e in generale sulle tecnologie Web emergenti come ad esempio XML perche’ sono tecnologie enterprise : proprio l’ambito in cui si muove qualsiasi DB vendor per creare quella che chiama la propria “way to web”.
 
 

Riferimenti e Bibliografia

Ecco alcuni indirizzi utili per gli argomenti trattati:

[1] http://www.informix.com : il sito ufficiale di Informix ( quello italiano sarà presto attivato).
[2] http://www.informix.com/idn : l’area degli sviluppatori : occorre registrarsi (gratuitamente) on line.
[3] http://examples.informix.com : esempi di soluzioni applicative complete di codice e commenti.
[4] http://www.sqlj.org : per lo standard SQLJ
[5] http://www.cloudscape.com : il sito di Cloudscape Inc.
[7] "JDBC - La teoria" e successivi www,mokabyte.it/1997/06/jdbc.htm

Per quanto riguarda i libri ecco i testi che posso consigliare:

“Dynamic Web Programming” - di G. Harrison  - Informix Press
Contiene esempi di progetti in Java, e JavaScript
 
 

Ovviamente i manuali di riferimento del prodotto per tutti i possibili dettagli tecnici, in particolare:

“ Informix Guide to SQL : Syntax”
“ Informix Guide to SQL : Tutorial”
“Creating UDRs in Java”
“Informix JDBC Driver : Programmers Guide”
“Virtual Table Interface”
“Virtual Index Interface”
“Informix DataBlade API Programmers Manual”
 

Chi volesse mettersi in contatto con la redazione può farlo scrivendo a mokainfo@mokabyte.it