Programmation d’applications...

46
Programmation d’applications distribu´ ees Fran¸ cois Charoy Universit´ e Henri Poincar´ e 8 octobre 2007

Transcript of Programmation d’applications...

Page 1: Programmation d’applications distribu´eespagesperso.lina.univ-nantes.fr/~molli-p/pmwiki/uploads/Main/j2eeintr… · I L’int´egration avec le back-end : Il faut ´ecrire du code

Programmation d’applications distribuees

Francois Charoy

Universite Henri Poincare

8 octobre 2007

Page 2: Programmation d’applications distribu´eespagesperso.lina.univ-nantes.fr/~molli-p/pmwiki/uploads/Main/j2eeintr… · I L’int´egration avec le back-end : Il faut ´ecrire du code

Premiere partie I

Developpement d’applications distribuees

Page 3: Programmation d’applications distribu´eespagesperso.lina.univ-nantes.fr/~molli-p/pmwiki/uploads/Main/j2eeintr… · I L’int´egration avec le back-end : Il faut ´ecrire du code

Objectifs du cours

I Comprendre ce qu’est une application distribuee.

I Comprendre la problematique de leur developpement.

I Apprendre les bases de leur developpement dans unenvironnement JEE

I Apprendre a les concevoir

Page 4: Programmation d’applications distribu´eespagesperso.lina.univ-nantes.fr/~molli-p/pmwiki/uploads/Main/j2eeintr… · I L’int´egration avec le back-end : Il faut ´ecrire du code

Probleme

Construire des applications pour entreprises

I Sures

I Securisees

I Distribuees

I Supportant la montee en charge (scalable)

I Disponibles

I Favorisant la reutilisation

I Maintenables et extensibles

I Pour moins cher

Page 5: Programmation d’applications distribu´eespagesperso.lina.univ-nantes.fr/~molli-p/pmwiki/uploads/Main/j2eeintr… · I L’int´egration avec le back-end : Il faut ´ecrire du code

Quelles applications ?

I Applications de commerce ou de trading

I Applications bancaires

I Call Centers

I Applications d’assurances

I Nombreuses sources d’informations potentielles

I Interactions entre des systemes heterogenes

I Grand nombre de transactions (high throughtput)

I Evolutives

Page 6: Programmation d’applications distribu´eespagesperso.lina.univ-nantes.fr/~molli-p/pmwiki/uploads/Main/j2eeintr… · I L’int´egration avec le back-end : Il faut ´ecrire du code

Les questions a resoudre

I Les invocations de methodes : connection d’un client a unserveur et appels de methodes distances

I L’integration avec le back-end : Il faut ecrire du code pouracceder aux bases de donnees et aux systemes d’informationexistant

I Le cycle de vie des objets : La vie des objets (creation,destruction) doit etre geree par le serveur

I Les transactions : Que faire quand deux clients accedent auxmemes donnees. et si un client crash ?

I L’audit et les traces : Si quelque chose se passe mal, commentpeut on savoir ce qui s’est effectivement passe.

I Le redeploiement : Comment mettre a jour une applicationquand le serveur est en production ?

Page 7: Programmation d’applications distribu´eespagesperso.lina.univ-nantes.fr/~molli-p/pmwiki/uploads/Main/j2eeintr… · I L’int´egration avec le back-end : Il faut ´ecrire du code

Les questions a resoudre (2)

I Les arrets du serveurs : Comment s’assurer d’un arret propredes serveurs quand c’est necessaire ?

I Les threads : Le serveur doit pouvoir gerer les requetes deplusieurs clients simultanement

I La gestion des messages : Certaines requetes peuvent etreenvoyees sous forme de messages (faible couplage)

I La transparence des defaillances/clustering : Si un serveurcrash, les requetes d’un client doivent etre reroutees vers unautres serveurs. Quel temps d’indisponibilite est acceptable ?

I L’equilibrage de la charge : les requetes des clients doiventetre dirigees vers le serveur le moins charge.

Page 8: Programmation d’applications distribu´eespagesperso.lina.univ-nantes.fr/~molli-p/pmwiki/uploads/Main/j2eeintr… · I L’int´egration avec le back-end : Il faut ´ecrire du code

Les questions a resoudre (3)

I La gestion des ressources : Le serveur doit permettre lepartage des ressources entre les clients (connections aux basesde donnees, objets du serveur)

I La securite : le serveur doit etre a l’abri des acces interdits oupar des personnes n’ayant les autorisations necessaires

