Come la comunicazione tra moduli è evoluta per portarci a quello che oggi è la Service Oriented Architecture. Quali approcci hanno funzionato e quali no. Un esempio di architettura SOA. Come si implementano i web services di tipo REST con Jersey.
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Protocolli di comunicazione tra moduli e SOA
1. Protocolli di comunicazione tra
moduli e SOA
Vitalij Zadneprovskij
Incontro JUG Roma e
JBUG Roma
28/11/13
1 / 14
2. Outline
●
Quando e perché realizzare architetture SOA
●
Progettazione: component based development
●
Problema: come far comunicare moduli diversi?
●
Impariamo dagli errori: CORBA
●
Primo caso di successo: XML, SOAP e WSDL
●
Come si fa oggi: JSON, REST e WADL
●
L'implementazione di riferimento: Jersey
28/11/13
2 / 14
3. Service Oriented Architecture
●
●
●
Software di grandi dimensioni,
non ha senso per piccoli
programmi
Moduli eterogenei che
comunicano via web services
Permette basso
accoppiamento
●
Favorisce l'autonomia
●
Problema allineamento dati
●
Non sostituisce buona
progettazione
28/11/13
3 / 14
4. Perché realizziamo moduli SOA?
●
●
●
●
●
Evitare unico applicativo
enorme
Prevedere impatto modifiche
Molte “pezze” aggiunte nel
tempo aumentano
l'accoppiamento del codice
Si ereditano applicativi
eterogenei
Opzioni make, buy ed outsource
preoccupandosi meno di come
integrare con ciò che già si ha
28/11/13
4 / 14
5. Component based development
Un componente è definito come “a nontrivial, nearly
independent and replaceable part of a system that
fulfills a clear function in the context of a
well-defined architecture” da Brown, Walnau 1996
Fonte: http://healinginnovation.com
28/11/13
5 / 14
6. Come far comunicare i componenti?
●
●
●
Protocolli proprietari come
Microsoft Distributed
Component Object Model
ed Java Remote Method
Invocation
Incompatibilità tra i vari
protocolli
Molto software su
mainframe, uso di Java
Connector Architecture
Fonte:
Sito Blodnick, Fazio & Associates PC
28/11/13
6 / 14
7. Common Object Request Broker
Architecture
●
●
●
●
Broker è un software mediatore
che permette di fare chiamate
remote serializzando i dati
Uso di Interface Definition
Language
Problema del mapping del
linguaggio usato in IDL, difficile
da fare con alcuni linguaggi
come il C++ ed il C
Problemi di compatibilità delle
implementazioni dei vari ORB
proprietari
28/11/13
Fonte: Bubblews.com
7 / 14
8. Extensible Markup Language,
Simple Object Access Protocol
●
●
●
●
Progettato nel 1998 da
Microsoft
XML è diventato standard
del World Wide Web
Consortium comprensibile
da umani e computer
Possibilità sottolinguaggi
definiti da documenti XML
Schema Definition
WSDL è simile a IDL del
CORBA
28/11/13
8 / 14
9. Comunicazione asincrona
Java Message Service ed Advanced Message Queiung Protocol
●
Strutture dati che mantengono le
richieste prima che vengano
elaborate
●
Coda e topic
●
Minore accoppiamento
●
Possibile persistenza
●
AMQP è standard OASIS
●
Aggiunta e prelievo transazionali
●
●
Windows Azure Service Bus,
sistema cloud di Microsoft
Sia RabbitMQ che ActiveMQ
supportano AMQP
28/11/13
Fonte: Oracle Java EE 6 Tutorial
9 / 14
10. Esempio architettura SOA
Autorizzazione cambio gomme per automobili in leasing
Modulo autorizzazioni
Modulo anagrafico
Contabilizzazione
autorizzazioni
Anagrafe
Gommisti
Motore regole
autorizzazione
Conto deposito
Richiesta autorizzazione
Anagrafica
Clienti
Async
Orchestratore
Contratti di
leasing
Prezzario
Censimento
pneumatici
Parco auto
Modulo pneumatici
28/11/13
10 / 14
11. Representational State Transfer,
JavaScript Object Notation
●
●
●
●
●
Risorsa identificata da URI
univoco
{
"id": 1,
Operazioni: metodi HTTP
1.1: GET, POST, PUT,
DELETE, etc.
"name": "Foo",
"price": 123,
"tags": [ "Bar", "Eek" ],
JSON compatto rispetto a
XML
"stock": {
"warehouse": 300,
JSON Schema per
validazione parametri
Ottimizzato per client con
framework MVC Javascript
28/11/13
"retail": 20
}
}
11 / 14
12. JSR 311 + 339: REST Web Services
●
●
●
●
●
@Path: percorso di una
risorsa
@GET, @POST: operazioni
su risorse
@Path("widgets")
@Produces("application/widgets+xml")
public class WidgetsResource {
@GET
public Widgets getAsXML() {...}
@Produces: tipo di contenuto
che viene prodotto
@GET
@Produces("text/html")
public String getAsHtml() {...}
@Consumes: tipo di contenuto
che si è in grado di gestire
@POST
@Consumes("application/widgets+xml
")
Esempio di URL:
http://nome_host/nome_modulo/rest/nome_
risorsa/id_risorsa
28/11/13
public void addWidget(Widget
widget) {...}
}
12 / 14
13. Jersey: reference implementation
●
●
●
●
Estende la servlet, quindi gira
anche su servlet container
come Tomcat e Jetty
Espone application.wadl che
può essere usato per generare
automaticamente i client
Esiste archetipo Maven per
creare applicativo REST
funzionante
Per creare client, usare plugin
di Maven di wadl2java
28/11/13
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_
5.xsd">
<servlet>
<servlet-name>Jersey Web Application</servlet-name>
<servlet-class>
com.sun.jersey.spi.container.servlet.ServletContain
er
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Jersey Web Application</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
</web-app>
13 / 14
14. Ulteriori sviluppi
●
Service bus
●
●
Integration patterns
●
●
Continous integration
●
●
●
Transazioni
Comunicazione
sincrona ed asincrona
Sicurezza dei dati
●
BPEL
Modularità o
prestazioni
●
BPMN
●
Interazione col DWH
●
Web services esterni
Stati consistenti
28/11/13
14 / 14