Architecture des systèmes d’information répartis Cours 2 : servlets et JSP, EJB Sorina Ionica 1 Architecture multicouche J2EE Couche client Conteneur d'applet Applet Couche Web Couche métier Conteneur Web JSP Conteneur d'EJB Servlet Client de l'application JDK EJB JDBC Conteneur du client de l'application JDBC J2SE J2EE JDK JDK Couche SI Base de données 2 Conteneur Web Composants web -Servlets et JSP s’exécutant dans un conteneur web Préparation dynamique du contenu Traitement et formatage liés à la présentation 3 Example 1 : bonjour.jsp <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" charset=UTF-8"> content="text/html; <title>Une première JSP</title> </head> <body> <h1>Bonjour le monde !</h1> </body> </html> 4 Example 2 : page dynamique <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> ... <p>Trois fois <br> <% for (int i = 0 ; i < 3 ; i++) { %> Bonjour le monde ! <br> <% } %> sans effort !</p> …. </html> 5 Les Entreprise Java Beans (EJB) 6 Les EJB - Présentation Modèle de programmation pour des composants distribués (accessibles à distance) et couplés à un BD Composants Java portables, réutilisables et déployables qui peuvent être assemblés pour créer des applications. 7 Les EJB - Avantages Le conteneur EJB fournit aux EJB des services Les EJB contiennent la logique applicative Gestion des transactions Gestion des autorisations Persistance Gain de temps pour le développeur Les clients ne gèrent plus les règles métiers Les EJB sont portables Réutilisation d’EJB existants Déployable sur n’importe quel serveur compatible J2EE 8 Les EJB – Les serveurs d’application EJB Serveur d'applications système hébergeant des EJB respectant les spécifications EJB intègre souvent un serveur web (Tomcat) Serveurs d'applications existants J2EE Sun Java 2 Enterprise Edition commerciaux WebSphere (IBM), WebLogic (BEA), Sun ONE, Oracle App Serv, … gratuits JBoss/WildFly, JOnAS, Glassfish, … 9 Les EJB – les différents types EJB local vs remote Local Ne peut être invoqué que depuis une classe java exécutée dans la même machine virtuelle java Exécution simple d'objets Java EJB sécurisés Remote Peut être invoqué depuis n'importe où Connexion au serveur + recherche de l'EJB dans l'espace de nommage + RMI 10 EJB3 – Les EJB session package hw; import javax.ejb.Remote; @Remote public interface hello { public String sayHello(); } package hw; public class helloBean implements hello { @Override public String sayHello() { return "Hello world"; } } 11 Les EJB – les EJB session EJB session : chargé d’effectuer une tâche pour un client Avec etat Un EJB est dédié à un client durant toute la vie de son instanciation Toute invocation d’une méthode de l’EJB par le client sera traitée par le même EJB 12 Les EJB – les EJB session EJB session : chargé d’effectuer une tâche pour un client Sans état pas de maintient de l’état conversationnel Peut repondre aux demandes de plusieurs clients 13 Les EJB – les EJB session public class CartBean implements Cart { private List products; private void initializeBean(){ products = new ArrayList<>(); } public void addProductToCart(Product product) { products.add(product); } } 14 EJB3 – Les EJB session EJB3 Une interface business (local et remote) La classe du bean Des annotations @Remote, @Local, @stateless ou @stateful Un cycle de vie suivi par des méthodes de la classe du bean taggées : @PostConstruct, @PreDestroy, @PrePassivate, @PostActivate 15 EJB3 – Les EJB session package hw; import javax.ejb.Remote; @Remote public interface hello { public String sayHello(); } package hw; import javax.ejb.Stateless; @Stateless public class helloBean implements hello { @Override public String sayHello() { return "Hello world"; } } Context context=new InitialContext(); hello bean=(hello)context.lookup("helloBean/remote"); System.out.println(bean.sayHello()); 16