I La gestion des caches

I Et encore plein d’autres trucs

Page 9: Programmation d’applications distribu´eespagesperso.lina.univ-nantes.fr/~molli-p/pmwiki/uploads/Main/j2eeintr… · I L’int´egration avec le back-end : Il faut ´ecrire du code

RAS

Surete (Reliability)

Probabilite qu’un systeme fonctionne a t+1 s’il fonctionnait al’instant t En clair, plus le systeme est fiable plus il est Sure

Disponibilite (Availability)

Pourcentage du temps pendant lequel un systeme est disponibleS’exprime en nombre de 9 (99, 99,9 ... 99,999)

Serviceability

Facilite avec laquelle la maintenance corrective et preventive peuts’effectuer. Une plus grande serviceability ameliore en general ladisponibilite

Page 10: Programmation d’applications distribu´eespagesperso.lina.univ-nantes.fr/~molli-p/pmwiki/uploads/Main/j2eeintr… · I L’int´egration avec le back-end : Il faut ´ecrire du code

Passage a l’echelle

Mon systeme marche quand je suis tout seul

Marche-t-il encore pour 2 clients, 100 clients, 1000000 de clients

Quel est le cout pour augmenter la charge acceptable par monsysteme

Ajout de machines, Mise a jour des machines, Modification ducode,

Page 11: Programmation d’applications distribu´eespagesperso.lina.univ-nantes.fr/~molli-p/pmwiki/uploads/Main/j2eeintr… · I L’int´egration avec le back-end : Il faut ´ecrire du code

Middleware ou intergiciel

DefinitionIn a distributed computing system, middleware is defined as thesoftware layer that lies between the operating system and theapplications on each site of the system.

Page 12: Programmation d’applications distribu´eespagesperso.lina.univ-nantes.fr/~molli-p/pmwiki/uploads/Main/j2eeintr… · I L’int´egration avec le back-end : Il faut ´ecrire du code

Le Middleware

Composants ou systemes permettant de rendre transparent lesproblemes de distribution

I Transparence de l’heterogeneite

I Transparence de la localisation des services

I Transparence des appels de services

I Transparence de la gestion de la persistence

I Transparence de la gestion des transactions distribuees

I Transparence de la securite

I Transparence de la replication des services

Page 13: Programmation d’applications distribu´eespagesperso.lina.univ-nantes.fr/~molli-p/pmwiki/uploads/Main/j2eeintr… · I L’int´egration avec le back-end : Il faut ´ecrire du code

Comment faire ?

Utiliser un serveur d’application

I Prise en charge des aspects middleware par un systemespecialise

I Utiliser une architecture distribuee

I Fournit une solution aux differents problemes precedents

Plusieurs tiers

I Les clients (front end)

I Les sources de donnees (back end)

I Un ou plusieurs tiers entre eux pour

I Implanter les nouveaux services

I Integrer les differentes sources de donnees

I Masquer la complexite de l’entreprise aux clients

Page 14: Programmation d’applications distribu´eespagesperso.lina.univ-nantes.fr/~molli-p/pmwiki/uploads/Main/j2eeintr… · I L’int´egration avec le back-end : Il faut ´ecrire du code

Architecture Multi Tiers

Page 15: Programmation d’applications distribu´eespagesperso.lina.univ-nantes.fr/~molli-p/pmwiki/uploads/Main/j2eeintr… · I L’int´egration avec le back-end : Il faut ´ecrire du code

Architecture par Composants

Un composant respecte des regles d’ecriture pour pouvoirs’executer dans un containerPar exemple :

I Java Bean et la Bean Box

I Servlet et un container de Servlet

I EJB et un container d’EJB

I Un CD dans un lecteur de compact disque

Page 16: Programmation d’applications distribu´eespagesperso.lina.univ-nantes.fr/~molli-p/pmwiki/uploads/Main/j2eeintr… · I L’int´egration avec le back-end : Il faut ´ecrire du code

Architecture orientee service (SOA)

Un service ?

I Un service est un ensemble de composants fournissant desfonctions metier de haut niveau

I Les services sont autonomes (pas les composants)

I Un service est toujours disponible

I Les Web Services sont un moyen de fournir des services dansune architecture orientee service

I Souvent un service est developpe a partir de composants.

