Les services Web - Deptinfo

publicité
Les services Web (fin)
Les architectures orientées
composants
Jeremy Fierstone
Jean-marc Farinone
1
Résumé de l'épisode
précédent
2
Les services Web
Jeremy Fierstone
Email : [email protected]
SAR5 – Novembre 2002
Merci à Mireille Blay-Fornarino, Didier Donsez
Michel Riveill, Microsoft, Sun … pour leurs slides
3
SOA : une architecture
annuaire
n
o
i
t
a
e
c
c
il
n
b
o
u
n
p
n
1. ne a
d'u
2. recherche d'un service
fournisseur 3. mise en correspondance
client
de services
JMF
4
Services web (= web services)
❚ WSDL = Web Services Description Language = format XML
pour décrire un service web
❚ SOAP = Simple Object Access Protocol = protocole d'envoi de
messages formatés en XML entre client et serveur web
services
❚ La couche transport utilisé est soit HTTP (d'où le nom de web
services) soit SMTP (i.e. le mail)
❚ échange de messages synchrones (en attente de réponse) ou
asynchrone (publication, lecture de réponse plus tard)
❚ UDDI = Universal Description Discovery and Integration =
annuaire de services qui recense des services Web.
JMF
5
Les services Web
WSDL : Web Services
Description Language
Merci à Didier Donsez
6
WSDL
Spécification (09/2000)
Objectif
Décrire les services comme un ensemble d’opérations et
de messages abstraits relié (bind) à des protocoles et des
serveurs réseaux
Grammaire XML (schema XML)
Ariba, IBM, Microsoft
TR W3C v1.1 (25/03/2001)
Modulaire (import d’autres documents WSDL et XSD)
Séparation entre la partie abstraite et concrète
7
WSDL
Interface
Implementation
<definitions>
<definitions>
<import>
<import>
<types>
<service>
<message>
<port>
<portType>
<binding>
8
Éléments d’une définition WSDL
<types>
Contient les définitions de types utilisant un système de typage (comme XSD).
<message>
Décrit les noms et types d’un ensemble de champs à transmettre
<porttype>
Spécifie une liaison d’un <porttype> à un protocole concret (SOAP1.1, HTTP1.1,
MIME, …). Un <porttype> peut avoir plusieurs liaisons !
<port>
Décrit un ensemble d’opérations. Chaque opération a zéro ou un message en entrée,
zéro ou plusieurs messages de sortie ou de fautes
<binding>
Paramètres d’une invocation, valeur du retour, …
Spécifie un point d’entrée (endpoint) comme la combinaison d’un <binding> et d’une
adresse réseau.
<service>
Une collection de points d’entrée (endpoint) relatifs.
9
Élément <types>
Contient les définition de types utilisant un système de typage (comme XSD).
Exemple
<!-- type defs -->
<types>
<xsd:schema targetNamespace="urn:xml-soap-address-demo"
xmlns:xsd="http://www.w3.org/1999/XMLSchema">
<xsd:complexType name="phone">
<xsd:element name="areaCode" type="xsd:int"/>
<xsd:element name="exchange" type="xsd:string"/>
<xsd:element name="number" type="xsd:string"/>
</xsd:complexType>
<xsd:complexType name="address">
<xsd:element name="streetNum" type="xsd:int"/>
<xsd:element name="streetName" type="xsd:string"/>
<xsd:element name="city" type="xsd:string"/>
<xsd:element name="state" type="xsd:string"/>
<xsd:element name="zip" type="xsd:int"/>
<xsd:element name="phoneNumber" type="typens:phone"/>
</xsd:complexType>
</xsd:schema>
</types>
10
Outils
Générateur WSDL à partir de déploiement
SOAP ou EJB, …
Générateur de proxy SOAP à partir de WSDL
Toolkits (Wsdl2Java / Java2Wsdl, …)
Propriétaires (non normalisés)
11
Les services Web
UDDI :
Universal Description, Discovery
and Integration
12
UDDI
Spécification (09/2000)
Ariba, IBM, Microsoft +260 autres sociétés
Objectifs
annuaire mondial d'entreprises pour permettre d'automatiser les
communications entre prestataires, clients, etc.
plusieurs entrées indexées : nom, carte d'identité des sociétés,
description des produits, services applicatifs invocables à distance
(références des connexions)
Indexation des catalogues propriétaires (ebXML, RosettaNet, Ariba,
Commerce One, etc.)
Grammaire XML (schéma XML)
Soumission/interrogation basées sur SOAP et WSDL
13
Exemples d'annuaire UDDI
moteur de recherche de service web :
http://soapclient.com/uddisearch.html
annuaires les plus connus :
L’opérateur de référence UDDI :
http://uddi.xml.org/
Microsoft : http://uddi.microsoft.com
IBM : http://uddi.ibm.com
14
UDDI Schema
Interface
Implementation
<businessEntity>
<businessService>
<tModel>
<bindingTemplate>
<businessService>
<tModel>
<bindingTemplate>
15
Références
Services Web :
SOAP :
Spécification SOAP 1.1 : http://www.w3c.org/TR/SOAP
Spécification SOAP 1.2 : http://www.w3c.org/TR/soap12
Implémentations : http://www.soapware.org
Exemples en ligne : http://soapclient.com/soaptest.html
UDDI :
Spécifications officielles : http://www.w3c.org
Documentations et exemples en ligne : http://www.xmlbus.com
Spécification : http://www.uddi.org
Serveur UDDI : http://uddi.microsoft.com et http://uddi.ibm.com
Cours :
Didier Donsez, Web Services
Michel Riveill, SOAP
16
Un environnement pour WS :
Axis
Jean Marc Farinone
Email : [email protected]
17
Un environnement pour des
WS : Axis
❚ Page d'accueil : http://ws.apache.org/axis/
❚ Cliquer sur les premiers liens pour charger une
version d'Axis (1.4 le 28 mars 2008). On récupère
un .zip à extraire.
❚ Axis est un environnement de développement pour
WS (classes pour faire des services et clients WS)
mais aussi une application Web.
❚ Voir tutorial d'axis à
http://ws.apache.org/axis/java/userguide.html
JMF
18
Développement d'un client et
serveur WS
❚ Le service web sera encapsulé dans l'appli web Axis.
❚ Le client est un programme Java
❚ Un service web complet : Reponse.jws
public class Reponse {
public String reponds(String st) {
return "bonjour " + st;
}
public String disCoucou() {
return "Coucou ";
}
}
❚ Ben oui c'est une classe Java. Le fichier doit avoir
pour extension .jws
JMF
19
Le serveur WS Reponse.jws
❚ Il est placé dans l'application web Axis.
❚ Qui a la première utilisation, va compiler ce fichier Java,
exécuter la méthode appelée et retourner le résultat (si tout
se passe bien !)
❚ Une manière d'accéder à ce Web Service est, dans un client
web, de demander la page d'URL :
http://localhost:8080/axis/Reponse.jws
❚ Une démonstration SVP. OK !
❚ Pourquoi cela fonctionne ?
❚ Réponse : en fait tout ce qui se termine par .jws est traité
par la servlet AxisServlet (voir le web.xml de l'application
web Axis)
JMF
20
Le client WS HelloClient.java
package hello;
import
import
import
import
import
org.apache.axis.client.Call;
org.apache.axis.client.Service;
org.apache.axis.encoding.XMLType;
org.apache.axis.utils.Options;
javax.xml.rpc.ParameterMode;
public class HelloClient
{
public static void main(String [] args) throws Exception {
Options options = new Options(args);
String endpoint = "http://localhost:" + options.getPort() +
"/axis/Reponse.jws";
args = options.getRemainingArgs();
if (args == null || args.length != 1) {
System.err.println("Usage: java HelloClient [nom]");
return;
}
String nom = args[0];
Service service = new Service();
Call
call
= (Call) service.createCall();
call.setTargetEndpointAddress( new java.net.URL(endpoint) );
call.setOperationName( "reponds" );
call.addParameter( "st", XMLType.XSD_STRING, ParameterMode.IN );
call.setReturnType( XMLType.XSD_STRING );
String ret = (String) call.invoke( new Object [] { nom });
System.out.println("resultat retourné
}
}
JMF
: \n" + ret);
21
Et XML (SOAP) dans tout çà ?
❚ Nous n'avons fait que (!) de la programmation Java.
❚ Quid de SOAP ?
❚ En fait les messages échangés entre le client et le
serveur WS sont en SOAP.
❚ Si, si.
JMF
22
TCPMonitor : tcpmon
❚ Axis propose un outil qui permet de voir les
messages TCP échangés entre un client et un
serveur : TCPMonitor
❚ Il suffit d'indiquer que le client envoit les messages
à ... TCPMonitor, que TCPMonitor envoit les
messages au serveur, et tout échange entre client
et serveur est tracé dans cet outil.
❚ On lance cet outil par :
java org.apache.axis.utils.tcpmon
JMF
23
Utilisation de TCPMonitor 1/4
❚ Le client est programmé par :
String endpoint = "http://localhost:7777" + "/axis/Reponse.jws";
...
Service service2 = new Service();
Call call2
= (Call) service2.createCall();
call2.setTargetEndpointAddress( new java.net.URL(endpoint) );
....
❚ Lorsque TCPMonitor est lancé on obtient le premier
écran :
JMF
24
Utilisation de TCPMonitor 2/4
❚ Indiqué le port écouté dans le champ de texte qui
suit dans "Listen Port #".
Ici 7777.
❚ Et cliquer le bouton Add
JMF
25
Utilisation de TCPMonitor 3/4
❚ Dans le nouvel onglet obtenu, cocher "XML Format"
et cliquer "Switch Layout".
❚ Puis lancer le client.
❚ Les messages véhiculés entre client et serveur WS
seront affichés.
JMF
26
Utilisation de TCPMonitor 4/4
JMF
27
Bibliographie
❚ http://fr.wikipedia.org/wiki/Service_Oriented
_Architecture
❚ http://java.sun.com/javaee/5/docs/tutorial/do
c/bnayk.html : la partie du Java EE 5 tutorial
consacrée aux services web
❚ http://www.w3.org/2002/ws/desc/ : page
d'accueil du "Web Services Description Working
Group"
❚ http://ws.apache.org/axis/ : implémentation
open source Axis pour construire des services web
JMF
28
Architecture de composants
Jean-Marc Farinone
Maître de conférences CNAM Paris
[email protected]
29
composant = ? (1/2)
❚ Un "programme" (du "logiciel") qui s'intègre
bien avec d'autres
❚ En général qui s'intègre bien avec un
environnement d'exécution
❚ environnement d'exécution = un conteneur
❚ Ce conteneur lui apporte des services (de
création, de lancement automatique de
méthodes, etc.)
❚ Le composant amène des parties applicatives
30
composant = ? (2/2)
❙ = un objet (donc méthodes donc code) qui
vérifient quelques contraintes pour pouvoir
bien se marier avec son environnement
❙ Souvent des "petites" contraintes syntaxiques
❙ L'environnement peut amener de grosses
fonctionnalités (sécurité, transactionnel, etc.)
❙ exemple de composants Java : applet,
JavaBeans, etc.
31
SCA : Service Component
Architecture
❙ "= un ensemble de spécifications qui décrivent un
modèle pour bâtir des applications s'inscrivant dans une
architecture orientée service (appelée aussi SOA).
❙ Les applications basées sur SCA sont en fait un
assemblage de composants, chaque composant
implémente une partie de la logique métier et peut
dépendre de services, ..."
❙ source : Wikipedia
http://fr.wikipedia.org/wiki/Service_Component_Arc
hitecture
32
SCA : une présentation
❙ A priori indépendant des langages de programmation et
des couches réseau sous jacentes (HTTP, RMI,
CORBA, ...)
❙ Les principaux acteurs : BEA, IBM, IONA Technologies,
Oracle, SAP, Siebel Systems, Sybase
❙ Spécifications à :
• http://xml.coverpages.org/SCAAssemblyModel-V09.pdf (SCA Version 0.9,
November 2005)
33
Un exemple d'architecture de
composants
❙ Java EE = Java Entreprise Edition (anciennement
Java 2 EE)
❙ Amène une architecture pour de la
programmation distribuée (RMI, JMS, …) et de
composants (servlets, JSP, EJB, etc.)
❙ Pour les servlets/JSP : composants qui
s'exécutent dans une JVM contenu dans un
serveur (web)
❙ Pour les EJB : composants qui s'exécutent dans
une JVM conteneur d'EJB
34
Une servlet
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class MaPremiereServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// Etape 1. Spécifier le type MIME du contenu de la réponse
response.setContentType("text/html");
// Etape 2. Récupère le PrintWriter pour envoyer des données au client
PrintWriter out = response.getWriter();
// Step 3. Envoyer l’information au client
out.println("<html>");
out.println("<head><title>Bonjour Servlet</title></head>");
out.println("<body>");
out.println("<h1> Bonjour à tous les étudiants de la valeur RSX102</h1>");
out.println("Il est : " + new java.util.Date());
out.println("</body></html>");
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
• Traité quand le navigateur demande l’URL ... qui mène à la
JMF
servlet !
35
Une JSP
• fichier MaDate.jsp
<html><head><title>Obtenu par une JSP</title></head>
<body>
<h3>Bonjour de ma part </h3> <hr>
La date courante est : <%= new java.util.Date() %>
</body>
</html>
• Traité quand le navigateur demande l’URL
de la JSP :
http://serveurWeb:<port>/.../MaDate.jsp
JMF
36
JSP et Servlets
• Servlet = du code Java contenant de
l'HTML
• JSP = une page HTML contenant du
code Java
• Concrètement avec les JSP :
– les parties statiques de la page JSP sont
écrites en HTML
– les parties dynamiques de la page JSP sont
écrites en Java
JMF
37
JSP, Servlets et Web services
• Les servlets et JSP sont souvent des clients de web services
• On a l'architecture :
I
n
t
e
r
n
e
t
Serveur
web
dynamic
build
HTML
Files
JMF
Servlets ou
JSP
Web
service
38
Servlets vs. JSP :
Architecture MVC
• modèle = les données accédées par un
code Java (JDBC, RMI, EJB, etc.)
• vues = JSP
• contrôleur = servlets
JMF
39
Architecture MVC (suite)
• Syntaxe dans la servlet pour lancer la JSP :
public void doPost(HttpServletRequest request, HttpServletResponse response){
ServletContext context = getServletContext(); // héritée de GenericServlet
RequestDispatcher dispatcher =
context.getRequestDispatcher("/maPageMiseEnForme.jsp");
dispatcher.forward(request, response);
}
JMF
40
Les Entreprise JavaBeans
(EJB)
Jean-Marc Farinone
[email protected]
Maître de Conférences
Conservatoire National des Arts et Métiers
CNAM Paris (France)
41
L'idée essentielle
❚ Se concentrer sur la logique métier à développer (= modéliser,
coder les notions du domaine, …) et sous-traiter les problèmes
connus de :
❙
❙
❙
❙
Persistance
Transactions
Sécurité
Réserve (pool) d’objets, monter en charge, etc.
à un conteneur.
❚ Donc fabriquer des composants qui s'intégreront bien entre
eux et avec le conteneur
❚ C'est le "mariage entre le monde transactionnel et le monde
des composants orienté objet"
❚ Version 3.0 depuis le 27 juin 2005
❚ Compatibilité et interopérabilité avec les EJB 2.1
42
Architecture des EJB (1/2)
❚ On passe d'une architecture N-tiers classique :
Couche
Présentation
Couche
intermédiaire
Couche Système
d'information de
l'entreprise
RMI
CORBA
43
Architecture des EJB (2/2)
❚ … à une architecture qui encapsule les composants
Couche
Présentation
Couche Système
d'information de
l'entreprise
Couche
intermédiaire
Serveur d'application EJB
EJB
44
Ce qu'amène le conteneur
❚ amène des services de nommage, de gestion du cycle de vie,
persistance, sécurité, transaction répartie
❚ ces services peuvent demander de lancer des méthodes fournies
par le bean
❚ encapsulation d’un composant : les clients devront passer par le
conteneur pour accéder à un EJB
45
Les différents catégories d'EJB
❚ EJB session modèlise une suite d'interactions
❙ sans état (stateless) : => plusieurs clients différents
peuvent être associés au même EJB en même temps
❙ avec état (stateful) => c’est le même client qui utilise cet
EJB session avec état pendant une suite d'invocations
❚ EJB entité modèlise des données
❙ BMP (Bean Managed Persistance)
❙ CMP (Container Managed Persistance)
❚ EJB orienté message (écoute derrière des files ou des sujets et
sont activés de manière asynchrone)
46
Bibliographie
❙ http://cedric.cnam.fr/~farinone/Java
: site pour la programmation Java et Java
Entreprise Edition
47
Téléchargement