Les Enterprise Beans. Qu'est ce que c'est? Les Sessions Beans Les Web Services Les Message Driven Beans Annotation/Interception

Dimension: px
Commencer à balayer dès la page:

Download "Les Enterprise Beans. Qu'est ce que c'est? Les Sessions Beans Les Web Services Les Message Driven Beans Annotation/Interception"

Transcription

1 Les Enterprise Beans Qu'est ce que c'est? Les Sessions Beans Les Web Services Les Message Driven Beans Annotation/Interception

2 Qu'est ce qu'un EJB Un composant logiciel Ecrit en Java Déployable dans un environnement multitiers Déployable dans un container d'ejb Configurable de façon externe

3 Le container d'ejb Fournit un environnement Sécurisé Transactionnel Distribué Pour gérer et exécuter des EJB

4 Objectifs des EJB Simplifier l'écriture des composants métiers portables Considérer Le développement Le déploiement L'exécution des applications

5 Division des responsabilités Le fournisseur de Bean L'assembleur d'application Le déployeur Le fournisseur de persistence Le fournisseur de conteneur EJB Le fournisseur de serveur EJB L'administrateur

6 Techniquement Un EJB Expose une interface (cf. RMI) Est configurable Est conforme à la spécification Les clients sont Des servlets Des applets Des EJBs Des Client lourds Des Clients Web Services

7 Les types de Beans Les Session Beans pour la logique métier de l'application Sans état Conversationnel Les Message Beans pour la logique orientée message

8 Les Sessions Beans Contiennent la logique métier de l'application Durée de vie limitée à la session d'un client Stateless ou Stateful Un session bean est composé de Une implantation (une classe Java annotée) Des interfaces Remote ou Locale

9 Interface Locale/Remote Deux interfaces possibles pour les EJB Remote : accessible depuis un client distant (RMI/IIOP) L'appel doit être valide pour RMI IIOP RemoteException Sérialisation des paramètres Passage des paramètres par valeur Local : accessible depuis un client local (même JVM)

10 Un Stateless Session Bean Objet non persistant L'état n'est pas conservé entre deux appels

11 Cycle de vie d'un SlSB

12 Stateless Session Bean Implementation Remote Interface

13 Java Client Quelle est la magie ici?

14 Configuration JNDI Paramètres pour la configuration de l'accès au serveur JNDI (spécifique) Le serveur de nommage contient les références aux EJB déployés

15 Un Stateful Session Bean L'objet est non persistant Son état est conservé tout au long de la session Il expose une interface Remote ou

16 Stateful Session Bean

17 Le Client

18 Activation et Passivation Les SFSB consomment de la ressource mémoire Activation/Passivation = pagination système Lorsque la ressource manque, on passive des SFSB Lorsque qu'on doit accéder à un bean passivé,

19 Passivation

20 Activation

21 Cycle de vie des SFSB

22 Structure d'un Session Bean

23 Les callbacks Méthodes invoquées par le : appelée après l'instanciation d'un : appelée avant la destruction

24 Le développement d'un CallBack Coté serveur

25 Le callback

26 L'exécution L'intercepteur est ajouté à la classe

27 Configuration externe Il est possible de décrire les EJB de façon externe (sans annotations) Fichier ejb-jar.xml Surcharge les annotations Cf chapitre 19 de la spécification EJB 3

28 Conclusion sur les Session Bean Composants distribués Exécutable dans un container EJB Fournissent les services métiers Conversationnel Ou non Configurable Sécurité Transaction Ressources

29 Web Service Session Bean EJB 3.0 simplifie le développement et l'utilisation de Web Services Concepts Implantation Implantation d'un client

30 Définition Système logiciel permettant une interaction de machine à machine de façon interopérable sur un réseau Description de l'interface (WSDL) Différents protocole de transport Traitement des messages avec SOAP Couplage plus faible entre services

31 Modélisation de services Interactions par envois de messages Trois types de modèle Choréographie Description des interactions entre un ensemble de services Interface Description des interactions du point de vue d'un service Orchestration Action communicationnelles et interne d'un service

32 Concepts Service provider Service requester Service registry

33 Couplage faible

34 Exemple de Choréographie

35 Exemple d'interface

36 Description de services Web WSDL : description des types et des fonctions offerte par un service BPEL : description d'une orchestration de services WS-Policy : description des politiques d'usage SOAP : protocole d'envoi de messages entre Web Services

37 Hello WebService

38 SOAP Request/Response

