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 :-))
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:
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.
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), ...
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.
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 "_".
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')")
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.
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.
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.
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:
Processo | Parametri |
Control | -s . -c c -C /usr/cache/cache.cpf*CACHE -B |
Write Daemon | WD |
Garbage Collector | GC |
Journal Daemon | JD |
Slave WD | SWDX |
EXP Daemon | DBXD |
CLN Daemon | START^CLNDMN |
Listener | ServerMaster^%CMTP |
Task Manager | Start^TASKMGR |
CSP Daemon | Begin^%ooCSP.Daemon.1 |
Server Process | SuperServer^%cmtP |
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 ...
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:
RPM | Descrizione |
cache-5.0.18-1.i386.rpm | Il motore della base dati: Cache' |
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