Page 17: Programmation d’applications distribu´eespagesperso.lina.univ-nantes.fr/~molli-p/pmwiki/uploads/Main/j2eeintr… · I L’int´egration avec le back-end : Il faut ´ecrire du code

Web Services

Un moyen de mettre en oeuvre une SOA

I XML technologies : SOAP, WSDL, WS-*

I Protocole pour echanger des informations dans un reseaudistribue - RPC, HTTP, SMTP...

I WSDL Web Service Description Language. XML pour decrirel’interface des services

I Neutralite par rapport aux langages et aux protocoles

Page 18: Programmation d’applications distribu´eespagesperso.lina.univ-nantes.fr/~molli-p/pmwiki/uploads/Main/j2eeintr… · I L’int´egration avec le back-end : Il faut ´ecrire du code

Reutilisabilite des services

Composer des services

I construire des services simples et reutilisables

I composer les services avec un couplage faible

I exemple : verification de carte bancaire, authentification,transfer d’argent

Page 19: Programmation d’applications distribu´eespagesperso.lina.univ-nantes.fr/~molli-p/pmwiki/uploads/Main/j2eeintr… · I L’int´egration avec le back-end : Il faut ´ecrire du code

Les Service Bus (Brokering)

Un ESB

I Mediateur entre les services et les clients

I Routeur pour les appels de services et pour les evenements

I Decodeur, encodeur pour l’interoperabilite

Page 20: Programmation d’applications distribu´eespagesperso.lina.univ-nantes.fr/~molli-p/pmwiki/uploads/Main/j2eeintr… · I L’int´egration avec le back-end : Il faut ´ecrire du code

Objets distribues

Un objet distribue est utilisable depuis un client distant

I d’un autre processus,

I d’un autre point du reseau

Page 21: Programmation d’applications distribu´eespagesperso.lina.univ-nantes.fr/~molli-p/pmwiki/uploads/Main/j2eeintr… · I L’int´egration avec le back-end : Il faut ´ecrire du code

Developpement d’un objet distribue

Prise en compte dans l’objet de son contexte d’execution

Middleware explicite

Le developpeur est charge des appels aux services transversaux(transaction, securite) Prise en compte par l’environnement ducontexte d’execution

Middleware implicite

Contexte declaratif C’est l’environnement qui se charge de tout (lecontainer)

Page 22: Programmation d’applications distribu´eespagesperso.lina.univ-nantes.fr/~molli-p/pmwiki/uploads/Main/j2eeintr… · I L’int´egration avec le back-end : Il faut ´ecrire du code

Middleware Explicite

