Cache'

InterSystems Cache' e' DBMS ad oggetti che presenta diverse interessanti caratteristiche. Oltre a disporre di un'interfaccia SQL completa e molto efficiente, offre un ambiente RAD per lo sviluppo delle applicazioni. Le principali funzionalita' della versione 5.0 sono:

Maggiori dettagli si possono trovare sul sito ufficiale Cache', ovviamente in inglese, oppure... continuate a leggere!
Caché e' disponibile su Unix, Linux, Windows, ... nel seguito del documento utilizzeremo quest'ultimo SO (Sigh ;), ma vi e' un paragrafo su Linux :-))

Utilizzo

L'utilizzo di Cache' e' semplice!
Una volta effettuata l'installazione appare un simpatico cubo nella barra dei comandi che indica che Cache' e' installato ed attivo. L'ambiente Cache' comprende, oltre al motore del DB ad oggetti, un Web Server (di default utilizza la porta 1972) ed un Application Server. E' quindi possibile iniziare immediatamente a disegnare gli oggetti, sviluppare le applicazioni ed effettuarne il deploy.
Selezionando l'opzione corrispondente dall'icona Cache' e' possibile attivare l'ambiente Studio con cui si effettua sia la definizione degli oggetti che la programmazione delle applicazioni.


Studio e' l'ambiente RAD di Cache e consente di disegnare le classi di oggetti e effettuare la programmazione. Cache' implementa gli oggetti secondo il modello ODBMG (Object DataBase Management Group) che prevede incapsulamento, polimorfismo ed ereditarieta' (anche multipla). La creazione di oggetti e' molto semplificata dai wizard. Creando un nuovo oggetto e' possibile scegliere tra:

La defininzione di una classe puo' essere di tipo:

Ma vediamo ora qualche esempio (una "tabella", una pagina CSP, un servizio SOAP)...

Creare una "tabella"
La creazione di un oggetto persistente, memorizzato sulla base dati multidimensionale, corrisponde anche ad una tabella visibile dall'SQL e puo' essere creata con il wizard.

Gli oggetti Cache' prendono il nome di Global ed hanno tutte le caratteristiche tipiche degli ambienti object orientend: classi, medotodi, ereditarieta', polimorfismo, ... L'oggetto cosi' creato e' immediatamente disponibile anche come tabella ed interrogabile in SQL dall'SQL Manager o via ODBC e JDBC.

L'interfaccia SQL e' conforme allo standard ANSI per la maggior parte delle caratteristiche. Vengono quindi utilizzati i normali statement SQL SELECT INSERT UPDATE DELETE ed e' anche possibile utilizzare gli statement di DDL.
Vi sono alcune caratteristiche importanti specifiche di Cache': la valutazione delle espressioni (il * non ha precedenza sul +), la definizione delle trasazioni (eg. START TRANSACTION con diverse modalita' per indicare l'isolation level), il lock escalation (per default superati i 1.000 row lock si acquisisce un table-level lock), ...

Una tabella e' comunque di un oggetto e la descrizione delle colonne presenti lo rende evidente. Infatti sono presenti i legami all'oggetto global che e' la sorgente dell'informazione.

Creare una pagina CSP

Vediamo come creare da Studio una pagina CSP ovvero una pagina dinamica visibile su Internet...
Creato un oggetto di tipo Cache' Server Page e' sufficiente attivare il wizard con Inserisci Form Wizard. Il wizard richiede l'oggetto di base da cui partire, le proprieta' (o colonne con un termine relazionale), ...

Quindi compone una pagina CSP contenente l'HTML ed il codice necessari per l'esecuzione. A questo punto e' possibile personalizzare la grafica ed i testi a piacere. Quale editor si puo' utilizzare Studio o, ma va acquistato separatamente, Dreamweaver.

Una volta compilata la pagina sara' immediatamente disponibile su http://127.0.0.1:1972/csp/samples/emp.csp e consentira' di cercare/inserire/modificare i dati sull'oggetto prescelto.

Creare un'applicazione SOAP

Da Studio e' possibile creare, con la stessa logica e facilita', oggetti e classi anche complessi. Un editor ed un help di contesto molto efficaci rendono semplice la scrittura di codice e lo scoprire nuove funzionalita' dell'ambiente.
La figura seguente riporta un esempio di un Server SOAP. Il SOAP (Simple Object Access Protocol) e' un protocollo tra applicazioni basato sull'HTTP (HyperText Transfer Protocol). Le applicazioni utilizzano l'XML (eXtented Markup Language) per inviare richieste e risposte fornendo cosi' una serie di Servizi Web in un'architettura SOA (Service Oriented Achitecture).
Sempre con l'utilizzo di wizard la creazione di un servizio SOAP risulta semplice con Cache'. Il linguaggio utilizzato e' Cache' ObjectScript ma e' anche possibile utilizzare il BASIC o Java nella definizione dei metodi. Una curiosita': la concatenazione e' l'operatore "_".

