MokaByte 79 - 9mbre 2003 
Application Server
Uno strumento di importanza strategica
di
Luca Vetti Tagliati
Lo sviluppo di sistemi basati su architetture J2EE impone di prendere diverse decisioni, tra cui una molto critica, consiste nel selezionare l'Application Server utilizzare

Introduzione
Obiettivo del presente articolo è evidenziare quanto critica sia per le aziende, specie di medio-grandi dimensioni, la decisione relativa all'Application Server (AS d'ora in avanti) da utilizzare per lo sviluppo e messa in esercizio di sistemi basati sull'architettura J2EE. Si tratta di una decisione troppo spesso data per scontata o sottovalutata che invece presenta notevoli ripercussioni sulle politiche aziendali. In Internet è possibile reperire diversi articoli che affrontano il problema della scelta degli AS; quasi tutti però si limitano ad esaminare l'argomento dal punto di vista delle caratteristiche tecniche offerte (gestione delle transazioni, scalabilità, sicurezza, ecc.). Con il presente articolo, intendiamo invece affrontare la problematica spostando l'attenzione su considerazioni a maggiore carattere manageriale. Con questo non si vuole assolutamente contestare l'importanza delle caratteristiche tecniche, però si è anche convinti che attualmente considerazioni di diversa natura siano prioritarie. Tale convinzione è rafforzata da diverse osservazioni. In primo luogo la tecnologia degli AS sta raggiungendo grado di maturità sempre più elevato che finisce per sminuire il dislivello dei servizi base offerti dai vari AS; quindi spesso non è molto saggio basare la scelta su caratteristiche tecniche ben supportate dalla quasi totalità degli AS disponibili. Altra importante osservazione è che, da una scrupolosa analisi, è possibile evidenziare come la selezione dell'AS preveda tutta una serie di ripercussioni sulla politica di medio/lungo termine delle imprese (gestione personale, relazioni con i vendor, manutenzione dei sistemi, ecc) alle quali è opportuno conferire la giusta considerazione.
Nel presente articolo è particolarmente enfatizzato il punto di vista di organizzazioni medio/grandi, in cui l'infrastruttura informatica costituisce una risorsa imprescindibile. Un esempio? Le banche londinesi in cui i progetti hanno un budget tipo di milioni di sterline al mese (!), i progetti si protaggono per qualche anno e il personale impiegato si aggira sulle centinaia di unità.

 

