Il libro fa parte della collana
Cookbook di O'Reilly; questa serie ha lo scopo di fornire
soluzioni pronte all'uso nelle diverse tecnologie e/o linguaggi di programmazione, quindi viene dato meno spazio (o nulla) alla teoria e vengono forniti tanti esempi di codice funzionante, che illustrano i punti chiave e le diverse implementazioni possibili.
Questo libro, pur ricalcando le linee guida della collana, si
differenzia perché garantisce comunque ampi spazi alla teoria e alle scelte strategiche che stanno dietro al codice presentato. D'altro canto non poteva essere diversamente visto che l'argomento, le
SOA, è particolarmente complesso e, allo stesso tempo, ampio, variegato e con termini il cui significato non è sempre chiaro o condiviso da tutti.
Infatti i primi capitoli servono proprio per dare un senso ai tanti termini che ci si trova davanti nel mondo delle
SOA;
essi vengono chiariti e contestualizzati, e viene mostrato come cambiando di contesto gli stessi termini cambino di significato; un esempio su tutti è il concetto di servizio, basilare per costruirci attorno architetture e modalità di iterazione: benché con servizio quasi sempre si intendano dei servizi pubblici, che dialogano fra loro in un qualche dialetto basato su
XML ed esposti su protocolli di rete standard (HTTP, SMTP e così via), ci si potrebbe riferire anche a tecnologie proprietarie e specifiche, come lo standard
EJB in ambiente
J2EE.
Accanto alla definizione dei termini vengono presentate le caratteristiche salienti dei componenti base, affinché risulti, alla fine, un'architettura
SOA e non un guazzabuglio di servizi. Ottima la discussione dei principali
design pattern, nonché delle problematiche alla base del design di una simile architettura.
La
prima parte del libro si chiude analizzando gli
XML Schema e la loro gestione via
Java. La
seconda parte affronta i
Web Service, che costituiscono la base di quasi tutte le architetture
SOA. Qui la trattazione va subito al concreto, mostrando
esempi di codice nelle principali tecnologie
Java a disposizione e, ahimè, qui la scelta è vasta, il che porta i neofiti ad avere le idee confuse e a utilizzare male le diverse opzioni a disposizione, senza una vera cognizione di causa. Qui il libro aiuta ad addentrarsi nelle diverse tecnologie e a capirne i punti di forza e di debolezza. In particolare gli esempi usano SAAJ nel capitolo 5,
JAX/WS nel capitolo 6; nel capitolo 7 si mostrano le
novità dell'ambiente J2EE versione 5 per la scrittura di
WS basati su SOAP (e le notevoli semplificazioni rispetto al passato). Il capitolo 8 affronta invece la scrittura di
WS di tipo RESTful, attraverso la presentazione di vari framework che implementano le specifiche
JAX-RS:
Jersey,
RESTEasy e
RESTpack.
La
terza parte del libro introduce le tecnologie di
Business Process, sconosciute ai più abituati a sviluppare semplici
WS, ma essenziali in ottica di architetture
SOA complesse. I capitoli 9 e 10 affrontano la
problematica della service orchestration mostrando l'uso di
BPEL. Anche qui non manca una parte introduttiva, indispensabile per chi non conosce
BPEL. L'undicesimo è uno dei pochi capitoli, se non l'unico, che contiene codice; in esso si analizza il concetto di
SOA Governance e delle problematiche sottese.
La
quarta e ultima parte del libro analizza l'
interoperabilità dei servizi e spiega quale può essere una
definizione appropriata di qualità in questo contesto. Nel capitolo 12 non mancano esempi concreti di interoperabilità con servizi creati in ambiente
.NET (e vengono sviluppati client usando
Visual Studio,
C# e Ruby. Ma la vera forza del capitolo sono i
suggerimenti per creare servizi davvero interoperabili ed evitare i problemi più comuni in quest'ambito.
L'ultimo capitolo, il 14, analizza il concetto di
Enterprise Service Bus, presentando cos'è e quali problematiche risolve; tuttavia questa volta vengono presentati solo vantaggi, anche se non tutti sono di questo avviso.
Il libro, soprattutto nei capitoli iniziali, aiuta il lettore a entrare in maniera graduale in un mondo particolarmente complesso, ma presuppone comunque una certa padronanza dell'architettura
J2EE e un'infarinatura dei
WS e del loro significato.
Pertanto non è un testo per neofiti, ma comunque presenta sufficiente materiale per introdurre la materia anche a chi si avvicina per la prima volta al mondo SOA.
Invece
il target principale del testo è quello di uno sviluppatore/analista Java con una buona padronanza dell'architettura
J2EE, il quale, magari, ha avuto modo di affrontare lo sviluppo di qualche
WS anche se in maniera sporadica. Per questa categoria di utenti il libro presenta ottimi esempi, sempre ben contestualizzati e di cui si apprezzano sia le indicazioni d'uso che gli avvertimenti su eventuali situazioni cui prestare attenzione. Nel complesso
non è un libro adatto ad un software architect o a chi vorrebbe avere una panoramica di alto livello delle SOA, ma d'altro canto è difficile che queste figure ricerchino un
cookbook per le problematiche di loro competenza. In definitiva è un
ottimo libro, ben organizzato e ottimamente scritto.

Il testo contiene molti ottimi esempi di codice, sempre ben contestualizzati. Si parte dai "mattoncini base" (i WS) per arrivare a scelte architetturali e di processo avanzate. Pertanto esso è adatto a chi, avendo un'ottima base di Java e una buona conoscenza dell'architettura J2EE, vuole entrare nel mondo SOA.