Programmazione

Il tipo di programmazione piu' utilizzato e' la creazione di Cache' Server Pages (CSP) che sfruttano in modo completo l'ambiente e possono essere realizzate in tempi molto brevi, come abbiamo visto negli esempi di utilizzo. Ma sono disponibili altre modalita' di programmazione.
E' possibile utilizzare gli oggetti di Cache' come classi Java o EJB, .NET, ... E' possibile utilizzare Cache' come base dati programmando in qualsiasi linguaggio supporti l'ODBC o il JDBC, ...

Per utilizzare Cache' con il JDBC e' necessario definire nella variabile CLASSPATH il jar contenente il JDBC driver di Cache'. Il driver e' di tipo 4 (quindi e' un thin driver) e si trova in C:\CacheSys\Dev\Java\Lib\CacheDB.jar. Nell'esempio seguente, realizzato in Jython, viene utilizzato il JDBC Driver di Cache' con un semplice statement SQL.


from java.sql import DriverManager
from com.intersys.jdbc import CacheDriver

DriverManager.registerDriver(CacheDriver())

def getConnection():
    return DriverManager.getConnection(
	"jdbc:Cache://127.0.0.1:1972/SAMPLES", "_SYSTEM", "SYS")

connection = getConnection()
statement = connection.createStatement()

statement.execute("INSERT INTO emp(empno,deptno,ename) VALUES (17,10,'SMITH')")

Amministrazione

L'amministrazione di Cache' su Windows e' molto semplice. L'installazione gia' definisce Cache' come servizio e lo attiva al boot. Per effettuare lo shutdown o il restart del motore e' sufficiente selezionare la relativa opzione dalla simpatica icona a cubo di Cache'.
Il configuration Manager consente di gestire tutti i parametri e la configurazione di Cache'.

Piu' complessa e' l'amministrazione quando Cache' viene utilizzato su architetture distribuite (eg. un web server esterno, piu' application server, un DB server, ...). Ma anche in queso caso i concetti di base restano gli stessi.

Architettura

Cache' utilizza una "normale" architettura web a tre livelli. Cache' si caratterizza per un utilizzo esteso di cache (sia sulla base dati che sugli application server) che mimimizzano il traffico nel caso di pagine, dati ed oggetti gia' richiamati.

Configurazioni particolari

Cache' puo' essere utilizzato in configurazioni complesse. La configurazione piu' semplice e' quella che utilizza tutti i componenti su un unico sistema ma sono molte le architetture che Cache' supporta.

E' possibile utilizzare come web server un web server di terze parti (eg. IIS, Apache). In questo caso Cache' svolge il compito di Application Server e di DB server.
E' possibile utilizzare sistemi differenti tra DB Server ed Application Server e gli Application Server possono essere piu' di uno.
Gli oggetti mantenuti sul DB possono essere locali oppure remoti, ospitati su altri DB Cache' o su altri RDBMS raggiunti mediante l'SQL Gateway.

Note su Linux

Quanto riportato fino ad ora vale sostanzialmente anche per un'installazione su un server Unix. Ma si puo' riportare qualche elemento in piu' specifico di su questo sistema operativo...

Cache' utilizza una serie di processi Unix:
ProcessoParametri
Control-s . -c c -C /usr/cache/cache.cpf*CACHE -B
Write DaemonWD
Garbage CollectorGC
Journal DaemonJD
Slave WDSWDX
EXP DaemonDBXD
CLN DaemonSTART^CLNDMN
ListenerServerMaster^%CMTP
Task ManagerStart^TASKMGR
CSP DaemonBegin^%ooCSP.Daemon.1
Server ProcessSuperServer^%cmtP
Il processo CONTROL e' il padre di tutti i processi di Cache'. Il processo Listener e' in ascolto sulla porta 1972 (per default) il quale indirizza le richieste a secondo del tipo. Ad ogni connessione DB da un client viene attivato un Server Process mentre le richieste web vengono soddisfatte dai processi Slave.
Gli altri processi hanno compiti specifici (eg. DB writer...)

Ovviamente e' possibile monitorare il comportamento di Cache' con i normali comandi Unix:

[root@cacheserver root]# netstat -an | grep LISTEN
tcp        0      0 0.0.0.0:1972                0.0.0.0:*                   LISTEN

[root@cacheserver root]# ps -efa | grep cache
root      2360     1  0 Nov20 ?        00:00:06 cache -s . -c c -C /usr/cache/cache.cpf*CACHE -B
root      2379  2360  0 Nov20 ?        00:00:04 cache WD
root      2380  2360  0 Nov20 ?        00:00:00 cache GC
root      2381  2360  0 Nov20 ?        00:00:04 cache JD
root      2382  2360  0 Nov20 ?        00:00:03 cache SWD1
root      2383  2360  0 Nov20 ?        00:00:00 cache SWD2
root      2384  2360  0 Nov20 ?        00:00:00 cache SWD4
root      2385  2360  0 Nov20 ?        00:00:00 cache SWD5
root      2386  2360  0 Nov20 ?        00:00:00 cache SWD7
root      2387  2360  0 Nov20 ?        00:00:00 cache SWD6
root      2388  2360  0 Nov20 ?        00:00:00 cache SWD3
root      2389  2360  0 Nov20 ?        00:00:00 cache DBXD
root      2398  2360  0 Nov20 ?        00:00:00 cache START^CLNDMN
root      2401  2360  0 Nov20 ?        00:00:01 cache ServerMaster^%CMTP
root      2404  2360  0 Nov20 ?        00:00:21 cache Start^TASKMGR
root      2406  2360  0 Nov20 ?        00:00:00 cache Begin^%ooCSP.Daemon.1
root      9215  2360  0 11:18 ?        00:00:01 cache SuperServer^%cmtP
root     11854  2360  2 11:34 ?        00:00:07 cache SuperServer^%cmtP
root     11855  2360  2 11:34 ?        00:00:06 cache SuperServer^%cmtP
root     11869  2360  0 11:36 ?        00:00:00 cache SuperServer^%cmtP
...

[root@cacheserver root]# lsof -p 2379
COMMAND  PID USER   FD   TYPE DEVICE     SIZE   NODE NAME
cache   2379 root    4u   REG    8,2  2306048 401654 /usr/cache/mgr/CACHE.WIJ
cache   2379 root    5u   REG    8,2 48234496 321948 /usr/cache/mgr/cachelib/CACHE.DAT
cache   2379 root    6u   REG    8,2  8388608 401628 /usr/cache/mgr/CACHE.DAT

[root@cacheserver root]# lsof -p 2401
COMMAND  PID USER   FD   TYPE DEVICE     SIZE   NODE NAME
cache   2401 root    4r   REG    8,2 48234496 321948 /usr/cache/mgr/cachelib/CACHE.DAT
cache   2401 root    5u  IPv4   7497             TCP *:1972 (LISTEN)

[root@cacheserver root]# ipcs -a
...

Installazione

Su Windows NT4/2000/XP/Server 2003 l'installazione avviene scaricando dal sito Cache' l'eseguibile e quindi lanciando il setup.

Su Linux l'installazione piu' comunemente utilizzata e' quella via RPM. E' sufficiente scaricare gli RPM corretti dal sito Cache' e lanciare l'installazione. L'installazione crea una directory /usr/cache con il SW ed il contenuto della base dati.
In una configurazione tipica sono necessari:
RPMDescrizione
cache-5.0.18-1.i386.rpmIl motore della base dati: Cache'

Naturalmente il nome puo' cambiare a seconda della versione e della piattaforma (Intel 32bit o Itanium 64bit). Scaricato il software, per effettuare l'installazione dare il comando:
# rpm -ila cache-5.0.18-1.i386.rpm
Per controllare i pacchetti installati: rpm -qa | grep -i cache. Infine, per rimuove i pacchetti il comando e' rpm -e cache-5.0.18-1.i386.rpm
Va poi scaricata ed installata su un sistema Windows l'interfaccia grafica per il client. Infatti su server Linux girano "solo" Web Server, Application Server e DB Server mentre gli altri tool, come Studio, sono disponibili solo su Windows.

In entrambe i casi l'installazione e' molto semplice e configura un ambiente completo e funzionante che e' possibile utilizzare sia per lo sviluppo che per il deploy di applicazioni.


Testo: Cache'
Data: 31 Settembre 2005
Versione: 1.0.3 - 1 Novembre 2005
Autore: mail@meo.bogliolo.name