Architecture Logicielle Les applications d'entreprise exemple : La technologie JEE Année universitaire 2013/2014 Semestre 1
Introduction Une application d'entreprise a généralement les caractéristiques suivantes: - Données persistantes: les données persistantes sont des données qui sont utilisés dans de multiples exécutions du programme. Ces données persistent souvent pendant des années et survivent avec des programmes et du matériel. - Données volumineux : Le volume des données dans les applications d'entreprise est souvent de l'ordre de millions de documents, généralement organisés en bases de données. - Accès concurrents : l'accès simultané provoque la nécessité de veiller à ce que deux personnes ne mettent pas à jour les mêmes données simultanément. Un exemple est constitué par les systèmes basés sur le Web : de nombreux utilisateurs peuvent accéder à un tel système en même temps. 2
Introduction - Interface utilisateur compliquée : interfaces utilisateurs sont souvent constitués de centaines d'écrans distincts, personnalisés pour différents types d'utilisateurs. - Intégration avec d'autres applications : Comme une application d'entreprise vit rarement seul, elle doit s'intégrer à d'autres applications : les logiciels existants, par exemple. Différentes technologies peuvent être utilisées, et différentes techniques de collaboration, ce qui rend l'intégration une tâche difficile. Les problèmes sont encore plus lorsque l'intégration avec les logiciels des partenaires est nécessaire. Parfois, même les significations légèrement différentes pour les mêmes champs, appelés non harmonie conceptuelle, causent des problèmes d'intégration. - La logique métier : la logique d'entreprise définit les activités, les définitions et les contraintes qui s'appliquent à une organisation à atteindre ses objectifs. La logique métier est représentée comme un ensemble de conditions, les contraintes et les règles métier. Malheureusement, la logique métier a souvent la forme d'un ensemble des conditions au hasard étranges qui se sont produits par la recherche de petits avantages, et ne peut pas être influencé par le département informatique. 3
Introduction : Trois principales couches Un Patron architectural qui est généralement appliquée aux applications d'entreprise est le patron de couches. Les applications d'entreprise ont trois couches principales: - La couche de logique de présentation est responsable de l'interaction avec l'utilisateur. Une interface en ligne de commande peut être utilisé, mais dans la plupart des cas, l'interface est un client riche ou une interface web. - La couche de logique de domaine contient la fonctionnalité principale du système. Ici, l'entrée est validée et les résultats sont calculés. Cette couche est souvent structuré avec des objets qui modélisent des concepts du monde réel. - La couche de logique de source de données met en œuvre la communication de la couche de logique de domaine avec une base de données, avec des systèmes de messagerie ou avec d'autres applications. 4
5
Introduction : Un exemple d'une architecture en ces trois couches est le Java EE architecture multi-tiers. La figure ci-dessus montre quatre niveaux sur trois machines. La différence entre les concepts de «tier» et «couche» est que une «couche» concerne la séparation logique de la fonctionnalité, tandis qu'un «tier» concerne la séparation physique de la fonctionnalité. Dans cet exemple, le «tier» Web et «tier» entreprise peuvent fonctionner sur deux machines différentes, dans le cas de figure ci-dessus, ils s exécute sur la même machine. Le «tier» client s'exécute sur le poste client, le «tier» Web et le «tier» de l'entreprise sur la machine serveur Java EE, et le «tier» EIS (Les systèmes d'informations d'entreprise) sur la machine du serveur de base de données. Le «tier» client et le «tier» Web forment ensemble la couche de présentation. Le «tier» de l'entreprise contient la logique de domaine et la logique de la source de données, le «tier» EIS contient les données que le «tier» de la source de données met à disposition. 6
Introduction : La logique de présentation dans l'architecture Java EE peut être implémentée en utilisant les servlets et les JSP ( JavaServer Pages), applets, Java et JavaScript applications (clients riches ), la logique métier et la logique de source de données sont mises en œuvre par les «Enterprise JavaBeans». - Les Servlets contiennent du code Java pour générer du code HTML. Les Servlets fonctionnent tous dans la même JVM ( Java Virtual Machine ) qui élimine les coûts de démarrage. - JavaServer Pages (JSP) sont similaires à des pages PHP : les pages JSP contiennent du code embarqué dans HTML. Ni les servlets ni les JSP séparent clairement le HTML et la logique - Enterprise JavaBeans (EJB) sont des composants réutilisables. Ils peuvent être utilisés pour les entités (pour des objets de base de données par exemple) ainsi que pour les sessions (le processus de communication avec un client). Ils sont intrinsèquement distribués: la communication se fait à travers le «système Java Remote Method Invocation (RMI)» ou par CORBA. 7
Définitions de J2EE/Java EE Sun (le concepteur de Java) a mis en place un ensemble de technologies pour réaliser des applications Web. Ces technologies sont regroupées sous le nom J2EE (Java 2 Entreprise Edition), désormais Java EE. La plateforme Java EE s appuie entièrement sur le langage Java. Java EE est donc une norme, qui permet à des développeurs, entreprises de développer leur propre application qui implémente en totalité ou partiellement les spécifications de SUN. En simplifiant, il est possible de représenter Java EE comme un ensemble de spécifications d API, une architecture, une méthode de packaging et de déploiement d applications et la gestion d applications déployées sur un serveur compatible Java. 8
Définitions de J2EE/Java EE Java EE ne remplace en aucun cas J2SE. Au contraire, J2SE est la base de Java EE qui est plus complet et qui est axé sur le Web. La plateforme J2SE offre des outils de développement d applications client/serveur, applications graphiques fenêtrées et Applets. La plateforme J2SE est composée des éléments suivants : - La machine virtuelle Java (JVM) : permet d exécuter des applications Java. Elle constitue une passerelle et permet une portabilité entre les architectures (Windows, Linux, Mac...). - La bibliothèque de classes Java : un ensemble de composants logiciels prêt à l emploi. - Les outils de développement : le compilateur javac, un interpréteur Java nommé java, le générateur de documentation javadoc, la console de supervisation Jconsole... La plateforme Java EE est une extension de la plateforme J2SE. Elle permet un développement d applications qui vont s exécuter sur un serveur d applications. Les applications seront utilisées par des clients légers (comme des navigateurs Web) ou bien des applications lourdes (IHM) 9
10
11
L API Java EE Une API est un ensemble de librairies ou bibliothèques de fonctions destinées à être utilisées par les programmeurs dans leurs applications. La plateforme Java EE est composée de plusieurs API (ensemble de libraires et services). Java EE fait intervenir trois types de composants logiciels (Servlets, JSP, EJB). a. Les Servlets L API Servlet fournit les éléments nécessaires à la conception de composants Web dynamiques avec le langage Java. Les Servlets sont des composants logiciels entièrement écrits en Java. Les Servlets effectuent des traitements côté serveur en réponse aux requêtes des clients distants. Une Servlet est chargée en mémoire lors de son premier appel. De même, il n existe qu une seule instance d une Servlet en mémoire, le serveur utilise alors un thread global pour traiter les demandes émises par les clients. 12
13
14
L API Java EE a. Les Servlets : Cycle de vie d une Servlet Une Servlet est une classe Java. Cette classe doit être chargée puis interprétée par une machine virtuelle Java (celle du serveur d applications). La Servlet est alors prête à recevoir des requêtes et à renvoyer des réponses. Lorsque l application ou le serveur s arrête, la Servlet est détruite, puis son instance est nettoyée par le ramassemiettes de la machine virtuelle. 15
L API Java EE a. Les Servlets : Cycle de vie d une Servlet Les Servlets permettent de développer des pages dynamiques, dont le contenu est créé à la volée sur demande. C est le cas par exemple, lorsqu un client souhaite obtenir la liste des articles d une boutique pour une plage de prix. Les pages HTML sont alors générées dynamiquement en fonction de critères spécifiques (prix, dates, recherches...). Une Servlet est un composant Java qui implémente l interface javax.servlet.servlet. Cette interface permet de gérer les requêtes du client, dirigées vers la Servlet en question. Le serveur reçoit une demande adressée à une Servlet sous la forme d une requête HTTP. Il transmet alors la requête à la Servlet concernée par le traitement puis renvoie la réponse fournie par celle-ci au client. La Servlet est gérée par le conteneur de Servlets Java EE. Lorsque le serveur Web reçoit la requête du client, il charge la Servlet (si elle n est pas encore chargée) et invoque l interface javax.servlet.servlet afin de satisfaire la requête. 16
L API Java EE a. Les Servlets : Cycle de vie d une Servlet Exemple de Servlet simple : public class PremiereServlet extends HttpServlet { protected void doget(httpservletrequest request, HttpServletResponse response) throws ServletException, java.io.ioexception { } protected void dopost(httpservletrequest request, HttpServletResponse response) throws ServletException, java.io.ioexception { doget(request, response); } } 17
a. Les Servlets : 18
L API Java EE b. Les JSP (Java Server Page) L API JSP permet de développer des pages Web dynamiques rapidement à partir d un squelette HTML et de données incluses directement dans chaque page. Les JSP permettent d insérer des bouts de code Java (scriptlets) directement dans le code HTML. Du point de vue de la structure, une JSP est très proche d une page PHP ou bien ASP. Une page JSP est un fichier qui porte l extension.jsp ou.jspf (pour les fragments de code). Lors de la création de Servlets, le but est de construire des composants capables de produire un service (essentiellement du code HTML). Toutefois, ce principe est parfois complexe pour des personnes qui ne sont pas habituées à la programmation objet et au code 100% Java. C est pour ces raisons que les développeurs de chez SUN ont inventé JSP. La page JSP est transformée en classe Java puis compilée en Servlet par le serveur d applications. Ce traitement est réalisé par le serveur d applications au premier appel de la page et à chaque fois que cette page est modifiée par un programmeur. C est cette étape qui nécessite un serveur d applications Java EE, un compilateur Java et qui par conséquent nécessite pour la majorité l installation de Java avec un JDK plutôt qu un JRE. 19
20
L API Java EE b. Les JSP (Java Server Page) : Cycle de vie d une JSP 21
L API Java EE b. Les JSP (Java Server Page) : Cycle de vie d une JSP Le résultat de la compilation (essentiellement du code HTML) est renvoyé au client. Cette technologie est simple, légère et rapide. Les développeurs de pages JSP peuvent ainsi mélanger du contenu statique et du contenu dynamique. 22
L API Java EE b. Les JSP (Java Server Page) : Cycle de vie d une JSP 23
L API Java EE b. Les JSP (Java Server Page) : Cycle de vie d une JSP <% System.out.println("Ma première Servlet"); out.println("<h1>ma première Servlet<h1>"); %> Il est donc possible d avoir des équipes de développement séparées avec une personne spécialiste de HTML/XHTML et du design et un programmeur Java qui réalise les scriptlets. Les JSP sont exécutées sous la forme de Servlets, elles disposent donc des mêmes fonctionnalités que celles-ci et peuvent ainsi manipuler les sessions, les bases de données, les mails... 24
b. Les JSP (Java Server Page) : 3 parties d'une JSP scriptlets <% %> déclarations <%! %> expressions <%= %> 25
b. Les JSP (Java Server Page) : Scriptlets <% %> contient du code Java Exemple : <% String[] langages = {"Java", "C++", "Smalltalk", "Simula 67"}; out.println("<h3>principaux langages orientés objets : </h3>"); for (int i=0; i < langages.length; i++) { out.println("<p>" + langages[i] + "</p>"); } %> 26
b. Les JSP (Java Server Page) : Déclarations <%! %> Sont des déclarations Java. Seront insérées comme des membres de la servlet Permet de définir des méthodes ou des données membres Exemple : <%! int random4() { return (int)(math.random() * 4); } %> <%! int nombrefetiche = 2; %> 27
Expressions <%= %> En fait expression Java qui renvoie un objet String ou un type primitif. Un raccourci pour <% out.println( ); %> <%= XXX %> ~ <% out.println(xxx); %> attention au ; est donc converti en out.println( ) dans la méthode _jspservice( ) de la servlet. La somme est: <%= (195 + 9 + 273) %> Je vous réponds à l'adresse : <%= request.getparameter("email_address") %> 28
b. Les JSP (Java Server Page) : Objets prédéfinis dans une JSP 3 objets peuvent être immédiatement utilisés dans une expression ou une scriptlet d'une JSP : out : le canal de sortie request (HttpServletRequest) : l'objet requête response (HttpServletResponse) : l'objet réponse Il y en a d'autres Cf. ces mêmes objets dans une servlet 29
Un exemple complet : complet.jsp <html><head><title>jsp complet</title></head> <body> <%! String[] langages = {"Java", "C++", "Smalltalk", "Simula 67"}; int random4() { return (int) (Math.random() * 4); } %> <p>parmi tous les langages orientés objets :</p> <ol> <% for (int i=0; i < langages.length; i++) { out.println("<li>" + langages[i] + "</li>"); } %> </ol> <p>le prochain que j'apprends est <b><%= langages[random4()] %> </b></p> </body> </html> 30
31
32
L API Java EE (JDBC, Servlets, JSP) c. LES EJB (Entreprise Java Bean) Les EJB sont des composants métier distribués, c est-à-dire qu ils sont invocables par le réseau. Un composant EJB est une classe qui possède des attributs et méthodes pour mettre en application la logique métier. L API EJB fournit un ensemble de services (persistance, transaction...) de gestion de composants. Il existe plusieurs (trois) types d EJB : les beans sessions, les beans entités et les beans contrôlés par message. - EJB session : il permet de maintenir des informations sur les clients et les traitements qu ils réalisent. - EJB entité : c est un composant persistant, son état est sauvegardé dans une base de données. - EJB piloté par message : les EJB message sont semblables aux EJB session mais sont invoqués différemment (par le biais de Java Message Service). 33
34
35
36
37
38
39
L API Java EE d. JDBC (Java DataBase Connectivity) L API JDBC permet de faciliter l obtention de connexions JDBC vers des sources de données (essentiellement des bases de données, mais également annuaire...). L API fournit les librairies pour se connecter aux bases de données et pour la gestion des transactions. e. JNDI (Java Naming and Directory Interface) L API JNDI permet d accéder à des services de nommage ou d annuaire (LDAP par exemple). Cette API est par exemple utilisée pour se connecter à une source de données pour des accès à la base de données ou la gestion des accès (associée aux Realms). JNDI permet d implémenter un service de nommage. L ensemble des ressources que le serveur d applications met à disposition via ces API de services, doit être enregistré avec un nom logique unique, permettant aux applications de rechercher cette ressource dans le serveur. f. JavaMail L API JavaMail fournit des fonctionnalités de gestion de courrier électronique (transfert, type de contenu, pièces jointes...). JavaMail permet la création et l envoi de messages électroniques via Java. Cette API permet de manipuler les protocoles de messagerie Internet comme POP, IMAP, SMTP. JavaMail n est pas un serveur de courrier mais plutôtun outil qui permet d interagir avec ce type de serveur. 40
L API Java EE g. JPA (Java Persistance API) Les entités Beans ont été développées pour le modèle de persistance en Java EE. Ce modèle de composants avait de nombreux détracteurs. Pour apporter des solutions à ce problème, de nouvelles spécifications, des outils de mapping objet/relationnel comme TopLink et Hibernate ont été développés. Java EE apporte donc un nouveau modèle de persistance nommé JPA. JPA s appuie sur JDBC pour communiquer avec la base de données mais permet d éviter de manipuler directement les fonctionnalités de JDBC et le langage SQL. 41
42
L API Java EE 3. Les autres API Parmi les autres API Java EE, il faut citer : JMS (Java Message Service) permet d accéder à un service de messages pour une gestion asynchrone des composants. Le composant appelant poste un message (en arrièreplan) à destination d une file d attente de messages hébergés par le serveur d applications puis continue son traitement sans attendre. RMI (Remote Method Invocation) permet de concevoir des applications distribuées en Java. RMI permet l appel de fonctionnalités à distance par le biais de la communication réseau. JTA (Java Transaction API) permet de mettre en place une gestion des transactions dans des applications distribuées (commit, rollback...). Le principe des transactions est de considérer un ensemble d opérations comme une seule. Ce type de service est obligatoire pour des traitements bancaire. Par exemple, une application bancaire qui permet de réaliser des virements entre deux comptes va d abord débiter le premier compte et ensuite créditer le second compte. Si le débit puis le crédit aboutissent sans problème, alors la transaction est validée. JDBC permet de gérer les transactions sur une base de données locale mais si les données sont réparties, il faudra alors utiliser les transactions JTA. JTA permet en effet de gérer les transactions distribuées qui font intervenir différentes bases de données. 43
L API Java EE 3. Les autres API JCA (J2EE Connector Architecture) : ce connecteur permet à Java EE d utiliser des gros systèmes tels que les mainframes. JAAS (Java Authentication and Autorisation Service) est un mécanisme de sécurité géré par le serveur d applications. XML n est pas véritablement une API Java mais il est très utilisé pour la mise en place et la configuration des applications. De même, XML est la base d un nouveau mode de communication entre les applications qui est appelé Web Service. Par exemple, JAXP (Java API for XML Parsing) analyse des fichiers ou données XML, JAXRPC (Java API for XML based RPC) utilise des Web Services et JAXB (Java API for XML Binding) permet de générer des classes Java à partir de schémas XML ou inversement. 44
Architecture MVC modèle = Le modèle qui est représenté par les EJB et/ou JavaBeans et/ou systèmes de persistances (Hibernate, objets sérialisés en XML, stockage de données par le biais de JDBC...). les données accédées par un code Java (JDBC, RMI, EJB, etc.) vues = qui est représentée par les JSP contrôleur = qui est représenté par les Servlets. 45
J2EE MVC Frameworks (Open Source ) Frameworks Populaires : 1. Spring Framework 2. Struts Framework 3. JavaServerFace (jsf) 46
Java EE Web Application (JSP/Servlet, EJB, JPA), a simple approach. http://www.youtube.com/watch?v=_zw27y2boco 47