Architecture des systèmes d information répartis Cours 2 : servlets et BD, EJB Sorina Ionica 1
JDBC Architecture multicouche J2EE Couche client Conteneur d'applet Applet Couche Web Conteneur Web J2EE Couche métier Conteneur d'ejb J2SE JSP Servlet EJB Conteneur du client de l'application Client de l'application JDBC JDK JDK JDK Couche SI Base de données 2
Les servlets et les BD Connections aux bases de données via JDBC La connexion reste toujours sur le serveur => sécurisation des données Connexion dans la servlet OU Possibilité de créer des pools de connexion 3
Accès aux données - JDBC 1.Créer une connexion à la base (DataSource) 2.Créer une requête (Statement) 3.Exécuter une requête 4.Traiter les résultats 4
Le JNDI JNDI (Java Naming and Directory Interface) Ensemble de fonctions permettant l'accès aux services de nommage et d annuaire La source de données est obtenue en effectuant une recherche dans un contexte Deux imports : import javax.naming.* ; import javax.naming.directory.* ; 5
Configuration Declaration de la ressource dans le fichier c:\serveur\tomcat5_5\conf\serveur.xml <!-- JNDI de la base test --> <Resource name="base_test" type="javax.sql.datasource" password="" driverclassname="com.mysql.jdbc.driver" maxidle="2" maxwait="500" username="root" url="jdbc:mysql://localhost/test?autoreconnect=true" maxactive="500" />
Connexion Créer un objet de type InitialContext pour chercher dans le contexte Context initctx = new InitialContext(); Context envctx = (Context) initctx.lookup("java:comp/env"); ds=(datasource) envctx.lookup("base_test"); La methode principale de DataSource est getconnection() : Connection BD=ds.getConnection();
Statement Obtenir un objet implémentant l'interface Statement Connection BD =... Statement stmt = BD.createStatement(); Exécuter une requête String s = "SELECT * FROM personne"; ResultSet r = stmt.executequery(s);
Requêtes pour la mise à jour Requêtes de mise à jour et de création e.g. update, drop, create Statement stmt = conn.createstatement(); int i = stmt.executeupdate("drop TABLE personne"); Observation : retournent un nombre JDBC 9
Traitement des résultats ResultSet r = stmt.executequery(s); while (r.next()) {... out.println(r.getstring("nom ")); out.println(r.getstring("prenom"));... }
Les Entreprise Java Beans (EJB) 11
Les EJB - Présentation Modèle de programmation pour des composants distribués (accessibles à distance) et couplés à un SGBD Composants Java portables, réutilisables et déployables qui peuvent être assemblés pour créer des applications. 12
Les EJB - Avantages Le conteneur EJB fournit aux EJB des services Gestion des transactions Gestion des autorisations Persistance Gain de temps pour le développeur Les EJB contiennent la logique applicative 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 13
Les EJB Les serveurs d application EJB Serveur d'applications système hébergeant des EJB respectant les spécifications EJB Serveurs d'applications existants J2EE Sun Java 2 Enterprise Edition commerciaux WebSphere (IBM), WebLogic (BEA), Sun ONE, Oracle App Serv, >20 voir java.sun.com/j2ee/compatibility.html gratuits JBoss, JOnAS, Glassfish, Geronimo, OpenEJB, JRun 14
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 15
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 16
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 17
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 18
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()); 19