1 t r a n s f e r ( Account account1 , Account account2 , l ong amount ) {2 // 1 : C a l l midd leware API to per fo rm a s e c u r i t y check3 // 2 : C a l l midd leware API to s t a r t a t r a n s a c t i o n4 // 3 : C a l l midd leware API to l oad rows from the database5 // 4 : Sub t r a c t the ba l ance from one account , add to the o th e r6 // 5 : C a l l midd leware API to s t o r e rows I n the da tabase7 // 6 : C a l l midd leware API to end the t r a n s a c t i o n8 }

Page 23: Programmation d’applications distribu´eespagesperso.lina.univ-nantes.fr/~molli-p/pmwiki/uploads/Main/j2eeintr… · I L’int´egration avec le back-end : Il faut ´ecrire du code

Middleware Implicite

1 t r a n s f e r ( Account account1 , Account account2 , l ong amount ) {2 // 1 : Sub t r a c t the ba l ance from one account , add to the o th e r3 }

Page 24: Programmation d’applications distribu´eespagesperso.lina.univ-nantes.fr/~molli-p/pmwiki/uploads/Main/j2eeintr… · I L’int´egration avec le back-end : Il faut ´ecrire du code

Les solutions existantes

I .NET (implantation Microsoft) Windows NT + DCOM +MSMQ (message queue) + MTS (transactions) + Wolfpack(clustering) + IIS (web server)+ MMC (administration etdeploiement)

I Sun J2EE (specification)

I OMG Corba (specification) et les composants Corba.

Page 25: Programmation d’applications distribu´eespagesperso.lina.univ-nantes.fr/~molli-p/pmwiki/uploads/Main/j2eeintr… · I L’int´egration avec le back-end : Il faut ´ecrire du code

Deuxieme partie II

L’environnement J2EE

Page 26: Programmation d’applications distribu´eespagesperso.lina.univ-nantes.fr/~molli-p/pmwiki/uploads/Main/j2eeintr… · I L’int´egration avec le back-end : Il faut ´ecrire du code

J2EE

Definit une architecture standard incluant

I Un modele de programmation (application multi-tiers, clientlegers)

I Une plate-forme (ensemble de specifications et de politiquesrequises)

I Un ensemble de tests de compatibilite

I Une implantation de reference

I Des patrons de conceptions (blueprints)

Page 27: Programmation d’applications distribu´eespagesperso.lina.univ-nantes.fr/~molli-p/pmwiki/uploads/Main/j2eeintr… · I L’int´egration avec le back-end : Il faut ´ecrire du code

Architecture d’une appli J2EE

Page 28: Programmation d’applications distribu´eespagesperso.lina.univ-nantes.fr/~molli-p/pmwiki/uploads/Main/j2eeintr… · I L’int´egration avec le back-end : Il faut ´ecrire du code

La plateforme J2EE

I EJB : definit la facon dont les composant doivent etre ecrit etle contrat qu’ils doivent respecter avec le serveur d’application

I RMI : communication inter procedes

I JNDI : service de nommage

I JDBC : connection avec les bases de donnees

I JTA : service de transaction

I JCA : service de connection

I JMS : service de messagerie

I JSP : servlet et Java Server Page adapte a la construction decomposant reseau

I JSF : framework de construction d’interfaces et de controleur(V et C de MVC)

Page 29: Programmation d’applications distribu´eespagesperso.lina.univ-nantes.fr/~molli-p/pmwiki/uploads/Main/j2eeintr… · I L’int´egration avec le back-end : Il faut ´ecrire du code

La plateforme J2EE (suite)

I Java IDL : permet l’integration avec d’autres langages (enparticulier a travers CORBA)

I JavaMail

I JAX-WS : java API pour les Web Services.

I Web Services Metadata pour la plateforme Java. Facilite ledeveloppement et le deploiement de Web Services.

I JAXP : Java API pour le parsing XML

I JAXB : Java API for XML Binding (transformation dedocument XML en objets)

Page 30: Programmation d’applications distribu´eespagesperso.lina.univ-nantes.fr/~molli-p/pmwiki/uploads/Main/j2eeintr… · I L’int´egration avec le back-end : Il faut ´ecrire du code

JNDI

Java naming and directory interface

I Permet d’acceder a des systemes de repertoires

I Permet d’acceder a des services ou a des objets enconnaissant uniquement un nom

Page 31: Programmation d’applications distribu´eespagesperso.lina.univ-nantes.fr/~molli-p/pmwiki/uploads/Main/j2eeintr… · I L’int´egration avec le back-end : Il faut ´ecrire du code

JDBC

Java Database Connectivity

I API pour acceder a des bases de donnees relationnelles

I Driver pour la plupart des SGBD majeurs (oracle, sybase,mysql, mssql,...)

I Permet de porter une application d’un SGBD a un autre

Page 32: Programmation d’applications distribu´eespagesperso.lina.univ-nantes.fr/~molli-p/pmwiki/uploads/Main/j2eeintr… · I L’int´egration avec le back-end : Il faut ´ecrire du code

JTA

Java Transaction ServiceInterface standard de gestion de transactions

Page 33: Programmation d’applications distribu´eespagesperso.lina.univ-nantes.fr/~molli-p/pmwiki/uploads/Main/j2eeintr… · I L’int´egration avec le back-end : Il faut ´ecrire du code

JMS

Java Messaging Service

I Permet de faire communiquer des applications par envois demessages

I Interface standard permettant l’acces a differents MessageOriented Middleware (IBM MQSeries, MSMQ)

I Utile pour des interaction asynchrones

Page 34: Programmation d’applications distribu´eespagesperso.lina.univ-nantes.fr/~molli-p/pmwiki/uploads/Main/j2eeintr… · I L’int´egration avec le back-end : Il faut ´ecrire du code

Java Servlet

I Utilises pour etendre les fonctionnalites d’un serveur Web

I Les servlets sont des composants executables dans un servletcontainer (Tomcat, Jetty)

I Equivalent a des scripts CGI (Perl, sh) mais en Java

Page 35: Programmation d’applications distribu´eespagesperso.lina.univ-nantes.fr/~molli-p/pmwiki/uploads/Main/j2eeintr… · I L’int´egration avec le back-end : Il faut ´ecrire du code

JSP

Java Server Pages

I JSP scripts peuvent etre inclus dans des pages Web

I Scripts executes du cote serveurs (compiles sous forme deservlets)

I Simplification de l’ecriture de page Web

I equivalent a PHP pour Java (hum...)

Page 36: Programmation d’applications distribu´eespagesperso.lina.univ-nantes.fr/~molli-p/pmwiki/uploads/Main/j2eeintr… · I L’int´egration avec le back-end : Il faut ´ecrire du code

JSF

Java Server Faces

I Framework pour le developpement d’applis Web

I Modele de composants et API pour les developper

I Tags specialises pour utiliser les composants dans une pageJSP et les faire communiquer avec les objets serveur.

I Modele d’evenements adaptes a l’environnement Web

Page 37: Programmation d’applications distribu´eespagesperso.lina.univ-nantes.fr/~molli-p/pmwiki/uploads/Main/j2eeintr… · I L’int´egration avec le back-end : Il faut ´ecrire du code

Java IDL

Implantation par Sun de l’interface CORBA Permetl’interoperabilite avec des applications ecrites dans d’autreslangages

Page 38: Programmation d’applications distribu´eespagesperso.lina.univ-nantes.fr/~molli-p/pmwiki/uploads/Main/j2eeintr… · I L’int´egration avec le back-end : Il faut ´ecrire du code

Java Mail

I Permet l’envoi de courrier electronique de facon independantede la plate-forme utilisee

I Permet l’acces a des serveurs de mail selon differentsprotocoles (pop, imap)

I Interface standardisee pour la gestion de boites aux lettres etde messages sous differents formats (gestion des multi partmime message avec JAF)

Page 39: Programmation d’applications distribu´eespagesperso.lina.univ-nantes.fr/~molli-p/pmwiki/uploads/Main/j2eeintr… · I L’int´egration avec le back-end : Il faut ´ecrire du code

J2EE CA

Permet l’acces aux EIS depuis une plate-forme J2EE Une appliJ2EE doit pouvoir interfacer les systemes d’information existant(mainframe, ERP systems ou autres)

Page 40: Programmation d’applications distribu´eespagesperso.lina.univ-nantes.fr/~molli-p/pmwiki/uploads/Main/j2eeintr… · I L’int´egration avec le back-end : Il faut ´ecrire du code

JAAS

Java Authentication and Authorization Service

I Fournit des services d’authentification et de securite

I Permet une specification declarative des moyens d’autorisationet de gestion des droits d’acces.

Page 41: Programmation d’applications distribu´eespagesperso.lina.univ-nantes.fr/~molli-p/pmwiki/uploads/Main/j2eeintr… · I L’int´egration avec le back-end : Il faut ´ecrire du code

JAX-WS

Java API for WML Web Services

I Permet l’appel de services web depuis un client Java

I Mapping WSDL to Java et Java to WSDL

I Binding SOAP et HTTP

Page 42: Programmation d’applications distribu´eespagesperso.lina.univ-nantes.fr/~molli-p/pmwiki/uploads/Main/j2eeintr… · I L’int´egration avec le back-end : Il faut ´ecrire du code

JAXB

Java Architecture for XML Binding

I Fournit les services permettant de lier des objets Java a leurrepresentation XML

I transformation Java XML Java

Page 43: Programmation d’applications distribu´eespagesperso.lina.univ-nantes.fr/~molli-p/pmwiki/uploads/Main/j2eeintr… · I L’int´egration avec le back-end : Il faut ´ecrire du code

Les technologies

Page 44: Programmation d’applications distribu´eespagesperso.lina.univ-nantes.fr/~molli-p/pmwiki/uploads/Main/j2eeintr… · I L’int´egration avec le back-end : Il faut ´ecrire du code

Conclusion

I J2EE est un framework complet

I Ensemble de services pour applications distribuees

I Complique a maitriser entierement

I Standard

Page 45: Programmation d’applications distribu´eespagesperso.lina.univ-nantes.fr/~molli-p/pmwiki/uploads/Main/j2eeintr… · I L’int´egration avec le back-end : Il faut ´ecrire du code

JEE 5

Page 46: Programmation d’applications distribu´eespagesperso.lina.univ-nantes.fr/~molli-p/pmwiki/uploads/Main/j2eeintr… · I L’int´egration avec le back-end : Il faut ´ecrire du code

Autres Solutions

I Utilisation de container generique

I Composition de services middleware

SolutionsSpring Jboss AS Hibernate