39 WSDL Un document WSDL définit un service. Il contient 6 élements Les types : définition des types de données échangés Les messages : définition abstraite des données transmises Les porttype : définition abstraite des opérations (avec input message et output message) Le binding : spécification concrète du protocole et des format de données pour un porttype Le port : point de communication Le service : aggrège un ensemble de ports

40 WSDL Document L'interface Le binding vers l'implantation

41 XSD Schema Représentation des données Déclaration d'un élément <element name="invoicenumber" type="xsd:integer"/> Utilisation d'un élément <InvoiceNumber>12345</InvoiceNumber> Types complexes <complextype name="employeehours"> <sequence> <element name="id" type="xsd:integer"/> <element name="weeklyhourslimit" type="xsd:short"/> </sequence> </complextype>

42 XSD Schema (suite) Importation ou inclusion additional type definition elements (attribute, complexcontent, simplecontent) constraint related elements (restriction, enumeration, pattern) element indicators (maxoccurs, minoccurs, group) extensibility elements (any, extension, redefine) elements for simulating relationships between elements (unique, key, keyref)

43 WSDL Basics

44 L'élement definitions <definitions name="employee" targetnamespace=" xmlns=" xmlns:act=" xmlns:hr=" xmlns:soap=" xmlns:tns=" xmlns:xsd=" </definitions> Références des définitions de types utilisés pour les services

45 L'élément types <types> <schema xmlns=" targetnamespace= " <complextype name="returncodetype"> <sequence> <element name="code" type="xsd:integer"/> <element name="message" type="xsd:string"/> </sequence> </complextype> </schema> </types> Définitions de types locaux

46 Les éléments message et part <message name="getemployeeweeklyhoursrequestmessage"> <part name="requestparameter" element="act:employeehoursrequesttype"/> </message> <message name="getemployeeweeklyhoursresponsemessage"> <part name="responseparameter" element="act:employeehoursresponsetype"/> </message> En gros les messages échangés pour un Web Service

47 Les éléments porttype et operation PortType est remplacé par interface dans la version 2.0 <porttype name="employeeinterface"> <operation name="getweeklyhourslimit">... </operation> <operation name="updatehistory">... </operation> </porttype> Pour faire simple, l'interface du Web Service

48 Les éléments input et output <operation name="getweeklyhourslimit"> <input message="tns:getweeklyhoursrequestmessage"/> <output message="tns:getweeklyhoursresponsemessage"/> </operation> <operation name="updatehistory"> <input message="tns:updatehistoryrequestmessage"/> <output message="tns:updatehistoryresponsemessage"/> </operation> <operation name="submit"> <input message="tns:receivesubmitmessage"/> </operation> Pratiquement, les opérations et leur profile dans le WS

49 L'élément binding <binding name="employeebinding" type="tns:employeeinterface"> <soap:binding style="document" transport=" <operation name="getweeklyhourslimit"> <soap:operation soapaction="..."/>... </operation> <operation name="updatehistory"> <soap:operation soapaction="..."/>... </operation> </binding> En résumé, l'implantation des interfaces

50 Les éléments input et output (bindings) <operation name="getweeklyhourslimit"> <soap:operation soapaction="..."/> <input> <soap:body use="literal"/> </input> <output> <soap:body use="literal"/> </output> </operation> <operation name="updatehistory"> <soap:operation soapaction="..."/> <input> <soap:body use="literal"/> </input> <output> <soap:body use="literal"/> </output> </operation> En clair, l'implantation concrète des opérations

51 Les éléments service, port et endpoint <service name="employeeservice"> <port binding="tns:employeebinding" name="employeeport"> <soap:address location=" </port> </service> En Bref, l'adresse de l'implantation utilisée pour rendre le service

52 SOAP Paradigme d'échange de message stateless et one-way Ne s'occupe pas du routage, du transfert ni de la sémantique Décrit ce que doit faire un noeud SOAP lorsqu'il reçoit un SOAP message Les messages SOAP peuvent être transporté par HTTP/SMTP/...

53 SOAP

54 Header Body

55 La réponse Il y a plusieurs choix

56 request/response/request Element pour la corrélation

57 Gestion des erreurs Une réponse peut contenir un élément Fault Status Explanation Actor (URI) who caused the fault Details

58 JAX-WS JSR 224 Pour se simplifier la vie Deux façons de faire Partir d'une implantation Java et générer le WSDL Partir d'une définition en WSDL et générer les classes Java nécessaires

59 Un exemple simple Nouvelles annotations

60 WSDL généré (1)

61 WSDL généré (2)

62 Le Client d'un service Génération automatique des classes permettant l'appel à partir de l'addresse du service

