JMS e WebServices nello sviluppo di architetture EDA e SOA

Transcript

JMS e WebServices nello sviluppo di architetture EDA e SOA
JMS e WebServices nello sviluppo di
architetture EDA e SOA
Jürgen Assfalg
28 febbraio 2006
http://viplab.dsi.unifi.it/~assfalg/ - http://www.provincia.fi.it/
Jürgen Assfalg
JMS e Web services nello sviluppo di architetture EDA e SOA
1
Contesto
Integrazione di applicazioni di scala enterprise
caso di studio
Temi
●
●
●
●
●
●
●
Jürgen Assfalg
WS
Applicazioni enterprise
Architetture
Evoluzione delle tecnologie SW
EAI (Enterprise Applications Integration)
SOA / EDA
JMS
JMS e Web services nello sviluppo di architetture EDA e SOA
2
Per finalizzare l'uso della tecnologia alla
soluzione di un problema reale, si consideri
la gestione di un procedimento
amministrativo, quale il rilascio di
autorizzazione per trasporti eccezionali:
“La Provincia rilascia l'autorizzazione per il transito di
convogli eccezionali lungo gli itinerari delle strade
regionali e provinciali, nonché lungo le strade
comunali previa acquisizione di nulla-osta del
Comune territorialmente competente, se trattasi di
percorso misto che riguarda sia strade regionali e/o
provinciali sia comunali, oppure quando il percorso
richiesto interessi più comuni” [http://www.provincia.fi.it/]
Jürgen Assfalg
JMS e Web services nello sviluppo di architetture EDA e SOA
3
Front-office (interazione con l'utente)
Avvio del procedimento
presentazione dell'istanza tramite modulo
●
●
●
●
generalità del richiedente
periodo e percorso previsti per il trasporto
caratteristiche del mezzo
ulteriori dichiarazioni
Conclusione del procedimento
rilascio dell'autorizzazione
●
●
Jürgen Assfalg
percorso
costi
JMS e Web services nello sviluppo di architetture EDA e SOA
4
Nell'interazione tra Amministrazione e utente, un
aspetto importante nella gestione del
procedimento è la protocollazione di documenti
in arrivo e in partenza
●
registrazione del documento
oggetto, argomento, mittente, destinatari, ...
●
assegnazione di un numero di protocollo
numero progressivo (unico per ogni anno), data, classfica, ...
●
archiviazione del documento
–
–
del cartaceo
eventualmente anche digitalizzazione e archiviazione
elettronica
Jürgen Assfalg
JMS e Web services nello sviluppo di architetture EDA e SOA
5
Back-office
Le attività svolte “dietro le quinte” dagli addetti al
procedimento sono molteplici, e comprendono:
–
esame dell'istanza
–
verifica vincoli (ponti, gallerie, cantieri) sulle parti
di percorso di propria competenza
–
calcolo degli oneri
–
eventuale richiesta nulla-osta ad altri Enti (es.
Comuni interessati dal percorso)
–
produzione dell'autorizzazione
Jürgen Assfalg
JMS e Web services nello sviluppo di architetture EDA e SOA
6
Formalizzazione del problema: protocollo
Inizialmente si intende realizzare un servizio
software che consenta sia agli addetti allo
sportello (front-office) sia alle varie applicazioni
presenti nell'Amministrazione una
protocollazione unificata dei documenti
Tipicamente le Amministrazioni dispongono di
un'applicazione (il protocollo informatico) che,
raccogliendo i dati tramite opportune maschere,
consente agli addetti di registrare di documenti
Quali sono le tecnologie per rendere disponibile il
servizio anche alle applicazioni?
Jürgen Assfalg
JMS e Web services nello sviluppo di architetture EDA e SOA
7
Insieme di tecnologie software progettate per
consentire l'interazione tra applicazioni
Per garantire un'elevata interoperabilità, le
diverse componenti sono normate da
organismi di standardizzazione (es. W3C,
OASIS, WS-I, ...)
Jürgen Assfalg
JMS e Web services nello sviluppo di architetture EDA e SOA
8
Principali componenti
●
SOAP (http://www.w3.org/TR/soap/)
definisce come avviene il trasporto dei messaggi
●
Web Service Description Language - WSDL
(http://www.w3.org/TR/wsdl)
definisce il formato dei messaggi, ovvero la
struttura dell'informazione
●
UDDI
definisce indici e relativi criteri di ricerca per
catalogare e cercare web services
Jürgen Assfalg
JMS e Web services nello sviluppo di architetture EDA e SOA
9
Piattaforma
–
Java Development Kit 1.4.2
(http://java.sun.com/j2se/1.4.2/)
linguaggio Java, VM
–
Tomcat 5.0.x (http://tomcat.apache.org/)
application server
–
Axis 1.2.x (http://ws.apache.org/axis/)
insieme di strumenti per l'implementazione di WS e
relativi clients in Java
Nota: si sono volutamente prese in considerazione
versioni non troppo recenti, per garantire una
maggiore stabilità dell'intera piattaforma
Jürgen Assfalg
JMS e Web services nello sviluppo di architetture EDA e SOA
10
Axis prevede una modalità elementare per la
realizzazione di Web Services, che prevede i
seguenti passi:
–
definizione di una classe che realizza il servizio
–
installazione della classe su Axis
Una volta realizzato il servizio sarà possibile
–
consultarne il file WSDL
●
●
–
in questo caso generato automaticamente da Axis
descrive il formato dei messaggi accettati e prodotti
dal servizio, nonché le operazioni previste
accedervi tramite opportuno client
Jürgen Assfalg
JMS e Web services nello sviluppo di architetture EDA e SOA
11
Implementazione della logica del servizio
nel seguito è riportata una semplice classe, che
realizza la logica elementare del servizio di
protocollo, consentendo:
●
la registrazione di un documento
del documento si specifica l'oggetto
il servizio restituisce il numero di protocollo associatogli
la ricerca del documento, ovvero dell'oggetto
associato ad un determinato numero di protocollo
sono previsti meccanismi di sincronizzazione per
garantire che il registro di protocollo sia tenuto
correttamente anche in regime di concorrenza
(es. sequenza di numeri strettamente monotona)
●
Jürgen Assfalg
JMS e Web services nello sviluppo di architetture EDA e SOA
12
public class ProtocolloElementare {
public int registra( String oggetto ) {
return _registra( oggetto ); }
public String cerca( int numero ) {
return _cerca( numero ); }
private static int _registra( String oggetto ) {
int c;
synchronized ( registro ) {
contatore++;
registro.put(
new Integer( contatore ), oggetto );
c = contatore;
}
return c;
}
[...segue...]
Jürgen Assfalg
JMS e Web services nello sviluppo di architetture EDA e SOA
13
[...]
private static String _cerca( int numero ) {
String o;
synchronized ( registro ) {
o = (String) registro.get(
new Integer( numero ) );
}
return o;
}
private static int contatore = 0;
private static HashMap registro = new HashMap();
}
Jürgen Assfalg
JMS e Web services nello sviluppo di architetture EDA e SOA
14
Operativamente, una volta scritto il file con la classe
appena vista, per l'installazione è necessario
●
copiare il file sorgente nella cartella di Axis
%TOMCAT_HOME%\webapps\axis
dove %TOMCAT_HOME% è la cartella in cui è stato installato
Tomcat
●
cambiare l'estensione da .java a .jws
ProtocolloElementare.jws
Per verificare la corretta installazione del servizio è
sufficiente accedere alla pagina
http://localhost:10080/axis/ProtocolloElementare.jws
ipotizzando che Tomcat sia in ascolto sulla porta 10080 della
macchina da cui si accede, e che Axis sia installato nella
cartella sopra indicata
Jürgen Assfalg
JMS e Web services nello sviluppo di architetture EDA e SOA
15
Per consultare il file WSDL si può selezionare il
collegamento ipertestuale riportato nella pagina
sopra, oppure accedervi direttamente all'indirizzo
http://localhost:10080/axis/ProtocolloElementare.jws?wsdl
Jürgen Assfalg
JMS e Web services nello sviluppo di architetture EDA e SOA
16
WSDL è un formato XML per descrivere il
servizio in termini di
–
formato dei messaggi scambiati
utilizzando anche XML Schema
–
operazioni definite sull'endpoint (“terminale”)
–
binding, ovvero come avviene l'aggancio al
protocollo di trasporto (SOAP)
–
indirizzo a cui è raggiungibile il servizio
nel seguito è riportato il file WSDL prodotto
automaticamente da Axis per il servizio
elementare di protoccolo
Jürgen Assfalg
17
JMS e Web services nello sviluppo di architetture EDA e SOA
messaggi
endpoint
Jürgen Assfalg
JMS e Web services nello sviluppo di architetture EDA e SOA
18
Jürgen Assfalg
JMS e Web services nello sviluppo di architetture EDA e SOA
19
Tutto sommato facile...
–
la realizzazione del servizio si è ridotta alla
scrittura di una classe Java
–
il file WSDL, richiesto per ogni Web Service, è
stato prodotto automaticamente da Axis
ma...
–
quest'approccio non è sempre utilizzabile
es. la classe deve appartenere al package predefinito
–
Jürgen Assfalg
manca il client per il servizio
JMS e Web services nello sviluppo di architetture EDA e SOA
20
Il procedimento generale è diverso:
–
definizione di un servizio e delle operazioni, cioè
definizione di un'interfaccia:
+ registra( : String ) : Protocollo
+ cerca( : int ) : String
NOTA
Rispetto alla prima implementazione del protocollo, che
restituiva un intero, in questo caso si prevede un tipo definito
ad hoc (Protocollo), che oltre al numero conterrà anche
l'anno.
Un tale tipo di dato non è previsto dagli standards XML
Schema e SOAP (mentre lo sono, ad esempio, interi e
stringhe), e quindi dovrà essere adeguatamente trattato
Jürgen Assfalg
–
JMS e Web services nello sviluppo di architetture EDA e SOA
21
creazione del file WSDL
qualora non si sia ancora esperti di WSDL si può
sempre ricorrere a Java2WSDL (uno strumento
fornito insieme ad Axis), che crea un file WSDL a
partire da una classe o un'interfaccia Java
java org.apache.axis.wsdl.Java2WSDL
--style document --use LITERAL -o protocollo.wsdl
-l"http://localhost:10080/axis/services/WSServizio"
-n "urn:protocollo" -p"protocollo" "urn:protocollo"
protocollo.WSServizio
in generale, l'editing diretto di un file WSDL risulta
comunque essere un'attività abbastanza pesante, per
cui si raccomanda l'uso di un editor XML o degli
strumenti presenti negli ambienti di sviluppo integrati
(es. Eclipse, con i plugins del progetto WTP)
Jürgen Assfalg
JMS e Web services nello sviluppo di architetture EDA e SOA
22
–
generazione delle classi Java
java org.apache.axis.wsdl.WSDL2Java
-s -p protocollo.wsdl protocollo.wsdl
dato il file WSDL, il programma WSDL2Java del
pacchetto Axis provvede a generare tutte le classi
accessorie per realizzare, in maniera trasparente al
programmatore, il collegamento tra client e server,
secondo i protocolli previsti per lo specifico servizio
(es. SOAP, HTTP, ...)
Jürgen Assfalg
JMS e Web services nello sviluppo di architetture EDA e SOA
23
In generale, WSDL2Java può generare
–
per ogni tipo: una classe Java
ed eventuale holder
–
per ogni portType: un'interfaccia Java
–
per ogni binding
●
●
●
–
per ogni service:
●
●
Jürgen Assfalg
una classe stub
una classe skeleton
un modello (template) per l'implementazione
un'interfaccia Java del servizio
un'implementazione del servizio (locator)
JMS e Web services nello sviluppo di architetture EDA e SOA
24
Jürgen Assfalg
JMS e Web services nello sviluppo di architetture EDA e SOA
25
Server
disponendo già di una classe che realizza la logica
del registro di protocollo (la classe
ProtocolloElementare, vista in
precedenza), l'implementazione del Web Service
si riduce al completamento della classe
WSProtocolloSoapBindingImpl in maniera
tale da adattare la classe esistente alla nuova
interfaccia richiesta, cioè WSServizio
v. anche design pattern Adapter
Jürgen Assfalg
JMS e Web services nello sviluppo di architetture EDA e SOA
26
public class WSProtocolloSoapBindingImpl
implements WSServizio {
public Protocollo registra( String oggetto )
throws java.rmi.RemoteException {
int numero = r.registra( oggetto );
Protocollo p = new Protocollo();
p.setNumero( protocollo );
p.setAnno( 2006 );
adattamento
return protocollo; }
public String cerca( int numero )
throws java.rmi.RemoteException {
return r.cerca( numero ); }
static ProtocolloElementare r =
new ProtocolloElementare(); }
Jürgen Assfalg
JMS e Web services nello sviluppo di architetture EDA e SOA
27
Installazione del servizio
–
copiare le varie classi sull'application server
–
attivare il servizio su Axis
utilizzando gli strumenti forniti con il pacchetto Axis
java org.apache.axis.client.AdminClient deploy.wsdd
il formato WSDD (Web Sevice Deployment Descriptor),
specifico del pacchetto Axis, serve per indicare al
server informazioni utili per la configurazione
del servizio
operazioni e relativi parametri
classe che implementazione il servizio
mappatura dei parametri complessi
Jürgen Assfalg
JMS e Web services nello sviluppo di architetture EDA e SOA
28
WSDD
<deployment [...] >
<service name="WSProtocollo" provider="java:RPC" style="rpc" use="encoded">
[...] <parameter name="wsdlServiceElement" value="WSServizioService"/>
<parameter name="wsdlServicePort" value="WSProtocollo"/>
<parameter name="className"
value="protocollo.wsdl.WSProtocolloSoapBindingImpl"/>
<parameter name="wsdlPortType" value="WSServizio"/>
<operation name="registra" qname="operNS:registra" [...]
returnType="rtns:Protocollo">
<parameter qname="in0" type="tns:string"/>
</operation> [...]
<typeMapping
xmlns:ns="urn:protocollo"
qname="ns:Protocollo"
type="java:protocollo.wsdl.Protocollo"
serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"
deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"
[...]
/> [...]
Jürgen Assfalg
JMS e Web services nello sviluppo di architetture EDA e SOA
29
Client (statico)
l'accesso al servizio dal client richiede l'uso di un
oggetto WSServizioServiceLocator, (classe
generata automaticamente dallo strumento
WSDL2Java di Axis), che serve per ottenere il
riferimento al proxy locale del servizio
stabilito il contatto con il servizio attraverso un
oggetto locator, l'accesso al servizio avviene
semplicemente invocando i metodi di un oggetto
(il proxy, appunto) che implementa l'interfaccia
WSServizio, senza curarsi di ciò che sta dietro
Jürgen Assfalg
JMS e Web services nello sviluppo di architetture EDA e SOA
30
WSServizioService service =
new WSServizioServiceLocator();
String endpointUrl =
"http://localhost:10080/axis/services/WSProtocollo";
WSServizio port = service.getWSProtocollo(
new URL( endpointUrl ) );
for ( int i = 0; i < numeroProve; i++ ) {
String o = "prova " + i;
int n = port.registra( o ).getNumero();
numeri[ i ] = n; }
for ( int i = numeroProve; i > 0; i-- ) {
int n = numeri[ i - 1 ];
String o = port.cerca( n ); }
Jürgen Assfalg
JMS e Web services nello sviluppo di architetture EDA e SOA
31
Alternative al client statico
–
Dynamic Proxy
il proxy viene generato dinamicamente quando
si accede al servizio; funziona finché non
cambia la signature dei metodi usati dal client
–
Dynamic Invocation
si accede alle operazioni del servizio tramite
chiamate standard
Call call = (Call) service.createCall();
call.setTargetEndpointAddress( endpoint );
call.setOperationStyle( opStyle );
call.setOperationUse( opUse );
call.addParameter( new Qname( "http://ws", "numero"),
XMLType.XSD_INT, ParameterMode.IN );
call.setOperationName( "cerca" );
call.setReturnType( XMLType.XSD_STRING );
Jürgen Assfalg
JMS e Web services nello sviluppo di architetture EDA e SOA
32
Per definire un Web service è utile capire
alcuni dettagli relativi alla formattazione dei
messaggi, sia a livello di definizione in WSDL
che di trasmissione con SOAP
WSDL prevede due parametri
–
STILE (binding con SOAP)
RPC | DOCUMENT | WRAPPED
Java2WSDL: -y, --style <argument>
–
USE (nella codifica del messaggio SOAP)
ENCODED | LITERAL
Java2WSDL: -u, --use <argument>
Jürgen Assfalg
JMS e Web services nello sviluppo di architetture EDA e SOA
33
Per comprendere gli effetti delle diverse
combinazioni dei valori dei due parametri si
può esaminare sia il file WSDL, sia il traffico
SOAP tra client e server
Per l'analisi del traffico si può utilizzare un'altro
strumento di Axis: TCPMon
java org.apache.axis.utils.tcpmon 9080 localhost 10080
il programma realizza un proxy TCP, che raccoglie tutto
il traffico indirizzato alla porta locale 9080, lo registra,
e quindi lo indirizza alla porta 10080 di localhost;
analogamente per il traffico di ritorno
è necessario cambiare l'indirizzo dell'endpoint fornito al client
Jürgen Assfalg
JMS e Web services nello sviluppo di architetture EDA e SOA
34
Client
risposta
inolrata
richiesta
TCPMon
richiesta
inolrata
risposta
Server
Jürgen Assfalg
JMS e Web services nello sviluppo di architetture EDA e SOA
35
Document - literal
Jürgen Assfalg
JMS e Web services nello sviluppo di architetture EDA e SOA
36
==== Request ====
POST /axis/services/WSProtocolloDL HTTP/1.0
Header HTTP
Content-Type: text/xml; charset=utf-8
Accept: application/soap+xml, application/dime, multipart/related, text/*
User-Agent: Axis/1.2.1
Host: localhost:9080
Cache-Control: no-cache
Pragma: no-cache
SOAPAction: ""
Content-Length: 302
<?xml version="1.0" encoding="UTF-8"?>
Messaggio SOAP
<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
Corpo messaggio SOAP
<in0 xmlns="urn:protocollo">prova 1</in0>
</soapenv:Body>
</soapenv:Envelope>
Jürgen Assfalg
JMS e Web services nello sviluppo di architetture EDA e SOA
37
==== Response ====
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Content-Type: text/xml;charset=utf-8
Date: Mon, 27 Feb 2006 16:42:38 GMT
Connection: close
<?xml version="1.0" encoding="utf-8"?>
<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<registraReturn xmlns="urn:protocollo">
<anno>2006</anno>
<numero>1</numero>
</registraReturn>
</soapenv:Body>
</soapenv:Envelope>
Jürgen Assfalg
JMS e Web services nello sviluppo di architetture EDA e SOA
38
RPC - encoded
Jürgen Assfalg
JMS e Web services nello sviluppo di architetture EDA e SOA
39
==== Request ====
[...]
<ns1:registra
soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:ns1="urn:protocollo">
<in0 xsi:type="soapenc:string"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">prova
1</in0>
</ns1:registra>
[...]
Jürgen Assfalg
JMS e Web services nello sviluppo di architetture EDA e SOA
40
==== Response ====
[...]
<ns1:registraResponse
soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:ns1="urn:protocollo">
<registraReturn href="#id0"/>
</ns1:registraResponse>
<multiRef id="id0" [...] xsi:type="ns2:Protocollo" [...]>
<anno href="#id1"/>
<numero href="#id2"/>
</multiRef>
<multiRef id="id1" [...] xsi:type="xsd:int" [...]>2006</multiRef>
<multiRef id="id2" [...] xsi:type="xsd:int" [...]>1</multiRef>
[...]
Jürgen Assfalg
JMS e Web services nello sviluppo di architetture EDA e SOA
41
Wrapped - literal
Jürgen Assfalg
JMS e Web services nello sviluppo di architetture EDA e SOA
42
==== Request ====
[...]
<registra xmlns="urn:protocollo">
<in0>prova 1</in0>
</registra>
[...]
<in0 xmlns="urn:protocollo">prova 1</in0>
==== Response ====
[...]
<registraResponse xmlns="urn:protocollo">
<registraReturn>
<registraReturn xmlns="urn:protocollo">
<anno>2006</anno>
<anno>2006</anno>
<numero>1</numero>
<numero>1</numero>
</registraReturn>
</registraReturn>
</registraResponse>
[...]
Jürgen Assfalg
–
JMS e Web services nello sviluppo di architetture EDA e SOA
Document-literal
●
●
●
●
–
Obsoleto
le altre combinazioni
●
Jürgen Assfalg
supera limite di un solo parametro in document-literal,
accorpando più parametri in uno solo
RPC-encoded
●
–
messaggi SOAP più leggeri
consente uso strumenti per XML (es. validazione)
flessibilità nella definizione del servizio
maggiori oneri per lo sviluppatore (XML Schema!)
Wrapped-literal
●
–
43
irrilevanti
JMS e Web services nello sviluppo di architetture EDA e SOA
44
alternative
●
SwA (SOAP with Attachments) con MIME
il messaggio che transita è composto da più parti
MIME multipart/related: la prima contiene la
busta SOAP, le altre gli allegati.
Buona interoperabilità
Axis lo supporta
JWSDP di SUN lo supporta
WS-I (“WS-I Attachments Profile 1.0”)
Microsoft NON prevede supporto per SwA in .NET.
Jürgen Assfalg
JMS e Web services nello sviluppo di architetture EDA e SOA
46
L’uso di SwA può essere descritta direttamente nel
documento WSDL che descrive il web service
che utilizza l’invio e la ricezione di allegati.
Server
Message req = MessageContext.getCurrentContext().getRequestMessage();
Attachments msgAtts = req.getAttachmentsImpl();
AttachmentPart parts[] =
new AttachmentPart[ msgAtts.getAttachmentCount() ];
Iterator it = msgAtts.getAttachments().iterator();
for ( int i = 0; it.hasNext(); i++) parts[ i ] = (AttachmentPart) it.next();
[...]
DataHandler dh = parts[ 0 ].getDataHandler();
InputStream in = dh.getInputStream();
Jürgen Assfalg
JMS e Web services nello sviluppo di architetture EDA e SOA
47
Client
Service service = new Service();
call = (Call) service.createCall();
call.setTargetEndpointAddress( endpoint );
call.setOperationStyle( opStyle );
call.setOperationUse( opUse );
call.addParameter( new Qname( "http://ws", "nome"), XMLType.XSD_STRING,
ParameterMode.IN );
call.addParameter( new QName("http://ws", "length"), XMLType.XSD_INT,
ParameterMode.IN );
call.setOperationName( "uploadAttachmentSwA" );
call.setReturnType( XMLType.AXIS_VOID );
DataHandler attachmentFile = new DataHandler( new FileDataSource( file ) );
call.setProperty( Call.ATTACHMENT_ENCAPSULATION_FORMAT,
Call.ATTACHMENT_ENCAPSULATION_FORMAT_MIME);
call.addAttachmentPart( attachmentFile );
call.invoke( new Object[] { "Allegato.pdf", new Integer( filesize ) } );
call.removeAllParameters();
Jürgen Assfalg
JMS e Web services nello sviluppo di architetture EDA e SOA
48
●
WS-Attachments con DIME (Direct Internet
Message Encapsulation)
–
unico formato supportato da Microsoft.
–
DIME prevede un meccanismo di
impacchettamento molto più efficiente del MIME.
più veloce di SwA.
–
Bassa interoperabilità
sia DIME che WS-Attachments sono delle IETF Internet
Drafts abbastanza datate (luglio 2002)
nessuno sta portando avanti il processo di
standardizzazione
Jürgen Assfalg
JMS e Web services nello sviluppo di architetture EDA e SOA
49
Microsoft supporta solo DIME in .NET
tramite il pacchetto WSE (Web Services
Enhancements).
SUN lo supporta con SAAJ
Axis lo supporta
L’uso di WS-Attachments può essere descritta
direttamente nel documento WSDL che descrive
il web service che utilizza l’invio e la ricezione di
allegati.
Jürgen Assfalg
JMS e Web services nello sviluppo di architetture EDA e SOA
50
●
MTOM (SOAP Message Transmission and
Optimization Mechanism)
–
si basa su XOP (XML-binary Optimized
Packaging)
Working Draft della W3C tratta l'ottimizzazione dell’invio
di dati binari in un documento XML
–
Jürgen Assfalg
MTOM è anch’essa una Working Draft della
W3C
JMS e Web services nello sviluppo di architetture EDA e SOA
51
L’invio di un documento come allegato è
conveniente
–
dimensione del documento non influisce su
quella del messaggio SOAP: i tempi di creazione
e parsing sono pressoché costanti con
l’aumentare della dimensione del documento
–
il documento non deve essere codificato (come
avviene invece con Base64 nel corpo)
Tuttavia la non compatibilità degli standard
SwA e WS-Attachments può limitare
l’interoperabilità
Jürgen Assfalg
JMS e Web services nello sviluppo di architetture EDA e SOA
52
●
Conformità
–
WSDL delle interfacce
–
messaggi SOAP
–
conforme con standards SwA e WS-Attachments
●
●
●
servizio sviluppato con Axis opera in modo
trasparente con entrambi gli standard
dalla interfaccia Java di un servizio che riceve
allegati, Axis non riesce a generare automaticamente
una descrizione WSDL corretta del servizio
Non conformità
–
Jürgen Assfalg
interoperabilità secondo “WS-I Basic Profile 1.1”
JMS e Web services nello sviluppo di architetture EDA e SOA
53
Applicazioni aziendali, o anche sistemi
informativi, oppure ancora elaborazione dati
[M.Fowler, PoEA]
–
–
–
–
Jürgen Assfalg
Grandi quantità di dati persistenti
Accesso concorrente da parte di più utenti
Numerose maschere per immissione dati
Spesso sono integrate con altre applicazioni
JMS e Web services nello sviluppo di architetture EDA e SOA
54
In molti casi le applicazioni nascono per
soddisfare ben precise necessità di
automazione di singole unità di
un'organizzazione (dipartimenti), ovvero
hanno lo scopo di replicare sul calcolatore
consolidate procedure manuali
Jürgen Assfalg
JMS e Web services nello sviluppo di architetture EDA e SOA
55
In questo scenario le applicazioni
rappresentano lo strumento attraverso il
quale si eseguono tutte le attività associate
alla diverse fasi lungo cui si sviluppa una
determinata procedura.
Poiché tali applicazioni affrontano in profondità
un determinato problema, si dice che hanno
natura “verticale”.
Jürgen Assfalg
JMS e Web services nello sviluppo di architetture EDA e SOA
56
Evoluzione delle architetture
–
monolitiche
incorporano tutte le routine per la gestione e la
manipolazione dei dati
non offrono altre “aperture” se non l'interfaccia utente
Jürgen Assfalg
–
57
JMS e Web services nello sviluppo di architetture EDA e SOA
client/server, o a 2 livelli
●
●
client: presentazione
server: sorgente dati (DBMS)
Client
GUI
ClientBusiness logic
GUI
Database logic
Business logic
Database
Server
Database logic
SQL
Jürgen Assfalg
JMS e Web services nello sviluppo di architetture EDA e SOA
58
Vantaggi
–
architettura semplice
Svantaggi
–
ridotta scalabilità
●
–
difficoltà di manutenzione
●
●
Jürgen Assfalg
richiede elevata larghezza di banda
logica applicativa distribuita (fat client)
logica applicativa nel DBMS (stored procedures)
JMS e Web services nello sviluppo di architetture EDA e SOA
59
Quando la complessità della logica applicativa
(regole, validazione, calcoli) è cresciuta, si
sono identificati 3 livelli:
–
Presentazione
dei dati all'utente, ma anche ad un programma
–
Dominio
incorpora la logica applicativa
–
Sorgente dati
gestisce la persistenza dei dati
Jürgen Assfalg
JMS e Web services nello sviluppo di architetture EDA e SOA
60
Client
Middle-tier
server
GUI
Database
Business logic
Client
Database logic
Server
GUI
RPC, DCOM, …
Jürgen Assfalg
SQL
JMS e Web services nello sviluppo di architetture EDA e SOA
61
Solo lo sviluppo del web, e quindi la necessità
di evitare la replicazione della logica di
dominio in diverse interfacce, ha fatto
decollare lo sviluppo delle architetture a 3 (o
più) livelli
In generale, si possono concepire applicazioni
a N livelli. Tuttavia, le architetture a 2 o 3
livelli coprono la maggior parte delle
applicazioni
Jürgen Assfalg
JMS e Web services nello sviluppo di architetture EDA e SOA
62
Componenti in esecuzione su differenti nodi in
maniera concorrente
Cooperazione tra i componenti per lo
svolgimento di compiti complessi
Vantaggi:
–
riusabilità dei componenti
–
scalabilità del sistema (load balancing)
–
condivisione di risorse
–
alta disponibilità (fail-over)
Jürgen Assfalg
JMS e Web services nello sviluppo di architetture EDA e SOA
63
La realizzazione di un sistema di applicazioni
distribuite richiede un approccio differente da
quello utilizzato per i sistemi centralizzati, in
termini sia di architetture che di tecnologie
Jürgen Assfalg
JMS e Web services nello sviluppo di architetture EDA e SOA
64
Protocolli e ed architetture client/server
● TCP/IP
● RPC
Ambienti ad oggetti distribuiti
da classi a componenti
●
●
●
●
RMI
DCOM
CORBA
EJB
Jürgen Assfalg
JMS e Web services nello sviluppo di architetture EDA e SOA
65
Oggetti/componenti distribuiti presentano
(anche solo per considerazioni relative alle
prestazioni)
●
una granularità meno fine rispetto alle classi
●
un'interfaccia definita e relativamente stabile
(non controllando sempre sia il client che il server)
Limitati ad una singola organizzazione (o
addirittura ad una sua sede) a causa di
●
prestazioni
●
sicurezza
Jürgen Assfalg
JMS e Web services nello sviluppo di architetture EDA e SOA
66
Nasce dalla necessità di
●
consolidare e aggregare il patrimonio informativo
(es. data mining, data warehousing, ...)
●
integrare le procedure
(es. cooperazione applicativa, ...)
●
adeguare i sistemi informativi alle misure
organizzative in atto
(es. fusioni, riorganizzazioni, ...)
●
maggiore competitività
(es. riduzione dei tempi, ...)
Jürgen Assfalg
JMS e Web services nello sviluppo di architetture EDA e SOA
67
Diversi scenari:
–
Business to consumer (B2C)
utilizzata da soggetti esterni all'organizzazione
es. commercio elettronico, prenotazione voli, ...
–
Business to business (B2B)
scambio dati senza intervento umano
es. gestione magazzino, pagamento elettronico
–
Back-end
eseguita periodicamente senza input diretto
es. telecomunicazioni, invio newletter
Jürgen Assfalg
JMS e Web services nello sviluppo di architetture EDA e SOA
68
Integrazione di applicazioni (Enterprise
Application Integration, o EAI) e sistemi
distribuiti sono tematiche diverse, che
tuttavia si possono incontrare
Jürgen Assfalg
JMS e Web services nello sviluppo di architetture EDA e SOA
69
Operazione complessa, che coinvolge ogni
livello di un sistema informativo
●
l'integrazione dei processi che realizzano le
logiche aziendali deve guidare l'integrazione delle
applicazioni
le applicazioni devono agevolare lo scambio e
l'elaborazione delle informazioni necessarie allo
svolgimento dei processi
●
punto di partenza è quindi un'attività di BPE/BPR
modellazione e gestione dei processi (combinazione di
attività, procedure, organizzazioni, informazioni richieste
e prodotte, strumenti richiesti in ogni fase
Jürgen Assfalg
JMS e Web services nello sviluppo di architetture EDA e SOA
70
●
A livello delle applicazioni, lo scopo è quello
di mettere insieme dati e funzionalità di
un'applicazione con quelli di un'altra.
●
Per consentire l'integrazione delle
applicazioni è necessario realizzare, oltre a
quella dei processi, l'integrazione dei dati
Identificazione, catalogazione e modelllazione dei
dati, quindi possono essere condivisi/distribuiti
tra DBMS
Jürgen Assfalg
●
JMS e Web services nello sviluppo di architetture EDA e SOA
71
Per raggiungere una completa integrazione
dei dati è necessario adottare degli
standards, che promuovano la condivisione e
la distribuzione dell'informazione
COM+/DCOM, CORBA, EDI, JavaRMI, XML
●
Per completare l'integrazione dei sistemi,
devono essere integrate le piattaforme,
ovvero le architetture, l'hardware, il software
e l'infrastruttura telematica
Processi e strumenti che consentano ai sistemi di
comunicare in maniera ottimale e sicura
Jürgen Assfalg
JMS e Web services nello sviluppo di architetture EDA e SOA
72
Principali architetture per la realizzazione di
sistemi distribuiti:
–
Service-Oriented Architecture (SOA)
–
Event-Driven Architecture (EDA)
Le architetture SOA ed EDA definiscono
–
Quali sono i componenti ed i loro ruoli
–
Le interfacce presentate da ogni componente
–
Le modalità di interazione
Jürgen Assfalg
JMS e Web services nello sviluppo di architetture EDA e SOA
73
SOA è un approccio alla progettazione
client/server che prevede un accoppiamento
lasco fra fornitori di servizi (service providers)
e consumatori di servizi (service consumers).
–
come anche per classi e componenti, l'obiettivo
di SOA è il riuso di software, ad un livello di
granularità ancora meno fine (riducendo quindi
ulteriormente le dipendenze), ovvero ad un
livello di astrazione più alto.
–
netta separazione fra l'interfaccia e
l'implementazione del servizio
Jürgen Assfalg
JMS e Web services nello sviluppo di architetture EDA e SOA
74
–
l'interfaccia definisce un contratto tra fornitore e
consumatore, e deve essere pubblica e
vincolante per le parti
definita a livello sintattico tramite un apposito linguaggio
(IDL nel caso di Corba, WSDL nel caso di Web
Services, ...)
progettazione per interfacce non è un concetto nuovo
(può essere efficacemente applicato anche alla
programmazione OO, ma nel momento in cui si
travalicano i limiti di un'applicazione—o addirittura di
un'organizzazione—esso è molto più vincolante
–
Jürgen Assfalg
l'implementazione realizza la logica applicativa
(“business logic”), seguendo un approccio di tipo
black-box
JMS e Web services nello sviluppo di architetture EDA e SOA
75
Nella pratica i servizi possono essere
implementati:
●
sviluppando un modulo ex-novo
●
incapsulando un modulo software preesistente
v. pattern Adapter
●
componendo una serie di moduli preesistenti
v. pattern Facade
gli ultimi due consentono riuso di componenti
Jürgen Assfalg
JMS e Web services nello sviluppo di architetture EDA e SOA
76
●
Ruoli: consumatore, fornitore e registro
–
Fornitore espone una interfaccia documentata
–
Interazioni sono tipicamente di tipo “request / reply”
–
Interazioni 1:1 tra fornitore e consumatore
●
delega dei ruoli
(un fornitore può essere a sua volta un consumatore)
●
utile un maggiore disaccoppiamento client/server
find-bind-invoke (o Client-Dispatcher-Server)
Jürgen Assfalg
JMS e Web services nello sviluppo di architetture EDA e SOA
77
Vantaggi:
–
sviluppo incrementale di un sistema informativo
–
riuso di componenti esistenti
–
sviluppo a basso costo di nuove applicazioni (se
esistono già i servizi è sufficiente comporli)
–
chiarezza della topologia dell'applicazione (la
trasparenza è imposta ad un livello più basso)
Jürgen Assfalg
JMS e Web services nello sviluppo di architetture EDA e SOA
78
Limitazioni
–
maggiore complessità (progetto interfaccia,
stub/skeleton, ... => non è vero che SOA è
ingegneria del software semplice)
–
altri falsi miti: indipendenza dalla tecnologia (per
i singoli servizi, ma non per l'infrastruttura!) o dal
venditore
–
non ha senso per applicazioni in ambito locale
che hanno vita breve
–
non è raccomandato per applicazioni che
richiedono un'interazione asincrona ed
unidirezionale
Jürgen Assfalg
JMS e Web services nello sviluppo di architetture EDA e SOA
79
Web Services sono lo strumento oggi più usato
per la realizzazione di sistemi distribuiti con
architettura SOA
Web Services applicano i principi SOA:
–
impongono Web Services Description Language
(WSDL) per la definizione delle interfacce
–
impongono SOAP come standard per il formato
dei messaggi
–
lasciano libertà nella scelta dei
protocolli di comunicazione:
HTTP, SMTP, FTP, etc.
Jürgen Assfalg
JMS e Web services nello sviluppo di architetture EDA e SOA
80
–
Web Services rappresentano la soluzione che
garantisce maggiore interoperabilità, e
comportano oneri di gestione ridotti
–
esistono implementazioni per numerosi linguaggi
e piattaforme, e quindi consentotno il riuso di
componenti già esistenti
–
comunque, la relazione tra SOA e Web Services
non è biunivoca
WS rappresentano una possibile tecnologia per SOA,
ma non sono l'unica; viceversa, possono essere
utilizzati per implementare anche architetture diverse
–
Jürgen Assfalg
i WS hanno avuto e avranno ancora un ruolo
non indifferente nella diffusione di SOA
JMS e Web services nello sviluppo di architetture EDA e SOA
81
Publish & Subscribe
– pubblicatore rileva cambiamenti di stato
– notifica i
cambiamenti
direttamente
ai sottoscrittori
Jürgen Assfalg
JMS e Web services nello sviluppo di architetture EDA e SOA
82
Message Oriented Middleware (MOM)
●
consente la cooperazione applicativa
secondo un modello EDA
●
funzionalità di un Message Server
–
scambio dei messaggi
–
persistenza (database o file testuali)
–
affidabilità del trasferimento
–
filtraggio dei messaggi per ottimizzare la
distribuzione
Jürgen Assfalg
JMS e Web services nello sviluppo di architetture EDA e SOA
84
–
richiede standardizzazione dei messaggi
–
realizza collegamenti 1:m (senza binding)
–
il modulo sorgente (source) non fa (non può
fare) alcuna ipotesi sulla destinazione (sink)
–
il routing è determinato dalla destinazione e dal
contenuto del messaggio
–
per implementare nuove logiche è sufficiente
aggiungere/rimuovere sorgenti e/o destinazioni
Jürgen Assfalg
JMS e Web services nello sviluppo di architetture EDA e SOA
SOA
●
●
●
●
●
●
●
●
●
●
Interazione req[/res]
(bidirezionale)
sincrona
tipico, non necessario
transazioni
un nodo fa una richiesta per
chiedere un'elaborazione
il nodo chiamante conosce il
chiamante (comunicazione
diretta) e dipende da questo
relazione 1:1
routing gestito dal client
flusso lineare in una gerarchia di
moduli
interrogazione
transazione composta
Jürgen Assfalg
85
EDA
●
●
●
●
●
●
●
●
●
●
pubblicazione evento
(unidirezionale)
asincrona
elaborazioni che si sviluppano
nel tempo
nodo genera un evento a seguito
completamento elaborazione
il nodo che genera evento non
conosce chi lo processerà
(comunicazione indiretta)
relazione m:n
routing determinato dal
destinatario
flussi asincroni e paralleli
aggiornamento
elaborazione multi-fase
JMS e Web services nello sviluppo di architetture EDA e SOA
86
Jürgen Assfalg
89
JMS e Web services nello sviluppo di architetture EDA e SOA
Topic publisher
ctx = new InitialContext();
Topic topic = (Topic) ctx.lookup( "topic" );
TopicConnectionFactory tcfactory = (TopicConnectionFactory)
ctx.lookup( "tcf" );
ctx.close();
TopicConnection tconn = tcfactory.createTopicConnection();
TopicSession tsession = tconn.createTopicSession( true, 0 );
TopicPublisher tpublisher =
tsession.createPublisher( topic );
TextMessage m = tsession.createTextMessage();
for ( int i = 0; i < N; i++ ) {
m.setText( "Messaggio " + i );
tpublisher.publish( m );
}
tsession.commit();
Jürgen Assfalg
JMS e Web services nello sviluppo di architetture EDA e SOA
90
TopicSession tsession =
Topic subscriber
tconn.createTopicSession(false,
(asincrono)
javax.jms.Session.AUTO_ACKNOWLEDGE);
TopicSubscriber tsubscriber =
tsession.createSubscriber( topic );
tsubscriber.setMessageListener( new MsgListener() );
tconn.start();
...
tconn.close();
public class MsgListener implements MessageListener {
...
public void onMessage( Message m ) {
try {
if ( m instanceof TextMessage )
System.out.println( ((TextMessage) m).getText() );
else if ( m instanceof ObjectMessage )
System.out.println(((ObjectMessage) m).getObject());
} catch (JMSException jE) {...}
... } }
Jürgen Assfalg
91
JMS e Web services nello sviluppo di architetture EDA e SOA
Queue sender
ctx = new InitialContext();
Queue queue = (Queue) ctx.lookup("queue");
QueueConnectionFactory qcfactory = (QueueConnectionFactory)
ctx.lookup( "qcf" );
ctx.close();
QueueConnection qconn = qcfactory.createQueueConnection();
QueueSession qsession = qconn.createQueueSession( true, 0 );
QueueSender qsender = qs.createSender( queue );
TextMessage m = qsession.createTextMessage();
for( int i = 0; i < N; i++ ) {
msg.setText( "Messaggio numero " + i );
qsender.send( m );
}
qsession.commit();
...
qconn.close();
Jürgen Assfalg
JMS e Web services nello sviluppo di architetture EDA e SOA
92
Queue receiver
(sincrono)
QueueConnection qconn = qcfactory.createQueueConnection();
QueueSession qsession = qconn.createQueueSession( true, 0 );
QueueReceiver qreceiver =
qsession.createReceiver( queue );
Message m;
qconn.start();
for( int i = 0; i < N; i++ ) {
m = qreceiver.receive();
if (msg instanceof TextMessage)
System.out.println( "Ricevuro: " +
((TextMessage) m).getText());
}
Jürgen Assfalg
93
JMS e Web services nello sviluppo di architetture EDA e SOA
Queue queue = (Queue) ctx.lookup("queue");
Topic topic = (Topic) ctx.lookup("topic");
ConnectionFactory cfactory =
(ConnectionFactory) ctx.lookup("cf");
ctx.close();
Topic publisher
Queue sender
Connection conn = cfactory.createConnection();
Session session = conn.createSession( true, 0 );
MessageProducer producer = session.createProducer( null );
TextMessage m = session.createTextMessage();
for( int i = 0; i < N; i++ ) {
m.setText( "Messaggio numero " + i );
producer.send( queue, m );
producer.send( topic, m );
}
session.commit();
Jürgen Assfalg
JMS e Web services nello sviluppo di architetture EDA e SOA
94
Messaggio
–
Header
destination, delivery mode, id, time stamp, expiration,
redelivered, prioriti, reply to, correlation id
–
Properties
consentono la defnizione di message selectors (filtri
definiti dal singolo client)
–
Payload
Jürgen Assfalg
JMS e Web services nello sviluppo di architetture EDA e SOA
95
Delivery mode
–
persistent (once-and-only-once)
–
non persistent (at-most-once)
Acknowledge
●
●
produttore: publish() / send() sono sincrone
consumatore
–
–
–
Jürgen Assfalg
AUTO_ACKNOWLEDGE
lo fa il sistema; non garantisce avvenuta elaborazione
DUPS_OK_ACNOWLEDGE
può ridurre costi
CLIENT_ACKNOWLEDGE (msg.acknowledge())
ricezioni batch
JMS e Web services nello sviluppo di architetture EDA e SOA
96
Durable subscriber
session.createDurableSubscriber(<topic>, <name>)
Temporary topics
replyTo
Persistenza
fr.dyade.aaa.util.NTransaction
Jürgen Assfalg
JMS e Web services nello sviluppo di architetture EDA e SOA
97
JORAM (http://joram.objectweb.org/)
–
Open Source
–
Conforme specifica JMS 1.1
–
Progetto attivo
–
Documentazione dettagliata
–
Supporta TCP, SOAP, JNDI, clustering
–
Strumenti di amministrazione
–
Dimensione massima del messaggio (12MB)
Jürgen Assfalg
JMS e Web services nello sviluppo di architetture EDA e SOA
98
Server
–
Connection manager service
–
TCP proxy service
–
JNDI service
<?xml version="1.0"?>
<config>
<property name=”Transaction” value=”fr.dyade.aaa.util.NullTransaction”/>
<server id="0" name="S0" hostname="localhost">
<service class="org.objectweb.joram.mom.proxies.ConnectionManager"
args=”root root”/>
<service class="org.objectweb.joram.mom.proxies.tcp.TcpProxyService"
args="16010"/>
<service class="fr.dyade.aaa.jndi2.server.JndiServer" args="16400"/>
</server>
</config>
Jürgen Assfalg
JMS e Web services nello sviluppo di architetture EDA e SOA
99
Client
file di configurazione (jndi.properties)
java.naming.factory.initial
fr.dyade.aaa.jndi2.client.NamingContextFactory
java.naming.factory.host
localhost
java.naming.factory.port
16400
Jürgen Assfalg
JMS e Web services nello sviluppo di architetture EDA e SOA
100
jAMT
JORAM Administration & Monitoring Tool
–
server
configurazione, arresto
–
connection factories
creazione, eliminazione
–
destinations
creazione, configurazione, monitoraggio, eliminazione
–
utenti
creazione, eliminazione, cambio password
Jürgen Assfalg
JMS e Web services nello sviluppo di architetture EDA e SOA
101
Jürgen Assfalg
JMS e Web services nello sviluppo di architetture EDA e SOA
102
Altre caratteristiche interessanti:
–
possibilità di usare SOAP
–
API di amministrazione
Jürgen Assfalg
JMS e Web services nello sviluppo di architetture EDA e SOA
103
AdminModule.connect("root", "root", 60);
Queue queue = (Queue) Queue.create("queue");
Topic topic = (Topic) Topic.create("topic");
User user = User.create("anonymous", "anonymous");
queue.setFreeReading();
topic.setFreeReading();
queue.setFreeWriting();
topic.setFreeWriting();
javax.jms.ConnectionFactory cf =
TcpConnectionFactory.create("localhost", 16010);
javax.jms.QueueConnectionFactory qcf =
QueueTcpConnectionFactory.create("localhost", 16010);
javax.jms.TopicConnectionFactory tcf =
TopicTcpConnectionFactory.create("localhost", 16010);
javax.naming.Context jndiCtx = new javax.naming.InitialContext();
jndiCtx.bind("cf", cf);
jndiCtx.bind("qcf", qcf);
jndiCtx.bind("tcf", tcf);
jndiCtx.bind("queue", queue);
jndiCtx.bind("topic", topic);
jndiCtx.close();
AdminModule.disconnect();
Jürgen Assfalg
JMS e Web services nello sviluppo di architetture EDA e SOA
104
Stato attuale
–
Ricezione istanza: carta/fax
–
Protocollo: applicazione verticale distribuita, con
architettura a 2/3 livelli (Web ASP.NET)
–
Determinazione percorso: cartine stradali
–
Verifica vincoli: uffici competenti
–
Calcolo degli oneri: applicazione monolitica
(programma Access)
–
Nulla-osta altri Enti: fax
–
Trasmissione autorizzazione: carta/fax
Jürgen Assfalg
JMS e Web services nello sviluppo di architetture EDA e SOA
105
Scenario per il (prossimo) futuro
–
Presentazione istanza tramite
carta/fax/portale/PEC
–
Gestione informatizzata dei procedimenti
avvio e avanzamento iter, interrogazione stato
–
Applicazione verticale per trasporti eccezionali
gestione dati, calcolo percorso, verifica vincoli
–
Integrazione con s.i. del catasto strade
grafo stradale, pertinenze, ...
Jürgen Assfalg
JMS e Web services nello sviluppo di architetture EDA e SOA
106
Ipotesi di lavoro
–
protocollazione
la necessità di restituire un numero di protocollo
all'utente che presenta l'istanza allo sportello
suggerisce la realizzazione del registro di protocollo
come servizio sincrono
la registrazione è realizzata tramite Web Services
–
collegamento gateway PEC
periodicamente gateway si collega, trasmettendo i
messaggi di PEC da protocollare e leggendo le
registrazioni di protocollo dei messaggi già protocollati
non richiedendo una risposta immediata per i messaggi
trasmessi, è indicato un approccio asincrono
Jürgen Assfalg
JMS e Web services nello sviluppo di architetture EDA e SOA
107
la molteplicità delle elaborazioni che possono
essere associate ad un documento protocollato
suggeriscono un approccio basato su messaggi
–
avvio del procedimento
i messaggi vengono instradati verso il sistema integrato
per la gestione dei documenti
–
archiviazione ottica
i tempi lunghi associati a quest'operazione, così come
la necessità di usare con giudizio le risorse di rete
conferma la scelta di un approccio asincrono basato
su messaggi
Jürgen Assfalg
JMS e Web services nello sviluppo di architetture EDA e SOA
108
JMS
2
WS
<<Queue>>
da protocollare
<<Topic>>
protocollati
send
receive
Gateway
PEC
Jürgen Assfalg
notify
<<WS>>
Protocollo
publish
notify
Avvio
procedimento
request/
response
receive
Archiviazione
ottica
request/
response
altra
applicazione
JMS e Web services nello sviluppo di architetture EDA e SOA
●
OASIS (http://www.oasis-open.org/)
●
Presentazione su Architectural Patterns
(http://viplab.dsi.unifi.it/~assfalg/documenti/apea.pdf)
●
E.Gamma, R.Helm, R.Johnson, J.Vlissides, Design
Patterns, Addison Wesley, 1994
M.Fowler, Patterns of Enterprise Application
Architecture, Addison Wesley, 2003
F.Buschmann et al., Pattern-Oriented Software
Architecture: A System of Patterns, J. Wiley, 1996
D. Schmidt et al., Pattern-Oriented Software
Architecture: Patterns for Concurrent and
Networked Objects, J. Wiley, 2000
●
●
●
Jürgen Assfalg
JMS e Web services nello sviluppo di architetture EDA e SOA
109
110