Apache Synapse

Loading...

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

0 comments

Post a comment

    Post a comment
    Embed Video
    Edit your comment Cancel

    1 Favorite

    Apache Synapse - Presentation Transcript

    1. Apache Synapse Présentation du produit 9 novembre 2007 Jean-François Hélie
    2. Agenda
      • Responsabilité d’un ESB
      • Démo Apache Synapse
        • Web service et client Axis 2
        • Proxy HTTP
        • Traces
        • Haute disponibilité
        • Répartition de charges
        • Médiateur personnalisé
        • Gestion des erreurs
        • WS-Security
        • WS-Reliable Messaging
      • Questions
    3. Responsabilité d’un ESB
      • Un ESB est un intermédiaire qui permet à des applications hétérogènes de communiquer au travers de protocole standards. Un ESB est un médiateur de messages dans différents protocoles
      • Principales responsabilités d’un ESB (extrait de « les ESB dans la soa » de Xebia ):
        • Réconcilier des mondes hétérogènes , à l'aide de standards d'interopérabilité ou de connecteurs spécialisés – c'est le rôle classique d'un middleware d'intégration.
        • Découpler consommateurs et fournisseurs de services : Un consommateur ne connaît que l'ESB et ne connaît ni les formats ni les protocoles d'échange spécifiques utilisés par le fournisseur du service.
        • Agréger des services de niveau N afin de construire des services de niveau N+1. Si l'agrégation est complexe, ou nécessite des structures de contrôle du flux d'exécution, un moteur d'orchestration, reposant par exemple sur le langage BPEL1, est mis à contribution.
        • Tracer les messages qui transitent. Devenant une zone de passage incontournable, l’ESB joue un rôle fondamental dans la traçabilité et le monitoring des traitements. Une telle fonctionnalité peut être fournie par l'ESB ou par une solution tierce adressant également les problématiques de SLA2, QoS3, BAM4, etc.
    4. Démo Apache Synapse
      • Téléchargement d’Apache Synapse: http://apache.multidist.com/ws/synapse/1.0/synapse-1.0-bin.zip
      • Pré-requis: JDK 1.4.2+
      • Quick Start: http://ws.apache.org/synapse/Synapse_QuickStart.html
      • Exemples: http://ws.apache.org/synapse/Synapse_Samples.html
      • Gestion des Bugs: http:// issues.apache.org / jira / browse /SYNAPSE
      • La configuration d’Apache Synapse se fait dans un fichier XML: %SYNAPSE_HOME% epositoryconfsynapse.xml
    5. Web service et client Axis 2
      • Création d’un web service Axis 2 de type JAX-RPC
        • package fr.jfhelie.axis2.sample;
        • import java.util.ArrayList;
        • import java.util.List;
        • public class UserManager {
        • public User getUser(String email) {
        • return new User("user1@gmail.com", "prénom1", "nom1");
        • }
        • public List<User> listUsers() {
        • List<User> users = new ArrayList<User>();
        • users.add(new User(&quot;user1@gmail.com&quot;, &quot;prénom1&quot;, &quot;nom1&quot;));
        • users.add(new User(&quot;user2@gmail.com&quot;, &quot;prénom2&quot;, &quot;nom2&quot;));
        • return users;
        • }
        • }
      • Fichier de déploiement services.xml :
        • <service>
        • <description>Exemple de web service</description>
        • <parameter name=&quot;ServiceClass&quot;>fr.jfhelie.axis2.sample.UserManager</parameter>
        • <operation name=&quot;getUser&quot;>
        • <messageReceiver class=&quot;org.apache.axis2.rpc.receivers.RPCMessageReceiver&quot; />
        • </operation>
        • <operation name=&quot;listUsers&quot;>
        • <messageReceiver class=&quot;org.apache.axis2.rpc.receivers.RPCMessageReceiver&quot; />
        • </operation>
        • </service>
      • Déploiement du fichier usermanager.aar dans le répertoire %AXIS2_HOME%/repository/services
      • Création du client avec l’outil Axis 2 Wsdl2Java
    6. Proxy HTTP
      • Configuration d’Apache Synapse en proxy devant le serveur Axis 2
      • Configuration dans le fichier synapse.xml :
        • <definitions xmlns=&quot;http://ws.apache.org/ns/synapse&quot;>
        • <proxy name=&quot;usermanager&quot;>
        • <target>
        • <endpoint>
        • <address uri=&quot;http://localhost:8090/axis2/services/usermanager&quot;/>
        • </endpoint>
        • <outSequence>
        • <send/>
        • </outSequence>
        • </target>
        • </proxy>
        • </definitions>
      • Erreur de fermeture des connexions HTTP 1.1 sous Windows:
        • http://issues.apache.org/jira/browse/SYNAPSE-136
        • java.io.IOException: Une connexion existante a dû être fermée par l'hôte distant
        • at sun.nio.ch.SocketDispatcher.read0(Native Method)
        • at sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:25)
        • at sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:233)
        • at sun.nio.ch.IOUtil.read(IOUtil.java:200)
    7. Traces
      • Configuration dans le fichier synapse.xml pour tracer le message:
        • <definitions xmlns=&quot;http://ws.apache.org/ns/synapse&quot;>
        • <proxy name=&quot;usermanager&quot;>
        • <target>
        • <endpoint>
        • <address uri=&quot;http://localhost:8090/axis2/services/usermanager&quot;/>
        • </endpoint>
        • <outSequence>
        • <log level=&quot;full&quot;/>
        • <send/>
        • </outSequence>
        • </target>
        • </proxy>
        • </definitions>
      • Résultat:
        • [HttpClientWorker-1] INFO LogMediator - To: http://www.w3.org/2005/08/addressing/anonymous, MessageID: urn:uuid:B5A12693538FF48E283728188451326-1728294687, Envelope:
        • <?xml version='1.0' encoding='utf-8'?>
        • <soapenv:Envelope xmlns:soapenv=&quot;http://www.w3.org/2003/05/soap-envelope&quot;>
        • <soapenv:Body>
        • <ns:getUserResponse xmlns:ns=&quot;http://sample.axis2.jfhelie.fr&quot;>
        • <ns:return xmlns:ax210=&quot;http://sample.axis2.jfhelie.fr/xsd&quot; type=&quot;fr.jfhelie.axis2.sample.User&quot;>
        • <ax210:email>user1@gmail.com</ax210:email>
        • <ax210:firstName>prÚnom1</ax210:firstName>
        • <ax210:lastName>nom1</ax210:lastName>
        • </ns:return>
        • </ns:getUserResponse>
        • </soapenv:Body>
        • </soapenv:Envelope>
    8. Haute disponibilité (fail-over)
      • Configuration dans le fichier synapse.xml la haute disponibilité :
        • <definitions xmlns=&quot;http://ws.apache.org/ns/synapse&quot;>
        • <proxy name=&quot;usermanager&quot;>
        • <target inSequence=&quot;in&quot; outSequence=&quot;out&quot;/>
        • </proxy>
        • <sequence name=&quot;out&quot;>
        • <send/>
        • </sequence>
        • <sequence name=&quot;in&quot;>
        • <send>
        • <endpoint>
        • <failover>
        • <endpoint>
        • <address uri=&quot;http://localhost:8090/axis2/services/usermanager&quot;>
        • <enableAddressing/>
        • <suspendDurationOnFailure>60</suspendDurationOnFailure>
        • </address>
        • </endpoint>
        • <endpoint>
        • <address uri=&quot;http://localhost:8091/axis2/services/usermanager2&quot;>
        • <enableAddressing/>
        • <suspendDurationOnFailure>60</suspendDurationOnFailure>
        • </address>
        • </endpoint>
        • </failover>
        • </endpoint>
        • </send>
        • </sequence>
        • </definitions>
    9. Répartition de charges
      • Configuration dans le fichier synapse.xml :
        • <definitions xmlns=&quot;http://ws.apache.org/ns/synapse&quot;>
        • <proxy name=&quot;usermanager&quot;>
        • <target inSequence=&quot;in&quot; outSequence=&quot;out&quot;/>
        • </proxy>
        • <sequence name=&quot;out&quot;>
        • <send/>
        • </sequence>
        • <sequence name=&quot;in&quot;>
        • <send>
        • <endpoint>
        • <loadbalance>
        • <endpoint>
        • <address uri=&quot;http://localhost:8090/axis2/services/usermanager&quot;>
        • <enableAddressing/>
        • <suspendDurationOnFailure>60</suspendDurationOnFailure>
        • </address>
        • </endpoint>
        • <endpoint>
        • <address uri=&quot;http://localhost:8091/axis2/services/usermanager2&quot;>
        • <enableAddressing/>
        • <suspendDurationOnFailure>60</suspendDurationOnFailure>
        • </address>
        • </endpoint>
        • </loadbalance>
        • </endpoint>
        • </send>
        • </sequence>
        • </definitions>
    10. Médiateur personnalisé - 1/2
      • Création d’une classe qui implémente Mediator :
        • package fr.rsi.esb.mediator.synapse;
        • import javax.xml.namespace.QName;
        • import org.apache.synapse.Mediator;
        • import org.apache.synapse.MessageContext;
        • public class SampleMediator implements Mediator {
        • public boolean mediate(MessageContext mc) {
        • setLastName(mc, &quot;nom-médiateur&quot;);
        • return true;
        • }
        • private void setLastName(MessageContext mc,String lastName) {
        • mc.getEnvelope().getBody().getFirstElement().getFirstElement()
        • .getFirstChildWithName(
        • new QName(&quot;http://sample.axis2.jfhelie.fr/xsd&quot;,
        • &quot;lastName&quot;)).setText(lastName);
        • }
        • public int getTraceState() {
        • return 0;
        • }
        • public String getType() {
        • return null;
        • }
        • public void setTraceState(int traceState) {
        • }
        • }
    11. Médiateur personnalisé - 2/2
      • Configuration du fichier synapse.xml :
        • <definitions xmlns=&quot;http://ws.apache.org/ns/synapse&quot;>
        • <proxy name=&quot;usermanager&quot;>
        • <target>
        • <endpoint>
        • <address uri=&quot;http://localhost:8090/axis2/services/usermanager&quot;/>
        • </endpoint>
        • <outSequence>
        • <class name=&quot;fr.rsi.esb.mediator.synapse.SampleMediator&quot;/>
        • <send/>
        • </outSequence>
        • </target>
        • </proxy>
        • </definitions>
    12. Gestion des erreurs
      • Configuration du fichier synapse.xml :
        • <definitions xmlns=&quot;http://ws.apache.org/ns/synapse&quot;>
        • <proxy name=&quot;usermanager&quot;>
        • <target inSequence=&quot;in&quot; outSequence=&quot;out&quot;/>
        • </proxy>
        • <sequence name=&quot;in&quot;>
        • <send>
        • <endpoint>
        • <address uri=&quot;http://localhost:8090/axis2/services/usermanager&quot;/>
        • </endpoint>
        • </send>
        • </sequence>
        • <sequence name=&quot;out&quot; onError=&quot;fault&quot;>
        • <class name=&quot;fr.rsi.esb.mediator.synapse.SampleMediator&quot;/>
        • <send/>
        • </sequence>
        • <sequence name=&quot;fault&quot;>
        • <log level=&quot;custom&quot;>
        • <property name=&quot;text&quot; value=&quot;An unexpected error occured&quot;/>
        • <property name=&quot;message&quot; expression=&quot;get-property('ERROR_MESSAGE')&quot;/>
        • </log>
        • <drop/>
        • </sequence>
        • </definitions>
    13. WS-Security
      • WS-Security est une spécification qui permet de sécuriser des web services de manière intéropérable. La plupart des web services distribués dépendent du protocole pour les fonctions de sécurité, exemple: HTTPS, basic authentification. Cette approche est limitée car elle ne permet pas la distribution sur des protocoles non sécurisables et ne garantit pas que le message est sécurisé d'un point à un autre. WS-Security utilise des modèles de sécurité existants (comme Kerberos et X509)
      • WS-Security permet:
        • l'ajout d’un timestamp dans le header du message SOAP pour permettre la validation de sa durée de vie,
        • la signature d'une partie ou de la totalité du message pour garantir que le message n'a pas été corrompu par un tiers,
        • le chiffrement du message pour garantir la confidentialité des données échangées
      • Apache Synapse possède nativement un médiateur permettant de gérer les messages de type WS-Security
    14. WS-Reliable Messaging
      • WS-Reliable Messaging (WSRM) est un protocole d’échanges fiables de messages de type web services. Les messages échangés en TCP/IP ne sont pas garantit d’être reçu à leur destinataire exactement une fois dans le bon ordre. WSRM permet de le garantir par l’intermédiaire de l’établissement d’une conversation et d’un système d’accusé de réception.
      • Par exemple lors de l'envoi de 2 messages dont on souhaite garantir la réception dans le bon ordre, l’enchainement se fait de la façon suivante:
        • Création d’une séquence déclarée par la balise XML <wsrm:CreateSequenceResponse>
        • Envoi d’un premier message déclaré par la balise XML <wsrm:Sequence>
        • Envoi d’un deuxième message déclaré par la balise XML <wsrm:Sequence> en indiquant que c’est le dernier par la balise XML <wsrm:LastMessage />
        • Fermeture de la séquence déclarée par la balise XML <wsrm:TerminateSequence>
      • Apache Synapse supporte nativement un médiateur permettant de gérer des échanges de type WSRM
    15. Questions ?

    + jfheliejfhelie, 3 years ago

    custom

    1930 views, 1 favs, 1 embeds more stats

    More info about this document

    © All Rights Reserved

    Go to text version

    • Total Views 1930
      • 1907 on SlideShare
      • 23 from embeds
    • Comments 0
    • Favorites 1
    • Downloads 32
    Most viewed embeds
    • 23 views on http://jfhelie.blogspot.com

    more

    All embeds
    • 23 views on http://jfhelie.blogspot.com

    less

    Flagged as inappropriate Flag as inappropriate
    Flag as inappropriate

    Select your reason for flagging this presentation as inappropriate. If needed, use the feedback form to let us know more details.

    Cancel
    File a copyright complaint
    Having problems? Go to our helpdesk?

    Categories