Loading...
Flash Player 9 (or above) is needed to view slideshows. We have detected that you do not have it on your computer.To install it, go here
 
Post to Twitter Post to Twitter
Myspace Hi5 Friendster Xanga LiveJournal Facebook Blogger Tagged Typepad Freewebs BlackPlanet gigya icons
SlideShare is now available on LinkedIn. Add it to your LinkedIn profile.

Spring & Mule

From andrea.bozzoni, 11 months ago Add as contact

846 views | 0 comments | 0 favorites | 2 downloads | 0 embeds (Stats)

Categories

Business & Mgmt

Groups/Events

Embed in your blog options close
Embed (wordpress.com) Exclude related slideshows Embed in your blog

More Info

This slideshow is Public
Total Views: 846 on Slideshare: 846 from embeds: 0
Flagged as inappropriate Flag as inappropriate

Flag as inappropriate

Select your reason for flagging this slideshow as inappropriate.

If needed, use the feedback form to let us know more details.

Slideshow Transcript

  1. Slide 1: Spring & Mule Andrea Bozzoni andrea.bozzoni@gmail.com Andrea Bozzoni, Spring&Mule 1 Cagliari, 14 Luglio 2007
  2. Slide 2: Contenuti 1 - Panoramica su un ESB 2 - Introduzione a Mule 3 - Integrazione tra Spring & Mule 3.1 - Spring come component Factory 3.2 - Configurare Mule in un constesto di Spring 3.3 - Configurare un contesto Spring attraverso la configurazione di Mule 3.4 - Gestione degli eventi tra Mule e Spring Andrea Bozzoni, Spring&Mule 2 Cagliari, 14 Luglio 2007
  3. Slide 3: Panoramica su un ESB (Enterprise Service Bus) Cos’è • ESB è un’architettura che consente l’integrazione di applicazioni di business attraverso l’utilizzo di un bus di messaggistica condiviso Perchè ne abbiamo bisogno • La maggior parte dei progetti oggi sono basati sull’integrazione di applicazioni eterogenee SOA • ESB supporta le regole della Service Orientated Architecture • Utilizzo dei servizi attraverso l’uso di interfacce indipendenti dall’implementazione • Uitlizzo di protocolli di comunicazione che consentono l’iteroperatibilità e la trasparenza della locazione fisica dei servizi • Definizione di servizi che espongono funzioni di business nuove o già esistenti La novità? • Apparentemente non c’è nulla di nuovo! Soluzioni di integrazione senza ESB esistono e sono funzionanti! Andrea Bozzoni, Spring&Mule 3 Cagliari, 14 Luglio 2007
  4. Slide 4: Panoramica su un ESB (Enterprise Service Bus) • Basso accoppiamento • Le applicazioni dialogano attraverso un bus comune basato su un sistema di messagistica • Event-Driven • Le applicazioni generano eventi che avviano dei processi nell’ESB • Highly Distributed • Un ESB può essere distribuito su più nodi • Security/Authorization • Supportano il concetto di autenticazione e autorizzazione • Abstract Endpoints • Rappresentano dei punti d’ingresso attraverso i quali le applicazioni posso spedire e ricevere messaggi nel o dal sistema • Routing intelligente • Ogni evento in ingresso o in uscita può essere distribuito secondo regole configurabili • Trasformazione dei dati (in ingresso e uscita) • I dati in ingresso e in uscita possono essere trasformati per gestire l’impedenza fra le applicazioni • Multi-Protocol Message Bus • Le applicazioni possono accedere attraverso diversi protocolli (HTTP, SOAP,JMS, File, Email) • Light Weight Andrea Bozzoni, Spring&Mule 4 Cagliari, 14 Luglio 2007
  5. Slide 5: Introduzione a MULE • Piattaforma di messaggistica basata sul concetto di Enterprise Sevice Bus • Supporta diverse topologie oltre l’ESB • Pipeline • Client Server • Hub&Spoke • Peer2Peer • Utilizza un modello di tipo SEDA altamente scalabile • Service container (Object Broker) • Supporta qualsiasi tipo di componenti (UMO): POJO, EJB, Spring beans • Integrabile con diversi conteiners • Spring • Pico Cntainer • HiveMind • Plexus Andrea Bozzoni, Spring&Mule 5 Cagliari, 14 Luglio 2007
  6. Slide 6: Introduzione a MULE • Supporta molti protocolli di messagistica e di trasporto • Gestisce parecchie tipologie di routing degli eventi • Trasforma I dati sia in ingresso che in uscita • Supporta un sistema di autenticazione/autorizzazione (attraverso Spring/Acegi) • E’ Leggero ed embeddable • Utilizzabile in diversi contesti e in diverse modalità:JAR, WAR, EAR, RAR) • Instrumentabile attraverso JMX (Consolle di gestione e visualizzazione del suo stato) • E’ adattativo rispetto alla tecnologia che lo circonda invece che imporre la sua Andrea Bozzoni, Spring&Mule 6 Cagliari, 14 Luglio 2007
  7. Slide 7: Introduzione a MULE Andrea Bozzoni, Spring&Mule 7 Cagliari, 14 Luglio 2007
  8. Slide 8: Introduzione a MULE Andrea Bozzoni, Spring&Mule 8 Cagliari, 14 Luglio 2007
  9. Slide 9: Integrazione tra Spring e Mule • Spring come component Factory • Configurare Mule in un constesto di Spring • Configurare un contesto Spring attraverso la configurazione di Mule • Gestione degli eventi tra Mule e Spring Andrea Bozzoni, Spring&Mule 9 Cagliari, 14 Luglio 2007
  10. Slide 10: Spring come component factory Questa è la prima modalità d’integrazione tra Mule e Spring. In questo caso il Mule manager viene configurato attraverso il suo formato di configurazione, specificando il riferimento ad un Application Context è possibile utilizzare i beans in esso definiti ed utilizzarli come componenti di Mule. Per questo è sufficiente indicare a Mule che deve utilizzare un ApplicationContext esterno <mule-configuration id=\"Default\" version=\"1.0\"> <description>Spring</description> <container-context className=\"org.mule.extras.spring.SpringContainerContext\"> <properties> <property name=\"configFile\" value=\"conf/springSimpleApplicationContext.xml\"/> </properties> </container-context> ... SpringContainerContext è uno Spring Context che può esporre degli spring managed components per l’utilizzo in Mule Andrea Bozzoni, Spring&Mule 10 Cagliari, 14 Luglio 2007
  11. Slide 11: Spring come component factory La differenza nella dichiarazione di un UMO nel file di configurazione di Mule senza l’utilizzo di un container esterno  <mule-descriptor name=\"service\" class=\"it.bozzoni.spring.services.BusinessServicesImpl\"> <inbound-router> ... attraverso l’utilizzo di un container esterno come Spring  <mule-descriptor name=\"service\" implementation=\"businessService\"> <inbound-router> ... Andrea Bozzoni, Spring&Mule 11 Cagliari, 14 Luglio 2007
  12. Slide 12: Spring come component factory L’attributo id del bean di Spring deve corrispondere all’attributo implementation della definizione del componente in Mule <bean id=\"auditService\" class=\"it.bozzoni.spring.audit.AuditServicesImpl\"> </bean> <bean id=\"businessService\" class=\"it.bozzoni.spring.services.BusinessServicesImpl\" scope=\"prototype\"> <property name=\"auditService\"> <ref local=\"auditService\" /> </property> </bean> ... <mule-descriptor name=\"service\" implementation=\"businessService\"> <inbound-router> <endpoint address=\"vm://myComponent\" synchronous=\"true\"/> </inbound-router> </mule-descriptor> Andrea Bozzoni, Spring&Mule 12 Cagliari, 14 Luglio 2007
  13. Slide 13: Spring come component factory E’ possibile definire nell’application context un qualsiasi componente di Mule. In questo caso abbiamo dichiarato un transformer che può essere utilizzato dagli endpoints <bean id=\"string2Request\" class=\"it.bozzoni.mule.transformers.String2Request\"> </bean> ... <transformers> <transformer name=\"String2Request\" ref=\"string2Request\"/> </transformers> ... <mule-descriptor name=\"service2\" implementation=\"businessService\"> <inbound-router> <endpoint address=\"vm://myComponent2\" remoteSync=\"true\" transformers=\"String2Request\"/> </inbound-router> ... Andrea Bozzoni, Spring&Mule 13 Cagliari, 14 Luglio 2007
  14. Slide 14: Spring come component factory Esempio di application context in cui sono dichiarati due UMO e tre transformers. Andrea Bozzoni, Spring&Mule 14 Cagliari, 14 Luglio 2007
  15. Slide 15: Spring come component factory Il Mule manager viene inizializzato indicando dov’è il file di configurazione con due semplici istruzioni MuleXmlConfigurationBuilder builder = null; UMOManager manager = null; try { builder = new MuleXmlConfigurationBuilder(); manager = builder.configure(getConfigResources()); } catch (org.mule.config.ConfigurationException e) { // TODO Auto-generated catch block e.printStackTrace(); } Andrea Bozzoni, Spring&Mule 15 Cagliari, 14 Luglio 2007
  16. Slide 16: Integrazione tra Spring e Mule • Spring come component Factory • Configurare Mule in un constesto di Spring • Configurare un contesto Spring attraverso la configurazione di Mule • Gestione degli eventi tra Mule e Spring Andrea Bozzoni, Spring&Mule 16 Cagliari, 14 Luglio 2007
  17. Slide 17: Configurare Mule in un contesto Spring E’ possibile configurare un Mule manager direttamente come managed beans in un application context di Spring Per questo Mule mette a disposizione due FactoryBean: • org.mule.extras.spring.config.UMOManagerFactoryBean • org.mule.extras.spring.config.AutowireUMOManagerFactoryBean Il primo è stato deprecato poichè richiedeva il wiring esplicito di tutte le proprietà del Mule manager dando luogo ad application contest eccessivamente verbosi. Il secondo effettua l’auto-wiring in funzione di quello che è disponibile all’interno dell’application context. E’ molto utile in quanto riduce la verbosità dell’application context. Andrea Bozzoni, Spring&Mule 17 Cagliari, 14 Luglio 2007
  18. Slide 18: Configurare Mule in un contesto Spring org.mule.extras.spring.config.AutowireUMOManagerFactoryBean ... <beans> <bean id=\"muleManager\" class=\"org.mule.extras.spring.config.AutowireUMOManagerFactoryBean\" /> <bean id=\"muleNameProcessor\" class=\"org.mule.extras.spring.config.MuleObjectNameProcessor\" /> ... Questa factory viene dichiarata come bean nell’application context e viene utilizzata da Mule come factory per la configurazione del manager in funzione di ciò che è definito all’interno del contesto Andrea Bozzoni, Spring&Mule 18 Cagliari, 14 Luglio 2007
  19. Slide 19: Configurare Mule in un contesto Spring Ecco un esempio di dichiarazione di un UMO descriptor che viene utilizzato da Mule per inizializzare un UMO <bean id=\"service\" class=\"org.mule.impl.MuleDescriptor\"> <property name=\"inboundEndpoint\"> <ref local=\"firstEndpoint\" /> </property> <property name=\"implementation\"> <ref local=\"businessService\"/> </property> </bean> ... <bean id=\"businessService\" class=\"it.bozzoni.spring.services.BusinessServicesImpl\" singleton=\"false\"> <property name=\"auditService\"> <ref local=\"auditService\" /> </property> </bean> ... Andrea Bozzoni, Spring&Mule 19 Cagliari, 14 Luglio 2007
  20. Slide 20: Configurare Mule in un contesto Spring Esempio di application context in cui è configurata una istanza di mule, una serie di UMO e una serie di transformers Andrea Bozzoni, Spring&Mule 20 Cagliari, 14 Luglio 2007
  21. Slide 21: Configurare Mule in un contesto Spring Il Mule manager viene inizializzato indicando dov’è il file di configurazione con due semplici istruzioni. Notare che in questa circostanza è cambiato il builder SpringConfigurationBuilder builder = null; UMOManager manager = null; try { builder = new SpringConfigurationBuilder(); manager = builder.configure(getConfigResources()); } catch (org.mule.config.ConfigurationException e) { // TODO Auto-generated catch block e.printStackTrace(); } Andrea Bozzoni, Spring&Mule 21 Cagliari, 14 Luglio 2007
  22. Slide 22: Integrazione tra Spring e Mule • Spring come component Factory • Configurare Mule in un constesto di Spring • Configurare un contesto Spring attraverso la configurazione di Mule • Gestione degli eventi tra Mule e Spring Andrea Bozzoni, Spring&Mule 22 Cagliari, 14 Luglio 2007
  23. Slide 23: Configurare un contesto Spring attraverso la configurazione di Mule In questo caso l’application context è implicitamente definito nella configurazione di Mule. Occorre dichiarare un differente DOCTYPE nella configurazione di Mule: <!DOCTYPE mule-configuration PUBLIC \"-//MuleSource //DTD mule-configuration XML V1.0//EN\" \"http://mule.mulesource.org/dtds/mule-spring-configuration.dtd\"> Andrea Bozzoni, Spring&Mule 23 Cagliari, 14 Luglio 2007
  24. Slide 24: Configurare un contesto Spring attraverso la configurazione di Mule E’ quindi possibile sfruttare le capacità di wiring di Spring direttamente nella configurazione di Mule <mule-descriptor name=\"service\" implementation=\"it.bozzoni.spring.services.BusinessServic esImpl\"> <inbound-router> <endpoint address=\"vm://myQueue\" synchronous=\"true\"/> </inbound-router> <properties> <spring-property name=\"auditService\"> <ref local=\"auditService\"/> </spring-property> </properties> </mule-descriptor> In questo caso dichiarando una spring-property inettiamo una dipendenza su un UMO dichiarato in Mule. Andrea Bozzoni, Spring&Mule 24 Cagliari, 14 Luglio 2007
  25. Slide 25: Configurare un contesto Spring attraverso la configurazione di Mule In realtà Mule all’avvio trasforma la sua configurazione in un application context vero e proprio: <bean class=\"org.mule.impl.MuleDescriptor\" name=\"service\"> <property name=\"implementation\"> <value>it.bozzoni.spring.services.BusinessServicesImpl </value> </property> <property name=\"containerManaged\"> <value>true</value> </property> <property name=\"properties\"> <map> <entry key=\"auditService\"> <ref local=\"auditService\" /> </entry> </map> </property> ... Andrea Bozzoni, Spring&Mule 25 Cagliari, 14 Luglio 2007
  26. Slide 26: Integrazione tra Spring e Mule • Spring come component Factory • Configurare Mule in un constesto di Spring • Configurare un contesto Spring attraverso la configurazione di Mule • Gestione degli eventi tra Mule e Spring Andrea Bozzoni, Spring&Mule 26 Cagliari, 14 Luglio 2007
  27. Slide 27: Gestione degli eventi tra Mule e Spring Spring offre un sistema per la pubblicazione/ricezione di eventi basato sul pattern Observer. In questo modo è possibile per un bean sia • ricevere eventi dal container (applicativi e/o generati dal container) • pubblicare eventi nel container. Affinchè un bean riceva eventi dal container occorre che implementi l’interfaccia : • org.springframework.context.ApplicationListener Mentre per la pubblicazione è sufficiente avere a disposizione una reference all’application context. Sarebbe, comunque, più elegante implementare l’interfaccia: • org.springframework.context.ApplicationEventPublisherAware Andrea Bozzoni, Spring&Mule 27 Cagliari, 14 Luglio 2007
  28. Slide 28: Gestione degli eventi tra Mule e Spring Per la gestione degli eventi all’avvio l’application context effettua le seguenti operazioni: • verifica se nella configurazione è presente un bean il cui attirbuto id o name vale ‘applicationEventMulticaster’ • Se è presente lo utilizza come suo broadcaster di eventi, altrimenti ne stanzia uno di default: SimpleEventMulticaster • Memorizza tutti i beans che implementano l’interfaccia ApplicationListener come subscribers nell’applicationEventMulticaster Quando viene pubblicato un evento nel container l’application context effettua le seguenti operazioni: • chiede all’ event multicaster la lista dei subscribers • notifica a ciascuno di essi l’evento attraverso l’invocazione del metodo ‘onApplicationEvent(ApplicationEvent evento)’ Andrea Bozzoni, Spring&Mule 28 Cagliari, 14 Luglio 2007
  29. Slide 29: Gestione degli eventi tra Mule e Spring E’ possibile attivare lo scambio di messaggi tra Mule e Spring, configurando nell’application context il seguente multicaster fornito con Mule: • org.mule.extras.spring.events.MuleEventMulticaster <bean id=\"applicationEventMulticaster\" class=\"org.mule.extras.spring.events.MuleEventMulticaster\"> <property name=\"subscriptions\"> <list> <value>vm://myQueue4</value> <value>jms://eventQueue</value> </list> </property> </bean> In questa lista saranno indicati gli endpoints definiti in Mule da cui si desidera ricevere eventi in Spring Andrea Bozzoni, Spring&Mule 29 Cagliari, 14 Luglio 2007
  30. Slide 30: Gestione degli eventi tra Mule e Spring Un bean che desidera ricevere eventi solo da alcuni endpoints può implementare l’interfaccia fornita con Mule: • org.mule.extras.spring.events.MuleSubscriptionEventListener <bean id=\"service\" class=\"it.bozzoni.spring.services.BussinessServicesImpl\"> <property name=\"subscription\"> <list> <value>vm://myQueue</value> </list> </property> </bean> In questa listà saranno indicati gli endpoints che generano eventi al cui il bean è interessato Andrea Bozzoni, Spring&Mule 30 Cagliari, 14 Luglio 2007
  31. Slide 31: Gestione degli eventi tra Mule e Spring Viceversa se un bean desidera pubblicare messaggi verso qualche endpoint esposto da Mule non deve fare altro che costruire un apposito evento fornito da Mule: • org.mule.extras.spring.events.MuleApplicationEvent String url = \"vm://myQueue\"; Request req = new Request(); req.setServizio(\"Servizio richiesto sincrono\"); req.setAzione(\"Azione servizio\"); req.setData(\"Dati servizio\"); MuleApplicationEvent muleEvent = new MuleApplicationEvent (req, url); applicationContext.publishEvent(muleEvent); Per quanto riguarda la pubblicazione non deve fare altro che richiamare, come di consueto,il metodo publish sull’application context. Andrea Bozzoni, Spring&Mule 31 Cagliari, 14 Luglio 2007
  32. Slide 32: Riferimenti ESB – Enterprise Service Bus http://www-128.ibm.com/developerworks/xml/library/ws-esbscen/ http://www-128.ibm.com/developerworks/xml/library/ws-esbscen2.html http://www.ibm.com/developerworks/webservices/library/ws-esbscen3/ EIP – Enterprise Integration Pattern: http://www.eaipatterns.com/index.html SEDA – An Architecture for Highly Concurrent Server Applications http://www.eecs.harvard.edu/~mdw/proj/seda/ Spring: http://www.springframework.org Mule: http://mule.mulesource.org/display/MULE/Home Andrea Bozzoni, Spring&Mule 32 Cagliari, 14 Luglio 2007
  33. Slide 33: Grazie per l'attenzione. Andrea Bozzoni, Spring&Mule 33 Cagliari, 14 Luglio 2007