63 Appel du service en Java Connection au service Appel du service

64 L'appel

65 Conclusion WebServices Introduction limitée Cf description détaillée de WSDL et de SOAP On a vu Comment construire un WS à partir d'une implantation Java Comment appeler un WS en java

66 Conclusion On a vu Session Bean Web Services Implantation de WebServices en Session Bean Client Web Service en Java Et surtout les notions Session Cycle de vie (création/suppression/passivation) Nommage

67 Message Driven Bean Définition et intérêt d'une approche orientée message Utilisation de JMS Les Message Driven Beans

68 Inconvénients de l'approche RMI Le client doit attendre la réponse Le client est couplé au serveur Les causes d'erreurs sont nombreuses Panne serveur Panne réseau Un seul client parle à un seul serveur

69 Approche Orientée Message Requêtes non bloquantes Découplage Sureté de fonctionnement Support émetteurs/récepteurs multiples Performances inférieures

70 JMS Spécification d'un service de messagerie en Java JMS Provider : mise en oeuvre du système Client JMS : application consommatrice ou productrice de messages. Message JMS : objet véhiculant les données entre applications

71 Domaines de communication Les Queues Les Topics

72 Le protocole JMS Trouver le fournisseur Créer une connection Créer une session Trouver la destination Créer un consommateur ou un producteur Envoyer ou recevoir un message

73 Garantie d'acheminement Dans un MOM, l'acheminement des messages est garanti. Un message est émis Il est consommé Si le MOM ne reçoit pas de «ack», il remet le message dans la queue Variantes Certified message delivery Store and Forward

74 Un exemple simple Comme d'habitude, on se connecte au serveur de nommage

75 Les étapes Récupération de la QueueConnectionFactory Création de la connection Création de la session Récupération de la queue

76 La réception des messages Facile à comprendre

77 L'envoi de message Le début est pareil. Ensuite, on crée les messages et on les envoie

78 Les MDB Approche sans MDB Configuration et connection à faire à la main Gestion du cycle de vie Gestion du contexte d'exécution Approche avec Session Bean Aussi gestion du cycle de vie threading

79 Un MDB EJB sans remote/local interface Une seule méthode : onmessage (Listener) Pas de message de retour Pas d'exception Stateless Single threaded

80 Le client est un client JMS

81 file:///c:/documents%20and%20settings/charoy/bureau/capture6.jpg file:///c:/documents%20and%20settings/charoy/bureau/capture7.jpg Un exemple

82 file:///c:/documents%20and%20settings/charoy/bureau/capture8.jpg Configuration avancée Pour les détails, voir la spécification

83 Concepts avancés Transaction différente de celui de l'émétteur du message Le contexte de sécurité n'est pas transmis explicitement Load Balancing plus simple mais attention au comportement des topics dans les clusters

84 Les problèmes L'ordre de traitement des messages n'est pas garanti Les messages poisons (messages faisant toujours échouer le traitement) Traitement manuel Gestion par l'administrateur

85 Les réponses : queue temporaire

86 Les réponses : topic commun

87 Sur les MDB Encore primitif À quand les vrais appels asynchrones Efficace pour la répartition de la charge Meilleure tolérance aux pannes Moins performants

88 Etendre les EJB Appeler un EJB depuis un EJB Annotation Interception Injection

89 Les annotations + variantes (à voir) Permettent de simplifier l'écriture des beans Surchargeables dans un fichier de configuration

90 L'injection Injection de référence Le container se chargent de retrouver des ressources et d'initialiser des variables. Un RandomBean est injecté dans le FacadeBean Pas de NullPointerException

91 Ressource réference Setter Injection

92 Injection du PersistenceContext On y reviendra

93 Les intercepteurs Méthodes invoquées autour ou en remplacement des méthodes métiers Proche de l'aop (rudimentaire) Permettent de séparer la logique métier du code de support Usages : sécurité, logging, auditing

94 Exemple 1 Annotation pour les intercepteurs Poursuite de l'exécution

95 Exemple 2 Accès au contexte de l'appel

96 Utilisation des intercepteurs L'ordre est important

97 Conclusion Simplification de l'accès au ressource (cf aussi les containers clients) L'injection est utilisable pour toutes les ressources nommées Les intercepteurs permettent la séparation des préoccupations Simplification du code métier Egalement configurable de façon externe Principes utilisés dans de nombreux frameworks

98 Ce n'est pas fini On a vu surtout Quels sont les composants distribués (session, service, message) Comment les développer Comment les enrichir On va voir La persistence D'autres concepts avancés (transaction, sécurité)