Selezionare l'AS il prima possibile
I sistemi informatici moderni tendono a diventare sempre più estesi e costosi. Prima di avviarne la progettazione ed il conseguente sviluppo è necessario stabilire alcuni punti fermi di notevole importanza su cui basare l'intero sviluppo. Per esempio è necessario stabilire il processo da utilizzare, la tecnologia e l'architettura da adottare, la piattaforma su cui mettere in produzione il sistema, i prodotti da utilizzare, e così via. Supponendo di aver concluso di utilizzare l'architettura J2EE (a nostro parere è la migliore attualmente disponibile sul mercato), una decisione molto importante è relativa a quale Application Server (AS) utilizzare per sviluppare e mettere in produzione il sistema finale.
(inizio nota) In aziende o sistemi di medio/piccole dimensioni, è possibile ipotizzare di sviluppare sistemi J2EE utilizzando un particolare AS per poi metterlo in esercizio su uno diverso, oppure svilupparlo e verificarlo su diversi AS. Sebbene ciò possa portare diversi benefici, come per esempio una maggiore speranza di completa portabilità, non è infrequente il caso in cui si tratta di una strategia semplicemente non fattibile. Ciò per motivi essenzialmente legati all'aumento dei tempi di sviluppo e test, alla difficoltà di mantenere in esercizio diversi ambienti e configurazioni, etc. Spesso poi non è possibile o conveniente rifiutare a priori i servizi aggiuntivi forniti da particolari AS. I progetti reali insegnano che un giusto grado di pragmatismo è fondamentale. Si tenga in mente che non è infrequente il caso in cui i sistemi siano sviluppati per funzionare nei tempi e costi previsti, e non per essere esempi di "pure J2EE". Ovviamente ciò non significa neanche che non bisogna disegnare pensando alla portabilità o che ciò sia impossibile. (Fine nota)
In teoria i sistemi sviluppati in architettura J2EE dovrebbero essere portabili e pertanto dovrebbero poter funzionare su qualsiasi AS compatibile con la versione delle specifiche J2EE globali (EJB, Sevlet, etc.) prese di riferimento. Ciò potrebbe portare a pensare (erroneamente) che la selezione dell'AS non dovrebbe essere poi così cruciale. Nella pratica ahimè, la situazione è ben diversa. Per svariati motivi, come per esempio l'utilizzo di caratteristiche peculiari di un determinato AS, e non ultimo la non sempre chiara conoscenza delle specifiche ufficiali J2EE da parte di alcuni tecnici (non vi è mai capitato di osservare tecnici intenti a generare thread all'interno dei container?), fanno sì che la tanto agognata portabilità non sia poi così scontata. Questi problemi, più altre considerazioni commerciali/strategiche, determinano la necessità di selezionare l'AS già durante le prime fasi del processo di sviluppo del software. Tale "rapida" selezione è utile non solo per incorporare nel processo stesso adeguamenti richiesti dall'AS (ebbene sì, alcuni strumenti influenzano il processo: basti pensare alle attività di gestione dello stesso AS o a eventuali servizi aggiuntivi offerti dallo specifico AS come per esempio servizi di integrazione), ma anche per stabilire un migliore rapporto con il vendor, nel caso in cui si decida di non ricorrere ad un prodotto open source. Inoltre, attendere troppo per prendere tale decisione rappresenta uno spreco di tempo ed una mancata occasione per gli sviluppatori di aumentare la propria conoscenza del prodotto. Si tratta di investigazioni particolarmente importanti, specie considerando che molti progetti, come quelli particolarmente critici/rischiosi, sono preceduti dalla realizzazione di sistemi pilota (i cosiddetti "proof of concepts"), atti a provare la fattibilità tecnico-architetturale del progetto stesso. Altro argomento non trascurabile è relativo al fatto che le licenze di utilizzo degli AS, tipicamente, includono pacchetti di ore di supporto e/o consulenza. Queste, spesso, si rivelano particolarmente utili proprio nelle fasi iniziali, quando è necessario impostare l'ambiente, approfondire la conoscenza delle problematiche del deployment, eventuale clustering, prendere decisioni cruciali (utilizzare o meno gli entity beans o integrare un O/R tier, ricorrere o meno a session stateful beans, ecc.)..

 

L'AS è uno strumento strategico per l'azienda
La selezione dell'AS da utilizzare costituisce una decisione strategica per l'azienda. Acquisire skill specifico, formare il personale, non solo per lo sviluppo e messa in esericizio, ma anche per la successiva manutenzione, richiede molto tempo e denaro. È abbastanza logico che, una volta selezionato un determinato AS, questo tenda a divenire una sorta di standard interno dell'organizzazione (almeno per gli ambienti di produzione). Ben poche aziende gradirebbero dover mantenere operativi diversi AS, disporre di molto hardware ridondante non motivato, dover ogni volta formare il proprio personale per utilizzare nuove tecnologie o peggio ancora, dover disporre di personale con mansioni simili, esuberante, specializzato per i diversi AS. Ciò è particolarmente vero per sistemi di grandi dimensioni, dove anche una minima variazione della configurazione richiede l'esecuzioni di una serie lunghissima di test, spesso non tutti automatizzati. (Nota) Da notare che, sebbene test dello strato di service business siano facilmente automatizzabili (tipicamente sono un'estensione dei test di sistema), lo stesso non si può dire per test che riguardano la GUI. Sul mercato sono disponibili diversi tool per supportare tali attività, i quali però ahimè sono fortemente legati alla struttura dell'interfaccia utente (ogni minima variazione ne prevede l'aggiornamento) e richiedono moltissimo tempo per essere sviluppati e verificati a loro volta. (Fine nota)
Altra considerazione è relativa al fatto che tecnici preparati tendono a non reinventare la ruota ad ogni progetto, e quindi, prima e durante la costruzione dei vari sistemi, preferiscono, saggiamente, investire del tempo disegnando ed implementando framework riutilizzabili, strumenti di supporto allo sviluppo e test, che spesso, inevitabilmente, risultano fortemente legati alle caratteristiche dello specifico AS.
Per finire, lo sviluppo di qualsivoglia sistema richiede di investire un considevervole lasso di tempo per mantenere i vari script e per aggirare gli inevitabili bug dei singoli AS, tale da rendere semplicemente non proponibile l'idea di dover moltiplicare questi tempi per diversi AS... E poi si trova sempre la libreria X o il driver Y che non funziona bene con la versione Z1 dell'AS S3.

 

AS predefinito
Nei casi in cui ci si dovesse trovare in un'azienda in cui esistano già sistemi funzionanti su un determinato AS, oppure questo sia già stato stabilito da policy interne all'azienda stessa o da particolari accordi commerciali, è opportuno attenersi a tali direttive evitando quanto più possibile di introdurne uno diverso. Ciò è vero a meno che l'AS di riferimento evidenzi problemi così gravi da giustificare i rischi ed i costi della relativa sostituzione. È appena il caso di sottolineare che la decisione di sostituire un AS richiede notevoli investimenti e presenta rischi spesso elevati: è necessario eseguire un nuovo processo di tuning e test di tutte le applicazioni esistenti, con eventuali necessità di eseguire opportuni processi di manutenzione.
A tal proposito, ho avuto modo di assistere ad una decisione abbastanza autolesionista. Dopo aver sviluppato e messo in esercizio un sistema di medio/grandi dimensioni basato su uno specifico AS, il management decise di cambiare fornitore. Si trattava di una decisione basata esclusivamente su considerazioni economiche (leggasi migliore offerta ricevuta da un altro fornitore). Purtoppo i semplicistici conti sulla carta, non riflettevano la situazione reale. Se da un lato era vero che il costo di esercizio del nuovo AS permetteva di risparmiare moltissimo, dall'altro, ahimé, tale scelta implicava elevatissimi costi che finivano per annullare il risparmio per almeno una decina di anni. Cambiare l'AS significò: nuova iterazione del processo di sviluppo del sistema resasi necessaria per adattare il codice al nuovo AS, nuovo processo di test, ennesimi studi di tuning, clustering, formazione dell'intero personale, specie quello demandato al supporto, revisioni di tutti i tool e gli script, ecc.

 

Politica di adeguamento alle nuove specifiche
Ormai dovrebbe essere sufficiente chiaro quanto importante e critico sia selezionare un AS di riferimento. Gli effetti di tale scelta tendono a ripercuotersi nel tempo: i futuri sistemi, gioco forza, continueranno a utilizzare lo stesso AS.
Una prima necessità è quindi conoscere sia la versione delle specifiche ufficiali (Java, J2EE, Servlet, etc.) a cui i vari AS sono allineati, sia condividere la politica adottata dal fornitore rispetto alle evoluzioni delle specifiche stesse. Esistono alcuni vendor che adottano strategie particolarmente sollecite, impegnandosi a fornire nuove versioni del proprio AS ad ogni aggiornamento delle specifiche ufficiali (questa per esempio è la strategia utilizzata da Bea con WebLogic), mentre altri preferiscono utilizzare un atteggiamento più protettivo, attendendo che le specifiche acquisiscano un certo grado di stabilità prima di incorporarle (questa è la strategia di IBM per quanto attiene a WebSphere). Quale strategia è migliore? Ebbene, la risposta dipende dai propri requisiti, dalla dimensione dell'azienda, dalla relativa natura, ecc. Per esempio, è abbastanza naturale attendersi che aziende votate al "cutting-edge" tendano a preferire strategie più aggressive, mentre altre, magari gravate dall'onere di dover supportare diversi sistemi funzionanti, dovrebbero naturalmente preferire strategie più conservative. Il problema di fondo è che tutti i prodotti e tecnologie prima di acquisire una certa stabilità necessitano di una certa tranisizione, più o meno estesa, che può gravare sulla manutenzione/realizzazione dei sistemi e, logicamente, tutte le aziende desiderano limitare i costi dovuti a periodi di minore stabilità dei prodotti adottati. Chiaramente nulla vieta di continuare ad adottare una specifica versione di un prodotto anche in occasione del rilascio di una nuova versione. Questa strategia potrebbe però presentare degli svantaggi legati alla correzione di difetti presentati da una versione non più supportata di uno specifico AS.

 

L'importanza del fattore budget
Nei casi in cui sia necessario dover operare una scelta è molto opportuno, come da buona tradizione ingengeristica, stabilire i requisiti. Attualmente sul mercato sono disponibili svariati application server. Si può scegliere diversi gratuiti o quasi, quali per esempio Jboss, altri a costi molto accessibili come l'AS della Oracle, ad altri ancora a costi piuttosto elevati, quali Bea WebLogic, IBM Websphere, e così via. Molte organizzazioni concentrano la decisione su quale adottare, basandosi esclusivamente sul fattore economico. Chiaramente si tratta di un elemento molto importante, ma limitare la selezione al solo costo delle licenze sarebbe piuttosto semplicistico. Non è infrequente il caso in cui si tratti di un costo trascurabile rispetto ad altri elementi quali, per esempio, il costo di messa in esercizio, l'acquisto delle attrezzature hardware, lo stesso sviluppo, ecc. Inoltre, è opportuno tenere presente che molti fornitori non si limitano a vendere le licenze d'uso dell'AS, bensì offrono una serie di servizi (training, supporto, consulenze specifiche, ecc.) che, a lungo termine, possono risultare strategici.
Il fattore budget può anche prevedere risvolti paradossali. In una grande azienda londinese, fui coinvolto nelle discussioni volte a stabilire quale AS utilizzare. Dopo una lunga serie di dibattiti, nel meeting finale, sperimentai una situazione abbastanza bizzarra. Un collega influente continuava a "battersi a spada tratta" per l'adozione dell'AS più costoso... Spazientiti dall'atteggiamento si decise di investigare le motivazione di tale forte propensione per uno specifico AS. Dopo alcune argomentazioni piuttosto discutibili, quella finale fu: "Se costa molto più degli altri, evidentemente, significa che vale molto di più degli altri". Forse anche in questa frase c'é un fondo di verità.
A parte strani comportamenti, chiaramente il budget a disposizione è un importante criterio di selezione, ma non va limitato al solo fattore licenza, bensì va analizzato nel complesso dei servizi offerti.

 

Supporto
Una volta selezionato un AS, questo tenderà ad essere riutilizzato per lo sviluppo dei sistemi futuri: volenti o nolenti, si finisce per instaurare uno stretto legame con il vendor. Una situazione diversa si genera in tutti quei casi si decida di ricorrere a sistemi Open Source (OS d'ora in avanti). Quantunque alcuni manager e tecnici, non sempre preparati, nutrano ingiustificate reticenze a soluzioni di questo tipo, la verità dei fatti ha mostrato che si tratta invece di sistemi affidabili con elevato grado di supporto. Attualmente sono disponibili tantissimi sistemi open source il cui successo non ha bisogno di commenti (Red Hat, Tomcat, Jboss, Ant, Log4j, Struts, etc.). Una considerazione interessante è che sviluppatori di sistemi OS sono "nascosti" in tutti gli angoli della terra e pertanto tendono ad essere disponibili per il supporto a qualsiasi orario e in qualsiasi giorno dell'anno. Questi tecnici (salvo rarissime eccezioni) sono molto orgogliosi del prodotto e del loro codice e quindi sono sempre più che solerti nel risolvere i vari problemi. Inoltre i prodotti OS, tipicamente, dispongono di molti gruppi di mailing list gratuite in cui potersi iscrivere per discutere eventuali problemi e per studiare sulla base dei problemi incontrati da altri tecnici. Infine, nella nefasta situazione in cui un problema non sia già stato risolto e che nessuno lo voglia o sia in grado di affrontarlo, è sempre possibile rimboccarsi le maniche e, a colpi di debugger, tentare si risolverlo autonomamente (ricordandosi poi di rendere la correzione disponibile alla comunità).
Chiaramente ogni medaglia ha il lato negativo. Per quanto concerne il supporto esistono diversi svantaggi legati ai sistemi OS. Il primo è quello che pesa di più ad alcuni manager: qualora sia presente un serio problema o qualora si seguano consigli azzardati forniti da un zelante programmatore non preparatissimo, che invece di risolvere il problema ne generi un aggravio, non è possibile scaricare la responsabilità su nessun'altra organizzazione. Le tanto amate frasi: "è colpa dell'AS perché non fornisce il servizio X come dovrebbe", oppure: "è colpa del consulente Z che non ha fornito chiare direttive", non sono ahimè utilizzabili (o magari lo sono, però manca comunque il capro espiatorio). L'esperienza però insegna che la stessa situazione può occorrere anche con prodotti proprietari.
Durante lo sviluppo di un sistema molto complesso ci imbattemmo in un strano e alquanto antipatico problema. In particolare, in singolari circostanze il sistema diventava inutilizzabile poiché il database, inaspettatamente, transitava in uno stato di locking. Sottoponendo l'inconveniente sia al fornitore dell'AS, sia a quello del database, assistemmo ad un antipatico gioco dello scaricabarile tra i due fornitori con imbarazzanti ripercussioni sui tempi ed i costi dell'intero progetto. Questo increscioso "ping-pong" si protrasse piuttosto a lungo. Il fornitore dall'AS puntava il dito sui driver del database. Il fornitore di quest'ultimo, a sua volta, spostava tutta la colpa sull'AS. Il problema era piuttosto noioso perché cambiare temporaneamente AS e/o database non era assolutamente immediato per via delle dimensioni del sistema stesso. Alla fine, esasperati dalla situazione, decidemmo di realizzare, con non poca fatica, un componente riproducente il problema e di effettuarne il deployment su un altro AS. Risultato: il problema si riproponeva, era effettivamente colpa di un bug nel driver del database. Considerazioni: il tanto osannato supporto dei vendor fu piuttosto carente. Chiaramente si tratta di uno scenario isolato e si è sicuri che il supporto dei vendor sia invece risultato strategico in molti altri progetti.
Un altro aspetto che tende a scoraggiare taluni manager, specie se appartenenti a grandi organizzazioni, nella selezione di prodotti OS è legato alla relativa intrinseca democraticità: la priorità assegnata ai problemi sottomessi agli sviluppatori di OS, tipicamente, non è in funzione della dimensione dell'azienda che lo sottopone. Questa politica, molto utile per le aziende medio/piccole, è meno apprezzata da quelle di maggiori dimensioni abituate ad un trattamento VIP da parte di vendor proprietari.
Sempre in merito al fattore supporto, è opportuno considerare anche la speranza di vita del fornitore. Sebbene questo problema non si ponga per i principali vendor, e meno che mai per i prodotti OS di successo, gli ultimi tempi hanno fornito importanti insegnamenti. In particolare, molte software house sono state costrette a chiudere i battenti, altre a riconsiderare i propri budget e altre ancora sono state assorbite da aziende più grandi. Molto spesso questi avvenimenti hanno generato l'abbandono del supporto di alcuni prodotti offerti, ritenuti non più strategici o profittevoli (Un esempio? HP). Pertanto, qualora si decida di selezionare un AS fornito da un vendor, specie di medie/piccole dimensioni, è necessario considerare quali problemi potrebbero occorrere qualora l'AS non sia più supportato. Questa considerazione dovrebbe far propendere per non disegnare applicazioni eccessivamente basate sulle peculiari capacità dei singoli AS. A questo punto ci si potrebbe interrogare sul perché ricorrere a fornitori di medio-piccole dimensioni? Semplice, perché queste aziende tendono a: offrire servizi di maggiori qualità, risultare più dinamiche e presentare un'elevata sollecitudine nell'assecondare i desideri e i bisogni dei propri clienti, offrire proposte economicamente più vantaggiose.

 

Affidabilità dell'AS
Un fattore di importanza fondamentale nella selezione dell'AS è relativo all'affidabilità dello stesso. Bug o malfunzionamenti degli AS possono generare seri problemi non sempre aggirabili. Non è infrequente che anche la stessa individuazione di malfunzionamenti tenda a consumare un elevato lasso di tempo. Per questo motivo è opportuno assicurarsi che l'AS presenti un elevato grado di affidabilità e che eventuali problemi tendano ad essere risolti rapidamente. Ora come fare ad informarsi circa l'affidabilità dell'AS? Chiaramente interrogare l'oste circa la qualità del proprio vino potrebbe non essere la strategia più scaltra. Il metro migliore è chiaramente l'esperienza diretta ed il parere di personale veramente qualificato (anche se spesso non tutti i consulenti sono indenni da, usando un eufemismo, sollecitazioni commerciali). Altre indicazioni possono provenire dalla consultazione dei newsgroup e mailing list: tutti gli AS ne dispongono diverse. Nel caso in cui si incappi in newsgroup e mailing list con poca attività è possibile trarre due deduzioni: le particolari fonti scelte non sono attendibili; oppure tutti gli utilizzatori dell'AS si sono dedicati al harakiri per via della relativa scarsa qualità. L'esperienza insegna ad abbandonare a priori l'illusione che esista un AS perfetto. Nel caso generale, queste fonti offrono una serie di importanti vantaggi: sono quasi sempre accessibili gratuitamente, forniscono una buona idea dell'AS dalla prospettiva degli utilizzatori, e, cosa importante, rarissimamente sono moderati dal personale appartenente al vendor. Dalla lettura delle varie richieste è possibile risalire a molte utili informazioni; è possibile: intuire quale sia il livello di affidabilità, o se si preferisce, la tendenza ai malfunzionamenti dell'AS; comprendere se gli utenti discutono circa problemi rarissimi e di effimera importanza o di cose più fondamentali (il che dovrebbe incutere un certo terrore); crearsi un'idea circa il tempo medio di risposta ai vari interrogativi e di risoluzione dei guasti; capire il livello qualitativo del supporto fornito; etc.

 

Reperimento del personale
L'esperienza insegna che reperire personale veramente esperto dell'architettura J2EE non è poi così facile. Eppure dalla lettura dei vari CV sembrerebbe di trovarsi in un ambiente di persone super-esperte, navigati disegnatori ed implementatori di architetture J2EE, conoscitori di ogni API Java, pattern di disegno, etc... In ogni modo, nelle sporadiche situazioni in cui si è interessati a sviluppare sistemi che dovranno veramente funzionare, è inoltre utile individuare personale esperto anche dello specifico AS adottato. Pertanto, selezionare un AS non molto conosciuto potrebbe complicare il problema del reperimento del personale, nonché aumentare i costi, specie se questo avviene in corso d'opera (come da prassi). Tipicamente selezionare AS popolari offre un'elevata sicurezza sia sulla possibilità di reperire tecnici preparati e pronti da impiegare e sia sul contenimento delle relative tariffe. Gli stessi tecnici tendono a gradire poco partecipazioni in progetti in cui siano presenti "buzzword" non facilmente spendibili nel proprio CV. Questo è spesso anche colpa di alcune agenzie di reclutamento, o body rental, le quali, invece di selezionare personale in funzione delle capacità di disegno e di implementazione, si limitano a ricercare nei CV dei candidati la presenza di parole chiavi come JBoss, WebLogic, WebSphere, etc.

 

Caratteristiche peculiari dell'AS
Ritornando alla considerazione con cui si è aperto l'articolo, ossia che ormai tutti i maggiori AS realizzano i servizi standard (affidabilità, scalabitilità, realizzazione delle specifiche J2EE, ecc.) con livelli qualitativi abbastanza elevati, si può comprendere come funzionalità aggiuntive possano generare la famosa differenza. Il personale tecnico è pagato per sviluppare sistemi qualitativamente avanzati e funzionanti nei tempi e costi previsti. Sistemi pure J2EE sono molto affascinanti, ma spesso costituiscono un bene di lusso che poche organizzazioni posso permettersi: rifiutare a priori ogni caratteristica peculiare di un AS è semplicemente pericoloso. Ciò però non deve neppure portare a negare la portabilità o a disegnare sistemi fortemente legati a singoli vendor. Ogniqualvolta venga individuata una soluzione portabile e funzionante, questa deve avere l'assoluta precedenza; nei casi in cui invece si debba ricorrere a soluzioni peculiari di un AS, è importante utilizzare le direttive del buon disegno: isolare le parti di sistema fortemente legate ai vendor, generare livelli di astrazione nei confronti dei dettagli, ecc.
In ogni modo le caratteristiche peculiari dei vari AS, spesso, permettono di risolvere alla fonte moltissimi problemi. Per esempio, nelle architetture moderne è sempre più frequente la presenza di sistemi di messaggistica (Message Oriented Middleware), ove la presenza di una buona implementazione dell'architettura JMS è, indubbiamente un ottimo valore aggiunto. Per esempio, dovento operare con MQSeries, ovviamente WebSphere presenta alcune caratteristiche peculiari di integrazione che lo rendono quasi imbattibile. Un'altra tecnologia sulla quale si sta investendo molto sono i famosi web-services. Sebbene questi stiano divenendo parte delle specifiche ufficiali, esistono già diversi AS che integrano egregiamente soluzioni fornite da terze parti. Infine, come non parlare degli entity bean. Non è un mistero che il loro utilizzo, specie se accoppiato con database relazionali, non sempre riesce a raggiungere performance paragonabili a quelle presentate da opportuni strati di integrazione con la base dati. Pertanto, AS offerti con buone integrazioni di prodotti di questo tipo presentano indubbiamente grossi vantaggi. Per esempio Oracle offre gratuitamente Top-Link con i proprio sever.

 

Alcune particolari considerazioni tecniche
Sviluppare sistemi basati sull'architettura J2EE semplifica drasticamente o rimuove del tutto molti problemi tecnici: il container offre tutta una serie di servizi pronti ad essere utilizzati (gestione del ciclo di vita dei componenti, resourse pooling, multi-threading, transazionalità, etc.) permettendo agli sviluppatori di concentrarsi sulla business logic, trascurando molti dettagli implementativi. A fronte di questo vantaggio, però, esistono una serie di nuovi problemi. Sviluppare, effettuare il deployment e verificare sistemi J2EE è più complesso e richiede molto più tempo. Un fattore che, specie in passato, giocava un importante ruolo nella scelta degli AS era legato alla facilità di sviluppare e di effettuare il deployment dei vari EJBs. Si trattava di un processo abbastanza gravoso che richiedeva la necessità di scrivere diversi script proprietari. Attualmente sono disponibili molti tool che permettono di effettuare automaticamente il deployment e poi, la quasi totalità degli AS supporta il cosiddetto hot-deployment: è possibile eseguire il deployment di una nuova versione dei componenti senza dover eseguire lo shutdown dell'AS. Si tratta di un servizio particolarmente apprezzato durante la costruzione del sistema, mentre è praticamente trascurabile quando il sistema è in esercizio. (Nota) Le organizzazioni che sfruttano sistemi informatici per erogare servizi funzionanti su base 24x7, dispongono di configurazioni ridondanti. Ciò è utile per questioni legate al load balancing, per assicurare il funzionamento del sistema in caso di guasto di un server e di aggiornamenti. In questo ultimo caso, le nuove versioni vengono installate su un server opportunamente posto in off-line, dopodiché, tipicamente, si esegue un set minimo di test (tipicamente detti Sanity Check) per verificare che non siano occorsi problemi durante il deployment, quindi si riporta il server on-line, disabilitando gli altri. (Fine nota)
Altro elemento che in passato risultava molto importante era relativo alla qualità della documentazione. Inizialmente non tutti gli AS fornivano un adeguato livello di documentazione. In quei casi era curioso assistere alla frustrazione di alcuni tecnici che, a loro volta, molto spesso erano stati fonte di frustrazione per persone che ne dovevano utilizzare il relativo codice non adeguatamente documentato. Attualmente la documentazione ufficiale, almeno quella degli AS più blasonati, è supportata dalla pubblicazione di svariati articoli e libri provenienti anche da fonti indipendenti. Questi libri spesso affrontano in dettaglio argomenti che possono avere il loro peso, come il tuning, l'accrescimento delle performance, ecc. La disponibilità di questa documentazione, chiaramente, finisce per favorire, ancora una volta, gli AS più popolari.

 

Il supporto da parte della SUN...
Un fattore molto importante (come accennato anche in precedenza) nella selezione di un AS è relativo al livello di adeguamento alle specifiche ufficiale e le performance fornite. Per quanto riguarda il primo punto, la Sun microsystem, proprietaria delle specifiche J2EE, ha l'onere (ben remunerato) di fornire opportuni strumenti atti a misurare l'aderenza degli AS alle specifiche ufficiali. In particolare, la Sun fornisce il famoso Compatibility Test Suite (CTS). Si tratta di test esaustivi che, a detta della Sun, si occupano di verificare tutte le classi e tutti i metodi delle API J2EE e relativi servizi annessi. La lista degli AS che superano i test sono pubblicati presso l'indirizzo ([2]).
Il CTS è indubbiamente un valido strumento, però non è esente da limitazioni. Sottomettere un AS ai test presenta costi abbastanza sostenuti e non tutti i vendor possono o vogliono invertire in tale direzione. Per esempio per molti AS open source (come JBoss, sebbene sembrerebbe che questo problema sia, finalmente, in corso di soluzione, cfr: [5]) si tratta di un investimento proibitivo, altre aziende invece, molto semplicemente, non ritengono si tratti di un buon investimento (per esempio Orion). Inoltre, sebbene questi test si occupino di verificare la corrispondenza alle specifiche ufficiali, non prendono in considerazione altri aspetti ugualmente importanti, come tuning, scalabilità, facilità d'uso, costo della manutenzione, ecc. Inoltre, non sono verificate neanche eventuali caratteristiche aggiuntive fornite dagli specifici AS. Per esempio IBM WebSphere presenta tutta una serie di utilità che agevolano moltissimo l'integrazione con gli altri sistemi forniti dall'IBM, mentre Oracle dispone di TopLink come tier di integrazione con la base di dati qualora si decida (spesso saggiamente) di non utilizzare gli entity bean. Per tutti questi motivi, è importante considerare gli AS dotati di certificazione Sun, tenendo però a mente tutte le limitazioni esposte.
Per quanto concerne invece le performance e la scalabilità, la Sun ha sviluppato un EJB benchmark, ECPerf (cfr.: [3]), atto proprio a verificare performance e scalabilità degli application server. I risultati sono pubblicati sul sito theServerSide (cfr.: [4]). ECPerf dovrebbe simulare i problemi particolarmente ricorrenti nei progetti reali e quindi verificare le performance dell'application server. La scelta operata è quella di adottare un database relazionale e gli entity bean la cui transazionalità è gestita dal container (CMP). Si tratta anche in questo caso di risultati da considerare con le dovute cautele. Già l'architettura selezionata potrebbe creare diversi argomenti di discussione (la maggioranza dei sistemi J2EE in cui abbiamo lavorato o visionato, saggiamente, non impiegavano entity bean... Non è un caso che la stessa Sun abbia prodotto le direttive JDO), inoltre, il particolare database utilizzato con l'AS è un fattore decisamente non trascurabile, così come non è trascurabile la configurazione hardware presa per riferimento. Pertanto, come nel caso del CTS, è importante considerare cautamente i risultati prodotti dall'esecuzione del benchmark.

 

Conclusioni
Con il presente articolo abbiamo affrontato il problema della selezione dell'AS. In particolare l'intento è stato spostare l'attenzione da considerazioni prettamente tecniche ad altre di portata strategico-manageriale. In internet è possibile trovare molti articoli che illustrano le diverse caratteristiche tecniche e i requisiti che un AS deve soddisfare, ma ben pochi affrontano il tema del fattore strategico di tale decisione e dell'impatto sulle politiche tecnologiche aziendali (gestione personale, rapporti con i vendor, pianificazioni di progetti futuri, ecc).
Il tema è stato affrontato conferendo particolare importanza allla prospettiva delle medio/grani imprese e sistemi. In questi casi, una volta selezionato un AS, gioco forza, questo tende a divenire lo standard aziendale. Chiaramente questo problema è meno sentito dalle software house, le quali, per loro natura, dovrebbero rimanere il più possibile indipendenti dai vari vendor. Nel contesto preso in considerazione, variazioni di fornitori tendono a generare notevoli rischi, la cui gestione può prevedere un elevato impatto economico (basti pensare al costo di dover ritrasportare tutte le applicazioni su un diverso AS).
Considerati gli effetti della scelta dell'AS, è molto importante effettuarla il prima possibile. Ciò permette di: adeguare lo sviluppo del sistema alle peculiarità dello specifico AS, instaurare un migliore rapporto con il vendor, aumentare il livello di conoscenza e lo skill richiesto dallo stesso, ecc.
Oggigiorno il mercato fornisce moltissime alternative di AS e le ripercussioni della scelta sono molto importanti. Pertanto, prima di prendere una scelta è consigliabile condurre studi approfonditi considerando tutti i diversi fattori e non limitandosi a selezionare quello meno costoso o quello più blasonato.

 

Bibliografia
[1] Rod Johnson- "J2EE Design and Development", Wrox, 2003

 

Riferimenti
[2] Compatibility Test Suite - http://java.sun.com/j2ee/compatibility.html
[3] ECPerf - http://java.sun.com/j2ee/ecperf
[4] http://www.theserverside.com/ecperf/
[5] http://www.zdnet.com.au/newstech/os/story/0,2000048630,20273052,00.htm


Luca Vetti Tagliati opera nell'area della City di Londra, attualmente operativo presso la Deutsche Bank UK. Si occupa di ricerca di processi di sviluppo del software presso la Birkbeck University of London. Negli ultimi anni ha applicato la progettazione/programmazione Component Based in settori che variano dal mondo delle smart card a quello del trading bancario, prevalentemente in ambienti Java e J2EE. Ha lavorato presso HSBC Investiment Bank PLC UK con funzioni di chief designer, team leader e membro del gruppo PEG (Processing Engineering Group) istituito per stabilire un processo di sviluppo standard da applicarsi per lo sviluppo di sistemi software. Ha collaborato attivamente con persone del calibro di John Daniels (coautore del libro "UML components") e Frank Armour (coautore del libro "Advanced Use Case Modeling"). È rintracciabile presso l'indirizzo LucaVT@tiscali.co.uk.

 
MokaByte® è un marchio registrato da MokaByte s.r.l. 
Java®, Jini® e tutti i nomi derivati sono marchi registrati da Sun Microsystems.
Tutti i diritti riservati. E' vietata la riproduzione anche parziale.
Per comunicazioni inviare una mail a info@mokabyte.it