MokaByte 55 - 7mbre  2001
Foto dell'autore non disponibile
di
Massimiliano Bigatti
Web Services 
Lo stato dell’arte della piattaforma Java
Dopo aver  affrontato le tre tecnologie di base dei Web Services: SOAP, WSDL e UDDI, cerchiamo di capire che impatto possono avere sulle nostre applicazioni Java e soprattutto cercheremo di valutare quanto la piattaforma Java sia pronta per il mondo dei web services.
Web Services oggi
Mentre il consorzio W3C sta lavorando sulla standardizzazione di SOAP (una bozza delle specifiche di SOAP 1.2 è uscita qualche mese fa) e sulla definizione del protocollo XMLP (XML Protocol), anche SUN sta lavorando per includere nella piattaforma Java alcuni elementi dei Web Services. 
Sicuramente SOAP 1.2 ed XML Protocol saranno oggetti di prossimi articoli, dove entreremo nel dettaglio delle singole specifiche, per ora è interessante notare due particolari:
  • SOAP 1.2 non è molto diverso da SOAP 1.1. All’interno di Header e Body sono stati inseriti suddivisioni, chiamati “block” di fatto rendendo più modulari i messaggi SOAP. Un’altra modifica attesa è la variazione dei namespace che ora riflettono l’indirizzo Internet del W3C (http://www.w3.org) invece che quello di xmlsoap.org;
  • XML Protocol non è un protocollo vero e proprio, ma un modello astratto di scambio di messaggi XML. Contiene la definizione di concetti astratti che non definiscono una implementazione ma sono aperti a realizzazioni differenti. Una di queste sarà sicuramente SOAP 1.2. A differenza di SOAP, dunque, XMLP non definisce strutture di messaggi e convenzioni per l’encoding.
Quest’ultimo aspetto riveste una notevole importanza in questioni quali la compatibilità dei sistemi. Ad esempio: se due sistemi implementano in modo diverso XML Protocol ma entrambi rispettando il modello astratto, questi potranno essere definiti correttamente implementazioni di XML Protocol, ma potranno scambiarsi informazioni, visto che le implementazioni sono diverse?
 
 
 

La piattaforma Java
SUN sta utilizzando una certa cautela per quanto riguarda i Web Services (IBM/Microsoft) anche perché, come accennato nei precedenti articoli, SUN è tra i promotori di una iniziativa analoga, la ebXML. Sebbene ci sia una certa antagonia tra WS e ebXML, SUN non vuole precludersi la tecnologia di WS per non rimanere fuori dal mercato.

L’integrazione di XML, tecnologia base dei WS e di ebXML, nella piattaforma Java come sappiamo non è nativa, in quanto non esistono tipi di dati elementari (primitive o classi di java.lang, come String) che supportano le informazioni strutturate XML. È vero che in Java2 nel package java.util sono presenti le classi del Collection Framework che contengono, tra le altre cose, strutture ad albero, ma queste non sono adatte a contenere documenti XML. D’altra parte le API del DOM non sono studiate per Java e forniscono una modalità scomoda di accesso alle informazioni XML.
Un insieme di API che potrebbe semplificare la manipolazione di informazioni XML utilizzando la stessa eleganza delle classi Java native come String o Hashtable è JDOM (http://www.jdom.org).
Questo insieme di API espone elementi di un file XML come oggetti Java in modo molto immediato implementando sostanzialmente un object model che rappresenta un file XML.
Queste API sono state accettate come JSR-102 (Java Specification Request) dal JCP (Java Community Process), l’organismo che gestisce l’evoluzione di Java e potranno in un futuro essere la base del supporto nativo di Java per i documenti XML.
JDOM affianca JAXP nel supporto di Java per XML. Come noto, JAXP è l’acronimo di Java API for XML Parsing ed è un insieme di API per l’accesso a parser XML. JAXP 1.1 contiene un parser di default sviluppato da SUN, ma è possibile escluderlo ed utilizzarne un altro, ad esempio Xerces dell’Apache Software Foundation (http://www.apache.org). Xerces è un parser molto stabile ed evoluto e tra l’altro è free software.


Figura 1

Un parser XML è un componente software che può essere interfacciato tramite un pattern facade, un’interfaccia di dimensioni contenute che “nasconde” all’utilizzatore le numerosi classi necessarie ad eseguire un compito così complesso come l’interpretazione di documenti XML. Per questa sua natura, il parser XML è un ottimo candidato al pattern facade ed infatti la creazione delle API JAXP ha consentito, con bassi costi, la realizzazione di applicazioni che possano fare il plug&play del parser (come per tanti altri servizi nel mondo Java).
 


Figura 2

La manipolazione di informazioni XML non è, come sappiamo, sufficiente ad implementare il supporto ai Web Services. L’acronimo che risponde alla necessità di comunicazione XML nella piattaforma Java è JAXM.
 
 
 

Comunicazione XML indipendente dal trasporto
Le classi di JAXM (Java API for XML Messaging) sono un insieme di API native Java per la comunicazione (messagin) tramite XML. Le tre caratteristiche chiave di JAXM sono:

  • impacchettamento delle informazioni in XML;
  • instradamento dei documenti XML;
  • trasporto;
Il trasporto può avvenire su infrastruttre di comunicazione diverse, come:
  • HTTP
  • SMTP
  • FTP
Nota: la cosa strana per JAXM (vista la X dell’acronimo) è che, stando a quello che ha dichiarato SUN, dovrebbe gestire anche informazioni non XML.
Le codifiche supportate sono principalmente due:
 
  • SOAP 1.1 con attachment (ovviamente);
  • ebXML transportation (altrettanto ovviamente).
La stessa logica di facade utilizzata nelle API JAXP è stata implementata in JAXM. Un’applicazione che parla in JAXM può accedere a protocolli di comunicazione di varia natura (SOAP, ebXML, altri) ed a trasporti diversi (HTTP, SMTP, etc.).
In questo modo l’investimento nel codice è salvaguardato, come nel caso di JAXP.
La nota dolente riguardo a JAXM è che è attualmente in Early Access, questo significa che è tutt’altro che pronta ed utilizzabile in progetti reali. Nei prossimi mesi ci occuperemo più dettagliatamente di JAXM e cercheremo di capire quando queste API potranno essere utilizzate come base per progetti reali. Nel frattempo è possibile utilizzare il toolkit di Apache [1] oppure realizzare un supporto personalizzato, o ancora utilizzare uno dei tanti toolkit commerciali che stanno emergendo. In tutti questi tre casi, purtroppo, il codice realizzato sarà fuori standard.
Ulteriori informazioni su JAXM sono disponibili sul sito di Javasoft all’indirizzo: http://java.sun.com/xml/jaxm/index.html.
Una limitazione di JAXM è l’impossibilità di combinare messaggi XML in modo da realizzare schemi come richiesta/risposta, possibili con SOAP e necessari per implementare un RPC (Remote Procedure Call). Questa limitazion è di JAXM e non della piattaforma Java, infatti il supporto ad RPC su XML è dato dalle API JAX-RPC.
 
 
 

Remote Procedure Call su XML
JAX-RPC (Java API for XML based RPC) è un insieme di API che fornisce allo sviluppatore un modello astratto per la chiamata remota a procedure che scambiano dati XML. SOAP 1.1 (con estensioni) ed XML Protocol saranno due protocolli supportati da JAX-RPC. Attualmente queste API sono ancora in fase di studio e recentemente approvate come JSR (http://jcp.org/jsr/detail/101.jsp).
Un dubbio che sorge spontaneo pensando a JAX-RPC è il fatto che la piattaforma Java già dispone di due standard per la chiamata remota a procedure (anche se sarebbe meglio dire “ad oggetti”):

  • Java RMI
  • CORBA


Le ultime versioni di JDK (dalla 1.3) integrano inoltre una implementazione (sviluppata da IBM) di RMI-IIOP, cioè una implementazione di RMI che utilizza il protocollo di basso livello di CORBA. RMI-IIOP è un tentativo di integrazione e convergenza tra RMI e CORBA.
Perché dunque un ulteriore modalità di RPC? Come spiegato nel JSR, un obiettivo sempre presente nello sviluppo della piattaforma Java è quello di fornire allo sviluppatore il supporto necessario a sfruttare standard del Web. E RPC su XML è sicuramente una parte importante di uno standard emergente come SOAP.
La speranza è che, almeno in un futuro, tutte queste API siano allineate ad una unica modalità di programmazione distribuita.
 
 
 

UDDI … e non solo
Una componente potenzialmente importante, soprattutto nei futuri Web Services, sono i registri di servizi web. Come abbiamo visto nel precedente articolo [2] UDDI è una iniziativa di IBM e Microsoft per l’implementazione di questi registri. Come sappiamo ebXML è una iniziativa di SUN che ha sviluppato anch’essa in questo senso. Come per SOAP, la necessità della piattaforma Java è quella di supportare gli standard emergenti, ma anche gli sforzi della “casa madre”. Per questo motivo, anche per l’accesso a registri di servizi web è stata proposta un’estensione della piattaforma Java che prende il nome di JAXR (Java API for XML Registries). Attualmente anche questa tecnologia è in fase di studio, come JSR (http://jcp.org/jsr/detail/93.jsp). Oltre a ebXML ed UDDI, queste API supporteranno altri due standard, OASIS e eCo Framework.
Con JAXR si conclude la rassegna delle API per il supporto ai Web Services della piattaforma Java previste da SUN attualmente. Tutte queste tecnologie sono riassunte in tabella 1.
 

TecnologiaJava
  Corrispondenza WS
Stato dell’arte
JAXM
SOAP 
Early Access
JAX-RPC
SOAP RPC
Progettazione
JAXR
UDDI
Progettazione

 

Altro XML…
Giusto per concludere la panoramica del supporto ad XML della piattaforma Java, vorrei citare le oramai consolidate JAXP (Java API for XML Processing), già accennate sopra, che oramai giunte alla versione 1.1 includono anche il supporto alle transformazioni XSLT, e le nuove API JAXB.
JAXB è l’acronimo di Java Architecture for XML Binding. Queste sono un insieme di API e strumenti per la creazione automatica di classi Java che mappano direttamente documenti XML e viceversa. Quando non è necessario elaborare a basso livello l’albero XML di un documento, è possibile accedere alle sue informazioni non utilizzando JAXP, ma direttamente classi Java generate con JAXB. Sicuramente questo strumento è un valido aiuto alla realizzazione di applicazioni Java per XML. Attualmente JAXB è in Early Access (http://developer.java.sun.com/developer/earlyAccess/xml/jaxb/). Ulteriori informazioni al sito dedicato: http://java.sun.com/xml/jaxb/index.html
 
 
 

Conclusioni
Sicuramente la comunità Java sta lavorando alacremente per integrare Java con XML e le iniziative descritte in questo articolo ne sono la dimostrazione. Ad oggi, purtroppo, solo JAXP è una API veramente stabile, tutte le altre sono in versione Early Access o in fase di pianificazione. Sicuramente, quando JAXM e JAX-RPC saranno disponibili, la realizzazione di server e client per i Web Services sarà molto semplice … e si porrà il problema della compatibilità tra i sistemi. Non sarà immediato veder funzionare insieme le implementazioni di Microsoft, IBM, Apache e SUN, occorrerà ancora del tempo. Il vantaggio del “JAX Pack” è quello di consentire lo sviluppo di applicazioni che si basano su XML, ma senza vincolare il prodotto ad una specifica implementazione. Se oggi c’è SOAP, magari domani ci sarà XML Protocol. In entrambi i casi un’applicazione realizzata con JAXM potrà sfruttare diverse implementazioni di tipologie comuni di protocolli consentendo un risparmio nei tempi di sviluppo per l’adattamento evolutivo dei programmi.
 
 
 

Per saperne di più
Per approfondire queste API, vi consiglio, a parte i siti dedicati a ciascuna tecnologia e contenuti nell’articolo, i riferimenti [3] e [4]. La prima è una feature di java.sun.com che tratta di tutte le tecnologie “JAX”, la seconda è una whitepaper di SUN con ulteriori approfondimenti più tecnici su tutte le API XML di Java.
 
 
 

Riferimenti
[1] Andrea Giovannini - SOAP e Java Integrazione di applicazioni con Java e il nuovo protocollo SOAP - http://www.mokabyte.it/2001/01/soap.htm
[2] Massimiliano Bigatti – Web services III parte: la tecnologia UDDI - http://www.mokabyte.it/2001/07/webservices.htm
[3] Javasoft – Creating Web Services with Java™ Technology and XML - http://java.sun.com/features/2001/05/jax.p.html
[4] SUN – Web Services made esasier - http://java.sun.com/xml/webservices.pdf

Vai alla Home Page di MokaByte
Vai alla prima pagina di questo mese


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
mokainfo@mokabyte.it