protocolli di comunicazione tra moduli e soa
DESCRIPTION
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.TRANSCRIPT
Protocolli di comunicazione tra moduli e SOA
Vitalij Zadneprovskij
Incontro JUG Roma e JBUG Roma
28/11/13 1 / 14
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
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
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
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
28/11/13 5 / 14
Fonte: http://healinginnovation.com
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
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
Fonte: Bubblews.com
28/11/13 7 / 14
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
Comunicazione asincronaJava 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 AMQPFonte: Oracle Java EE 6 Tutorial
28/11/13 9 / 14
Esempio architettura SOAAutorizzazione cambio gomme per automobili in leasing
Orchestratore
Richiesta autorizzazione
AnagraficaClienti
Parco auto
Contratti dileasing
Censimentopneumatici
Prezzario
Conto deposito
Motore regoleautorizzazione
Contabilizzazioneautorizzazioni
Async
AnagrafeGommisti
28/11/13 10 / 14
Modulo anagrafico
Modulo pneumatici
Modulo autorizzazioni
Representational State Transfer,JavaScript Object Notation
● Risorsa identificata da URI univoco
● Operazioni: metodi HTTP 1.1: GET, POST, PUT, DELETE, etc.
● JSON compatto rispetto a XML
● JSON Schema per validazione parametri
● Ottimizzato per client con framework MVC Javascript
{
"id": 1,
"name": "Foo",
"price": 123,
"tags": [ "Bar", "Eek" ],
"stock": {
"warehouse": 300,
"retail": 20
}
}
28/11/13 11 / 14
JSR 311 + 339: REST Web Services
● @Path: percorso di una risorsa
● @GET, @POST: operazioni su risorse
● @Produces: tipo di contenuto che viene prodotto
● @Consumes: tipo di contenuto che si è in grado di gestire
● Esempio di URL:http://nome_host/nome_modulo/rest/nome_risorsa/id_risorsa
@Path("widgets")
@Produces("application/widgets+xml")
public class WidgetsResource {
@GET
public Widgets getAsXML() {...}
@GET
@Produces("text/html")
public String getAsHtml() {...}
@POST
@Consumes("application/widgets+xml")
public void addWidget(Widget widget) {...}
}
28/11/13 12 / 14
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
<?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.ServletContainer
</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>
28/11/13 13 / 14
Ulteriori sviluppi
● Service bus● Integration patterns● Continous integration● Sicurezza dei dati● Modularità o
prestazioni● Stati consistenti
● Transazioni● Comunicazione
sincrona ed asincrona● BPEL● BPMN● Interazione col DWH● Web services esterni
28/11/13 14 / 14