Université de Versailles-Saint-Quentin Java avancé Tuyêt Trâm DANG NGOC Laboratoire PRiSM Université de Versailles-Saint-Quentin Documents ayant servis pour ces transparents : Documents de références sur http://java.sun.com/* Livre « XML » de Georges Gardarin Documents de Ian Cole Documents de Ming-Hung Cho <dntt@prism.uvsq.fr> Cours CNAM, le 26 novembre 2003
Tuyêt Trâm DANG NGOC - Université de Versailles Evolution de Java Personal Java 1.0 / 1.1 / 1.2 FDT, I/O, Collection et Outils, Applet + Thread, AWT + Swing, TCP/ IP + UDP / IP, RMI, New I/O, Expression rationnelle, Image I/O, Java2D, Java3D, JAI, JMF, Son, JCE, JSSE, JAAS Java2 SDK SE 1.3.0, 1.3.1, 1.4.0 JSP + Servlet + JavaBeans, EJB, RMI-IIOP and CORBA, JNDI, JMS, JDBC, XML OAK JDK1.0 JDK 1.1 Java2 SDK EE 1.2.1 Java2 SDK EE 1.3.0 Plateforme Java Java2 SDK ME (Micro Edition) Pour téléphones cellulaires PDA, JINI, JIRO ** Plateforme Java2 Java embarqué Java 1.0.2 Java 1.1.1 , 1.1.2, 1.1.3, 1.1.8 Java 1.2.2 Tuyêt Trâm DANG NGOC - Université de Versailles
Tuyêt Trâm DANG NGOC - Université de Versailles Threads Un thread -appelé parfois processus léger - est un unique flux de contrôle séquentiel d’un programme. On peut utiliser les threads afin d’isoler des tâches. Tuyêt Trâm DANG NGOC - Université de Versailles
Tuyêt Trâm DANG NGOC - Université de Versailles Vie et mort d'un thread 1. on crée le thread – new; 2. on le démarre – start; 3. le thread s’exécute alors, et reste vivant jusqu’à la fin de son code exécution, ou jusqu’à ce que ses méthodes stop ou destroy soient invoquées ; 4. durant son exécution, le processus peux être bloqué ou exécutable. Tuyêt Trâm DANG NGOC - Université de Versailles
Tuyêt Trâm DANG NGOC - Université de Versailles Inactivité d'un thread Un thread est bloqué (Not Runnable), dans les cas suivants : sa méthode sleep a été invoquée ; le thread a appelé la méthode wait afin d’attendre la réalisation d’un certain évènement ; le thread est en attente d’une entrée/sortie. Suivant la cause de bloquage du thread, sa remise en activité peut-être : si un thread a été mis en sommeil, alors, le nombre de millisecondes demandes devra être écoulé ; si un thread attend une condition, alors, un autre objet doit l’avertir du changement de la condition – notify ou notifyAll ; si un thread est bloqué en attente d’une entrée/sortie alors il faut attendre que cette entrée/sortie se libère. Tuyêt Trâm DANG NGOC - Université de Versailles
Comment créer un thread ? Par dérivation de la classe Thread Par implémentation de l'interface Runnable class MonThread extends Thread { // constructeur MonThread (...) [...] } // methode ’run’ a surcharger public void run() class MonThread implements Runnable { // constructeur MonThread (...) [...] } // methode ’run’ a implementer public void run() Tuyêt Trâm DANG NGOC - Université de Versailles
Tuyêt Trâm DANG NGOC - Université de Versailles Communication sur IP Une adresse IP référence de manière logique et unique sur l’Internet, l’interface d’une machine. Des mécanismes de résolution d’adresse permettent de convertir les adresses IP en adresses DNS et vice-versa. Le mécanisme de port est utilisé afin de pouvoir permettre de gérer plusieurs services simultanés depuis une seule interface réseau. Une connexion est identifie par un couple de points appels socket permettant l’identification des deux extrémités de la connexion. Tuyêt Trâm DANG NGOC - Université de Versailles
Adresses IP / adresses DNS Une adresse IP référence de manière logique et unique sur l’Internet, l’interface d’une machine. Des mécanismes de résolution d’adresse permettent de convertir les adresses IP en adresses DNS et vice-versa. Adresse IP Adresse DNS 216.239.59.99 www.google.fr 192.93.0.1 ns1.nic.fr Tuyêt Trâm DANG NGOC - Université de Versailles
Tuyêt Trâm DANG NGOC - Université de Versailles Ports Le mécanisme de port est utilisé afin de pouvoir permettre de gérer plusieurs services simultanés depuis une seule interface réseau. Tuyêt Trâm DANG NGOC - Université de Versailles
Classes utilisées pour la communication Les classes orientées communication se trouvent dans le paquetage java.net. Les programmes Java peuvent utiliser TCP ou UDP afin de communiquer sur l’Internet. classe de manipulation d’adresses InetAddress Les classes utilises spcifiquement pour TCP : URL,URLConnection, Socket , ServerSocket ; Les classes utilises spécifiquement pour UDP : DatagramPacket , DatagramSocket , MulticastSocket. Tuyêt Trâm DANG NGOC - Université de Versailles
Tuyêt Trâm DANG NGOC - Université de Versailles URL Tuyêt Trâm DANG NGOC - Université de Versailles
Java Beans Coding Convention (1/2) Convention pour les commentaires Convention de nommage class et interface (pas d'underscore, majuscule au début de chaque mot) méthode (minuscule au début, majuscule au début de chaque mot) variable (d'instance préfixé par 'i', de classe par 'c', de paramêtre par 'a', temporaire sans, constante tout en capitale) paquetage (tout en minuscule, dans le répertoire associé) Convention d'accès aux variables récupérer la valeur d'une variable d'instance (get suivi du nom de la variable) positionner la valeur d'une variable d'instance (set suivi du nom de la variable) Tuyêt Trâm DANG NGOC - Université de Versailles
Java Beans Coding Convention (2/2) Convention de constructeurs (avoir un constructeur par défaut) Convention d'initialisation (utiliser les conventions de variables et les set) Convention d'importation (ne pas utiliser '*') Sérialisation (doit implémenter l'interface Serializable) Convention d'évènement Event handling methods: void <eventOcurrenceMethodName>(<EventStateObjectType> evt); Event handling methods with arbitrary argument list: void <eventOcurrenceMethodName>(<ArbitraryParameterList>); Multicast event delivery: public void add<ListenerType>(<ListenerType> listener); public void remove<ListenerType>(<ListenerType> listener); Unicast event delivery: public void add<ListenerType>(<ListenerType> listener) throws java.util.TooManyListenersException; public void remove<ListenerType>(<ListenerType> listener); Tuyêt Trâm DANG NGOC - Université de Versailles
Architecture J2EE Cours CNAM, le 26 novembre 2003 Documents ayant servis pour ces transparents : Documents de références sur http://java.sun.com/* Livre « XML » de Georges Gardarin Documents de Ian Cole Documents de Ming-Hung Cho Cours CNAM, le 26 novembre 2003
Tuyêt Trâm DANG NGOC - Université de Versailles Plan Architectures multi-tiers : architecture 1, 2, 3-tiers Architectures multi-tiers : architecture 1, 2, 3-tiers J2EE : architecture générale Composants J2EE : Servlets, JSP, EJB, JMS, JAAS, JAXP, JavaMail, JNDI, etc. Outils de développement et d’intégration Produits existants Conclusion Tuyêt Trâm DANG NGOC - Université de Versailles
Tuyêt Trâm DANG NGOC - Université de Versailles Architecture 1-tiers Navigateur Présentation Serveur Web Traitement données Système de fichiers Tuyêt Trâm DANG NGOC - Université de Versailles
Tuyêt Trâm DANG NGOC - Université de Versailles Architecture 2-tiers Navigateur Présentation Serveur Web Traitement données Base de données Base de données Tuyêt Trâm DANG NGOC - Université de Versailles
Tuyêt Trâm DANG NGOC - Université de Versailles Architecture 3-tiers Dimensionnement Maintenance Fiabilité Disponibilité Extensibilité Gestion du développement complexité Navigateur Présentation Serveur Web Traitement Serveur d’applications données Base de données Base de données Tuyêt Trâm DANG NGOC - Université de Versailles
Tuyêt Trâm DANG NGOC - Université de Versailles Plan Architectures multi-tiers : architecture 1, 2, 3-tiers J2EE : architecture générale Composants J2EE : Servlets, JSP, EJB, JMS, JAAS, JAXP, JavaMail, JNDI, etc. Outils de développement et d’intégration Produits existants Conclusion J2EE : architecture générale Tuyêt Trâm DANG NGOC - Université de Versailles
Qu’est ce que la plateforme J2EE ? Environnement Java langage objet simple portable robuste indépendant de l’architecture (code virtuel) Pour serveurs d’applications réparties ensemble de services ensemble de protocoles de communication Tuyêt Trâm DANG NGOC - Université de Versailles
Tuyêt Trâm DANG NGOC - Université de Versailles Container J2EE Container J2EE : Environnement d’exécution Java 2 permettant d’héberger des composants applicatifs et de contrôler leur exécution. Il existe deux types de container : Container J2EE Web : utilisés pour héberger des servlets ou des pages JSP Container J2EE EJB : supportant l’exécution des composants EJB Tuyêt Trâm DANG NGOC - Université de Versailles
Interfaces de container Un container offre des interfaces constituant le contrat de composant. Il gère : des API de services : accès SGBD, annuaires, gestionnaire de transactions... des API de communication : protocole Internet, envois de messages ou de mail, accès à des objets distants... Composants d’application : Servlets, JSP, EJB. Descripteurs de déploiement : Fichier XML décrivant le composant d’application Inclut des informations additionnelles requises par le container pour gérer les composants d’application Tuyêt Trâm DANG NGOC - Université de Versailles
Tuyêt Trâm DANG NGOC - Université de Versailles Container Un ensemble d’API spécifiés par le containair, que les applications doivent étendre ou implémenter Contrat Container Composant d’application Composant d’application Descripteur de déploiement Descripteur de déploiement Services déclaratifs Autres services container Composant d’application Descripteur de déploiement Composant d’application Services que le container interpose sur les applications, basés sur le descripteur de déploiement donné pour chaque composant d’application Descripteur de déploiement D’autres services relatifs à la vie du composant : attente de ressources, ramasse-miette, etc. API services du container Services additionnels fournis par le container et qui sont généralement requis par toutes les applications du container Tuyêt Trâm DANG NGOC - Université de Versailles
Tuyêt Trâm DANG NGOC - Université de Versailles Intégration J2EE Container J2EE Web Base de données Navigateur Pages JSP HTTP Servlets Répertoire IIOP-RMI LDAP JDBC ERP Container J2EE EJB JCA Enterprise Bean Enterprise Bean Tuyêt Trâm DANG NGOC - Université de Versailles
Tuyêt Trâm DANG NGOC - Université de Versailles Plan Architectures multi-tiers : architecture 1, 2, 3-tiers J2EE : architecture générale Composants J2EE : Servlets, JSP, EJB, JMS, JAAS, JAXP, JavaMail, JNDI, etc. Outils de développement et d’intégration Produits existants Conclusion Composants J2EE : Servlets, JSP, EJB, JMS, JAAS, JAXP, JavaMail, JNDI, etc Tuyêt Trâm DANG NGOC - Université de Versailles
Tuyêt Trâm DANG NGOC - Université de Versailles Composants J2EE JavaBeans Web Transaction Messagerie Guide de programmation Mail CORBA Sécurité Base de données Nommage & Répertoire XML Outils BluePrint JTA/JTS EJB JSP Servlet JavaBeans JMS JavaMail Connecteurs Container J2EE Applet Java 2 SDK – Edition standard JavaIDL, RMI-IIOP JAAS JDBC JNDI JAXP Tuyêt Trâm DANG NGOC - Université de Versailles
Tuyêt Trâm DANG NGOC - Université de Versailles API pour J2EE Java Servlet 2.3 : services web JSP 1.2 : présentation des pages web EJB 2.0 : les beans JAF 1.0 : intégration des JavaBeans JDBC 2.0 : accès aux bases de données RMI-IIOP, RMI-JRMP, CORBA : accès et exécution distants JNDI 1.2 : gestion de noms et d’annuaire JMS 1.0 : gestion de messages JTA/JTS 1.0 : gestion de transactions JavaMail 1.2 : gestion du courrier électronique JAAS 1.0 : gestion de la sécurité, authentification et droits d’accès JAXP 1.1 : gestion de documents XML Tuyêt Trâm DANG NGOC - Université de Versailles
Tuyêt Trâm DANG NGOC - Université de Versailles Java Servlet programmation côté serveur permet d’étendre les fonctionnalité du serveurs web gère le protocole HTTP construire des applications Web plus performantes que les CGI accède à toutes les API des classes Java axé sur la génération du contenu les programmeurs ne se soucient pas de la présentation Tuyêt Trâm DANG NGOC - Université de Versailles
Cycle de vie d’une servlet Code Servlet Serveur Chargement init() : initialisation de la servlet chargement du code. Souvent effectué lors de la première requête cliente (doGet, doPost) Allocation d’un pool de threads Code Servlet Serveur Client Traitement des requêtes clientes par thread doGet () : Traitement des requêtes HTTP GET doPut () :Traitement des requêtes HTTP PUT doPost () :Traitement des requêtes HTTP POST Code Servlet Serveur Déchargement destroy () : destruction de la servlet par le serveur Tuyêt Trâm DANG NGOC - Université de Versailles
Tuyêt Trâm DANG NGOC - Université de Versailles HTTP/1.0 200 OK Mime-version: 1.0 Content-type: text/html <html> <head> GET /home.html HTTP/1.0 User-Agent: Mozilla/4.0 Accept: image/gif, image/jpeg, text/*, */* HTTP 1.0 Servlet Service( req,rep) Requête Réponse Tuyêt Trâm DANG NGOC - Université de Versailles
Tuyêt Trâm DANG NGOC - Université de Versailles API Servlet import javax.servlet.*; import javax.servlet.http.*; Tuyêt Trâm DANG NGOC - Université de Versailles
Programmation des Servlets import javax.servlet.http.*; import javax.servlet.*; import java.io.*; public class Hello extends HttpServlet { public void doGet (HttpServletRequest requete, HttpServletResponse reponse) throws ServletException, IOException // Récupère le flux d’écriture pour la réponse PrintWriter out = reponse.getWriter () ; // Prépare la réponse reponse.setContentType ("text/html"); // Récupère l’adresse IP du client String adresseDistante = requete.getRemoteAddr () ; // Imprime la page HTML out.println("<html>") ; out.println("<title>Bienvenue !</title> <body>") out.println("<h1>Bonjour !</h1>") ; out.println("Votre adresse IP est identifié comme :<b>" + adresseDistante + "</b>.") ; out.println(“</body></html>") ; } Tuyêt Trâm DANG NGOC - Université de Versailles
Tuyêt Trâm DANG NGOC - Université de Versailles Java Server Page (JSP) Séparation entre la présentation et le contenu des pages web Encapsulé dans des pages HTML Création de contenu dynamique Situé côté serveur Axé sur la présentation des données Les webmasters ne se soucient pas de la programmation Semblable à HTML ou XML basé sur des balises Tuyêt Trâm DANG NGOC - Université de Versailles
Tuyêt Trâm DANG NGOC - Université de Versailles Directives Balise de déclaration <%! ... %> Balise d’affichage <%= ... %> Balise de scriplet <% ... %> Balise de directive <%@ ... %> Balise d’action <jsp : ... /> Tuyêt Trâm DANG NGOC - Université de Versailles
Tuyêt Trâm DANG NGOC - Université de Versailles API JSP import javax.servlet.jsp.*; import javax.servlet.jsp.tagext.*; Tuyêt Trâm DANG NGOC - Université de Versailles
Tuyêt Trâm DANG NGOC - Université de Versailles Programmation JSP <html> <!-- Copyright (c) 1999 The Apache Software Foundation. All rights reserved.--> <body bgcolor="white"> <!– fixer les paramètres de la page <%@ page language = “JAVA” session = “false” %> <!– déclarer une variable caractère <% char c = 0 ; %> <!– scriptlet code Java <% for (int i =0 ; i < 26 ; i++) { c = (char) (‘a’) + i ; %> <!– afficher c <%= c %> <% } %> <jsp:useBean id='clock' scope='page' class='dates.JspCalendar' type="dates.JspCalendar" /> <font size=4> <ul> <li> Jour du mois <jsp:getProperty name="clock" property="dayOfMonth"/> </li> <li> année <jsp:getProperty name="clock" property="year"/> </li> <li> mois <jsp:getProperty name="clock" property="month"/> </li> <li> temps <jsp:getProperty name="clock" property="time"/> </li> </ul> </font> </body> </html> Tuyêt Trâm DANG NGOC - Université de Versailles
Enterprise Java Beans (EJB) Modèle client/serveur distribué Code exécuté sur le serveur proche des données serveur souvent plus puissant que le client Code localisé sur le serveur changer le code du serveur ne change pas le code du client Un EJB est juste une collection de classes Java et d’un fichier XML. Les classes Java suivent un certains nombre de règles et fournissent des callbacks comme définis dans l’environnement J2EE et les spécifications EJB. Tuyêt Trâm DANG NGOC - Université de Versailles
Tuyêt Trâm DANG NGOC - Université de Versailles Container EJB Un container EJB est un environnement d’exécution pour un composant EJB. Un EJB s’exécute sur un container EJB. Un container EJB s’exécute par un serveur d’applications et prend la responsabilité des problèmes au niveau système Le container EJB gère le cycle de vie de l’EJB. Le container EJB fournit aussi un nombre de services additionnels Gestion de la persistance Transactions Sécurité Cadre de travail pour Business Logic Dimensionnement Portabilité Gestion des erreurs Tuyêt Trâm DANG NGOC - Université de Versailles
Tuyêt Trâm DANG NGOC - Université de Versailles Beans entité Un bean entité est un objet persistant Un bean entité peut avoir plusieurs clients Bean Managed Persistance (BMP) : le container EJB est responsable de la persistance du bean. Container Manager Persistance (CMP) : le bean est responsable de sa propre persistance. Tuyêt Trâm DANG NGOC - Université de Versailles
Tuyêt Trâm DANG NGOC - Université de Versailles Beans session Un bean session pour chaque client Il y a deux types de beans session sans état pas d ’état entre les invocations rapide et efficace avec état maintient les états entre les invocations persistance limitée Tuyêt Trâm DANG NGOC - Université de Versailles
Tuyêt Trâm DANG NGOC - Université de Versailles Structure EJB Interface home fournit un moyen pour le client EJB de récupérer une instance d’un EJB Interface distante expose les méthodes que le client EJB peut utiliser Code EJB implémente l’interface distante et l’interface EJB approprié (SessionBean ou EntityBean par exemple) Tuyêt Trâm DANG NGOC - Université de Versailles
Tuyêt Trâm DANG NGOC - Université de Versailles API EJB import javax.ejb.* ; import javax.ejb.spi.* ; Tuyêt Trâm DANG NGOC - Université de Versailles
Tuyêt Trâm DANG NGOC - Université de Versailles Programmation EJB import java.rmi.RemoteException; import javax.ejb.CreateException; import javax.ejb.EJBHome; public interface HomeDe extends EJBHome { De create() throws RemoteException, CreateException; } import javax.ejb.EJBObject; import java.rmi.RemoteException; public interface De extends EJBObject { public int lancer() throws RemoteException; } Tuyêt Trâm DANG NGOC - Université de Versailles
Tuyêt Trâm DANG NGOC - Université de Versailles import java.rmi.RemoteException ; import javax.ejb.SessionBean ; import javax.ejb.SessionContext ; public class DeEJB implements SessionBean { public DeEJB() {…} public void ejbCreate() {…} public void ejbRemove() {…} public void ejbActivate(){…} public void ejbPassivate() {…} public void setSessionContext (SessionContext sc) {…} public int lancer(){…} } Tuyêt Trâm DANG NGOC - Université de Versailles
JavaBeans Activation Framework (JAF) Les services d’activation sont des composants fondamentaux utilisés pour activer automatiquement des objets en mémoire à l’état dormant suivant une requête cliente JAF est un cadre de travail pour construire des applications qui peuvent activer automatiquement des objets pouvant manipuler des données reçues dans un flux d’entrée Tuyêt Trâm DANG NGOC - Université de Versailles
Tuyêt Trâm DANG NGOC - Université de Versailles API JAF import javax.activation.* ; Tuyêt Trâm DANG NGOC - Université de Versailles
Java Data Base Connectivity (JDBC) JDBC permet aux applications d’accéder à des SGBD relationnels et de manipuler des données provenant de ces bases API Java Calqué sur ODBC de Microsoft Implémente le standard CLI de l’X/OPEN Tuyêt Trâm DANG NGOC - Université de Versailles
Tuyêt Trâm DANG NGOC - Université de Versailles Pilotes JDBC Type 1 : Pont JDBC-ODBC fournit un accès JDBC API par l’intermédiaire d’un ou plusieurs pilotes ODBC. Type 2 : A native-API partly Java technology-enabled driver convertit les appels JDBC en un applet sur l’API client (Oracle, Sybase, Informix, DB2, et autres SGBD) Type 3 : A net-protocol fully Java technology-enabled driver convertit les appels JDBC en un protocole indépendant traduit ensuite en protocole du SGBD par un serveur Type 4 : A native-protocol fully Java technology-enabled driver convertit les appels JDBC directement dans le protocoles de communication utilisé par le SGBD Tuyêt Trâm DANG NGOC - Université de Versailles
indépendant du constructeur dépendant du constructeur Java Application SGBD Java Application SGBD JDBC API Interface serveur SGBD JDBC API Interface serveur SGBD JDBC Type 1 JDBC Type 2 natif côté client Interface SGBD Client Client natif ODBC Interface SGBD Client Java Application SGBD Java Application SGBD Ecouteur SGBD Interface serveur SGBD JDBC API Interface serveur SGBD JDBC API Interface client SGBD Ecoute distante JDBC Type 4 JDBC Type 3 Tuyêt Trâm DANG NGOC - Université de Versailles
Tuyêt Trâm DANG NGOC - Université de Versailles API JDBC import java.sql.*; Tuyêt Trâm DANG NGOC - Université de Versailles
Tuyêt Trâm DANG NGOC - Université de Versailles Programmation JDBC private void executer (String driver, String chaine_connexion, String login, String password) { // On charge le driver Class.forName (driver) ; // on se connecte conn = DriverManager.getConnection (chaine_connexion, login, password) ; // on initialise le curseur stmt = conn.createStatement () ; // execution d’une chaine SQL sur le SGBD String SQL = "SELECT * from essai" ; ResultSet rs = stmt.executeQuery (SQL) ; ResultSetMetaData rsetdata = rs.getMetaData() ; System.out.println (rsetdata.getColumnName(1) + "\t" + rsetdata.getColumnName(2)) ; while (rs.next ()) // On recupere le premier champ qui est une chaine puis le deuxieme System.out.println (rs.getString (1) + "\t" + rs.getInt (2)) ; } stmt.close () ; conn.close () ; Tuyêt Trâm DANG NGOC - Université de Versailles
RMI-IIOP, RMI-JRMP, CORBA RMI et CORBA sont des architectures complexes permettant d’invoquer un objet distant géré par une autre machine virtuelle comme s’il était local. CORBA : générique langage objets RMI : spécifique à Java GIOP RMI IIOP TCP/IP API : Application Programming Interface SPI : Service Provider Interface Tuyêt Trâm DANG NGOC - Université de Versailles
Remote method Invocation (RMI) Objet distant localisé par l’API JNDI Registre associe au nom objet une référence stub représente l’interface sur le client. Agit comme proxy de l’objet distant squelette (skeleton) sur le serveur pour recevoir les messages et invoquer l’objet serveur Génération de stub et skeleton à l’aide de rmic client RMI serveur RMI Interface RMI Squelette RMI Stub RMI Couche de référence distante Couche transport RMI TCP/IP Tuyêt Trâm DANG NGOC - Université de Versailles
Common Object Request Broker Architecture (CORBA) GIOP (General Inter-ORB Protocol) : Le protocole de plus haut-niveau de communication CORBA qui convertit des messages créés par les stubs en format transport-message capable de communiquer entre les implémentations ORB (Object Request Broker). IIOP (Internet Inter-ORB Protocol) : Le protocole de plus bas niveau utilisé par CORBA ;c’est une couche transport décrivant comment les messages GIOP sont transmis au dssus de TCP/IP. Tuyêt Trâm DANG NGOC - Université de Versailles
Tuyêt Trâm DANG NGOC - Université de Versailles Architecture CORBA Portable Object Adapter (POA) Object Request Broker (ORB ) Client Serveur reférence objet objet ORB ORB Tuyêt Trâm DANG NGOC - Université de Versailles
Tuyêt Trâm DANG NGOC - Université de Versailles API CORBA, RMI import javax.rmi.* ; import javax.rmi.CORBA ; import org.omg.CORBA.* ; // RMI-IIOP, IDL import org.omg.CosNaming.* ; // RMI-IIOP, IDL Tuyêt Trâm DANG NGOC - Université de Versailles
Tuyêt Trâm DANG NGOC - Université de Versailles Programmation RMI // Fichier Bonjour.java : Interface du service 'Bonjour' import java.rmi.Remote ; import java.rmi.RemoteException ; public interface Bonjour extends Remote { String disBonjour (String nom) throws RemoteException ; } // Fichier 'BonjourImpl.java': implementation de l'interface 'Bonjour‘ definie dans 'Bonjour.java'. import java.rmi.RemoteException ; import java.rmi.server.UnicastRemoteObject ; public class BonjourImpl extends UnicastRemoteObject implements Bonjour { public BonjourImpl () throws RemoteException { super () ;} public String disBonjour (String nom) { return "Bonjour " + nom + " !" ;} } Tuyêt Trâm DANG NGOC - Université de Versailles
Tuyêt Trâm DANG NGOC - Université de Versailles // Enregistre l’objet Bonjour dans le registry du serveur local import java.rmi.Naming ; import java.rmi.RMISecurityManager ; public class ServiceBonjour { public static void main (String args[]) throws Exception BonjourImpl obj = new BonjourImpl () ; Naming.rebind ("rmi://localhost/ObjetBonjour", obj) ; System.out.println ("Enregistre sous le nom 'ObjetBonjour'") ; } Tuyêt Trâm DANG NGOC - Université de Versailles
Tuyêt Trâm DANG NGOC - Université de Versailles // Fichier 'BonjourCLient.java' : contacte le registry a l'URL donne et recupere la reference de l'objet. import java.rmi.Naming ; import java.rmi.RemoteException ; public class BonjourClient { public static void main (String argv []) throws Exception String message = null ; Bonjour obj = null ; obj = (Bonjour) Naming.lookup ("rmi://gibet.prism.uvsq.fr/ObjetBonjour") ; message = obj.disBonjour (argv [0]) ; System.out.println ("Le serveur a dit : '" + message + ".") ; } Tuyêt Trâm DANG NGOC - Université de Versailles
Java Naming and Directory Interface (JNDI) JNDI permet d’accéder à de nombreux services de noms et d’annuaire. En utilisant JNDI, un objet Java peut stocker et récupérer des objets de n’importe quel type JNDI fournit des méthodes pour effectuer n’importe quelle opération standard sur un annuaire : associer des attributs à un objet ou chercher un objet par ses attributs. JNDI permet aux applications Java de bénéficier de toutes les informations d’annuaires comme LDAP, NDS, DNS et NIS (YP) et permet à Java de cohabiter avec des applications existantes. Enregistrement dynamique de services et de clients Traitement point à point Tuyêt Trâm DANG NGOC - Université de Versailles
Tuyêt Trâm DANG NGOC - Université de Versailles Architecture JNDI Application Java API JNDI Gestionnaire de nommages et d’annuaire JNDI SPI SPI nommage CORBA SPI Système de fichiers SPI LDAP SPI RMI Autres SPI Système de fichiers Services LDAP CosNaming CORBA Services RMI Autres services (DNS, NDS, NIS…) Système de fichiers Tuyêt Trâm DANG NGOC - Université de Versailles
Tuyêt Trâm DANG NGOC - Université de Versailles API JNDI import javax.naming.* ; import javax.naming.directiry.* ; import javax.naming.event.* ; import javax.naming.ldap.* ; import javax.naming.spi.* ; Tuyêt Trâm DANG NGOC - Université de Versailles
Tuyêt Trâm DANG NGOC - Université de Versailles Programmation import javax.naming.InitialContext; import javax.rmi.PortableRemoteObject; class ClientDe { // Crée une instance EJB “dé” sur le serveur EJB et appelle ensuite la méthode lancer () // et enfin affiche le résultat du lancé de dé public static void main (String[] args) try InitialContext jndiContext = new InitialContext (); ref = jndiContext.lookup (“jeux/De"); DeHome home= (EnsDe) PortableRemoteObject.narrow (ref, DeHome.class); De de = home.create () ; // Crée un objet De depuis l’interface EnsCalculateur System.out.println (de.lancer (0.2, 1000, “vert”)); } catch (Exception e) System.out.println(e.toString()); Tuyêt Trâm DANG NGOC - Université de Versailles
Java Message Service (JMS) JMS défini un mécanisme standard permettant aux composants d’envoyer et de recevoir des messages de façon asynchrone Fournit un service flexible et sûr pour l’échange asynchrone de données et d’évènements commerciaux critiques à travers une entreprise L’API JMS y ajoute une API commune et un cadre de travail permettant le développement de messages portables basés en Java Tuyêt Trâm DANG NGOC - Université de Versailles
Tuyêt Trâm DANG NGOC - Université de Versailles Synchrone envoyé une fois, non garanti d’atteindre le serveur perdu si non reçu Asynchrone Envoyé jusqu’à acquittement Mise en file d’attente jusqu’à ce que le message soit reçu Tuyêt Trâm DANG NGOC - Université de Versailles
Tuyêt Trâm DANG NGOC - Université de Versailles message message file d’attente Consomme Envoie Client2 Client1 Acquitte Souscrit Client2 Délivre message message thème Souscrit Client1 Publie Client3 Délivre message Tuyêt Trâm DANG NGOC - Université de Versailles
Cas d’utilisation de JMS Système faiblement couplé Sans connexion Supprime les dépendances entre le client et la plateforme serveur (langage de programmation, version) Publication souscription Envoie, reçoit des information avec un ou plusieurs clients non identifiés Intégration avec d’autres systèmes de messageries IBM MQ-Series Microsoft Message Queue Tuyêt Trâm DANG NGOC - Université de Versailles
Tuyêt Trâm DANG NGOC - Université de Versailles API JMS import javax.jms.* ; Tuyêt Trâm DANG NGOC - Université de Versailles
Java Transaction Support/API (JTS/JTA) JTA et JTS permettent aux applications J2EE d’affranchir le développeur de composant de la gestion des transactions Les développeurs peuvent définir les propriétés transactionnelles des composants JavaBeans pendant la conception et le déploiement à l’aide d’états déclaratifs dans le descripteur de déploiement. Le serveur d’applications prend la responsabilité de la gestion des transactions Tuyêt Trâm DANG NGOC - Université de Versailles
Exemple de déroulement de transaction begin transaction ... update table-a if (condition-x) commit transaction else if (condition-y) update table-b else rollback transaction update table-c Tuyêt Trâm DANG NGOC - Université de Versailles
Tuyêt Trâm DANG NGOC - Université de Versailles API JTA import javax.transaction ; import javax.transaction.xa ; Tuyêt Trâm DANG NGOC - Université de Versailles
Tuyêt Trâm DANG NGOC - Université de Versailles Programmation JTA import javax.transaction.UserTransaction ; [...] public void withdrawCash(double amount) { UserTransaction ut = context.getUserTransaction(); try { ut.begin(); updateChecking(amount); machineBalance -= amount; insertMachine(machineBalance); ut.commit(); } catch (Exception ex) ut.rollback(); catch (SystemException syex) throw new EJBException ("Rollback failed: " + syex.getMessage()); throw new EJBException ("Transaction failed: " + ex.getMessage()); Tuyêt Trâm DANG NGOC - Université de Versailles
Tuyêt Trâm DANG NGOC - Université de Versailles JavaMail JavaMail 1.2 définit un ensemble d’interface de classe permettant de construire des applications sur les technologies de courrier électronique Gestion des standards de courrier SMTP : protocole de transport de courrier électronique POP : récupération du courrier sur serveur distant IMAP : gestion de boîtes aux lettres distantes MIME : standard de codage du contenu de courrier permettant notamment l’attachement de documents de tout format et l’utilisation de langues différentes Tuyêt Trâm DANG NGOC - Université de Versailles
Tuyêt Trâm DANG NGOC - Université de Versailles API JavaMail import javax.mail.* ; import javax.mail.event.* ; import javax.mail.internet.* ; import javax.mail.search.* ; Tuyêt Trâm DANG NGOC - Université de Versailles
Programmation JavaMail import javax.mail.*; import javax.mail.internet.*; import java.util.*; public class SendEmail { public String SendMessage(String emailto, String emailfrom, String smtphost, String emailmultipart, String msgSubject, String msgText) String msgText2 = "multipart message"; boolean sendmultipart = Boolean.valueOf(emailmultipart).booleanValue(); // set the host Properties props = new Properties(); props.put("mail.smtp.host", smtphost); // create some properties and get the default Session Session session = Session.getDefaultInstance(props, null); try // create a message Message msg = new MimeMessage(session); // set the from InternetAddress from = new InternetAddress(emailfrom); msg.setFrom(from); InternetAddress[] address = new InternetAddress(emailto) }; msg.setRecipients(Message.RecipientType.TO, address); msg.setSubject(msgSubject); if(!sendmultipart) { // send a plain text message msg.setContent(msgText, "text/plain"); } else // send a multipart message// create and fill the first message part MimeBodyPart mbp1 = new MimeBodyPart(); mbp1.setContent(msgText, "text/plain"); // create and fill the second message part MimeBodyPart mbp2 = new MimeBodyPart(); mbp2.setContent(msgText2, "text/plain"); // create the Multipart and its parts to it Multipart mp = new MimeMultipart(); mp.addBodyPart(mbp1); mp.addBodyPart(mbp2); // add the Multipart to the message msg.setContent(mp); Transport.send(msg); catch(MessagingException mex) mex.printStackTrace(); return "Email envoyé à " + emailto; Tuyêt Trâm DANG NGOC - Université de Versailles
Java Authentification and Authorization Service (JAAS) Authentification : déterminer qui exécute le code Java (application, applet, bean, servlet) Autorisation : vérifier si celui qui exécute le programme a les permissions nécessaires pour le faire Modules d’authentification disponibles JNDI UNIX Windows NT Kerberos KeyStore Tuyêt Trâm DANG NGOC - Université de Versailles
Tuyêt Trâm DANG NGOC - Université de Versailles API JAAS import javax.security.auth ; import javax.security.auth.callback ; import javax.security.auth.login ; import javax.security.auth.spi ; grant <signer(s) field>, <codeBase URL> <Principal field(s)> { permission perm_class_name "target_name", "action"; ... }; Java.policy <Principal field> := Principal Principal_class "principal_name" import javax.security.* ; Tuyêt Trâm DANG NGOC - Université de Versailles
Programmation JAAS (authentification) import java.io.IOException; import javax.security.auth.*; import javax.security.auth.callback.*; import javax.security.auth.login.*; import javax.security.auth.spi.*; public class SampleLoginModule implements LoginModule { public boolean abort () { // Method to abort the authentication process (phase 2). } public boolean commit() { // Method to commit the authentication process (phase 2). public void initialize(Subject subject, CallbackHandler callbackHandler, Map sharedState, Map options) { // Initialize this LoginModule. } public boolean login() { // Method to authenticate a Subject (phase 1). } public boolean logout() { // Method which logs out a Subject. grant codebase "file:SampleLoginModule.jar" { permission javax.security.auth.AuthPermission "modifyPrincipals"; }; Tuyêt Trâm DANG NGOC - Université de Versailles
Programmation JAAS (autorisation) import java.io.File; import java.security.PrivilegedAction; public class SampleAction implements PrivilegedAction { public Object run() { System.out.println("\nYour java.home property value is: " + System.getProperty("java.home")); System.out.println("\nYour user.home property value is: " + System.getProperty("user.home")); File f = new File("foo.txt"); System.out.print("\nfoo.txt does "); if (!f.exists()) System.out.print("not "); System.out.println("exist in the current working directory."); return null; } } grant codebase "file:./SampleAction.jar", Principal sample.principal.SamplePrincipal "testUser" { permission java.util.PropertyPermission "java.home", "read"; permission java.util.PropertyPermission "user.home", "read"; permission java.io.FilePermission "foo.txt", "read"; }; Tuyêt Trâm DANG NGOC - Université de Versailles
Java API for XML Processing (JAXP) SAX : gestion de flux d’événements XML DOM : structure de document XML en mémoire sous forme d’arbre XSLT : présentation de documents XML d’après des feuilles de style XSL Tuyêt Trâm DANG NGOC - Université de Versailles
Tuyêt Trâm DANG NGOC - Université de Versailles XML – SAX -DOM Tuyêt Trâm DANG NGOC - Université de Versailles
Tuyêt Trâm DANG NGOC - Université de Versailles API XML import javax.xml.parsers ; import javax.xml.transform ; import javax.xml.transform.dom ; import javax.xml.transform.sax ; import javax.xml.transform.stream ; import org.xml.sax ; import org.xml.sax.ext ; import org.xml.sax.helpers ; import org.w3c.dom ; import org.w3c.dom.html ; import org.w3c.dom.range ; import org.w3c.dom.traversal ; Tuyêt Trâm DANG NGOC - Université de Versailles
Tuyêt Trâm DANG NGOC - Université de Versailles Java pour XML JAXP : Java API for XML Parsing assure interface avec analyseur de documents produisant des formats DOM ou SAX JAXB : Java Architecture for XML Binding permet de construire des documents XML à partir d’objets Java et vice versa JAXM : Java API for XML Messenging permet l’échange de messages XML avec des plateformes distantes en synchrone ou asynchrone JAXR : Java API for XML Registries interface d’accès aux annuaires de services applicatifs JAX-RPC : JAVA API for XML-based RPC appels à des procédures à distance avec XML Tuyêt Trâm DANG NGOC - Université de Versailles
Tuyêt Trâm DANG NGOC - Université de Versailles Plan Architectures multi-tiers : architecture 1, 2, 3-tiers J2EE : architecture générale Composants J2EE : Servlets, JSP, EJB, JMS, JAAS, JAXP, JavaMail, JNDI, etc. Outils de développement et d’intégration Produits existants Conclusion Outils de développement et d’intégration Tuyêt Trâm DANG NGOC - Université de Versailles
Tuyêt Trâm DANG NGOC - Université de Versailles J2EE SDK J2EE SDK est une définition opérationnelle de la plateforme J2EE Fait par Sun Microsystem pour les démonstrations, les prototypes et les applications non-commerciales Contient : J2EE Application Server Serveur Web Base de données relationnelles API J2EE un kit de développement et de déploiement But : permettre aux développeurs d’exécuter leurs applications J2EE et vérifier leur compatibilité Tuyêt Trâm DANG NGOC - Université de Versailles
Tuyêt Trâm DANG NGOC - Université de Versailles Déploiement J2EE JAR – Java ARchive Fichier classe Java EJB WAR - Web ARchive Servlets JSP EAR - Enterprise ARchive Contient des JARs et WARs pour former une application complète Descripteurs de déploiement XML Tuyêt Trâm DANG NGOC - Université de Versailles
Tuyêt Trâm DANG NGOC - Université de Versailles Plan Architectures multi-tiers : architecture 1, 2, 3-tiers J2EE : architecture générale Composants J2EE : Servlets, JSP, EJB, JMS, JAAS, JAXP, JavaMail, JNDI, etc. Outils de développement et d’intégration Produits existants Conclusion Produits existants Tuyêt Trâm DANG NGOC - Université de Versailles
Tuyêt Trâm DANG NGOC - Université de Versailles Serveurs J2EE Apache Tomcat, http://jakarta.apache.org/ BEA WebLogic, http://www.bea.com/ IBM WebSphere Sun iPlanet Application Server http://java.sun.com/ Oracle Application Server http://www.oracle.com Caucho Resin, http://www.caucho.com/ Allaire JRun, http://www.allaire.com/ Orion, http://www.orionserver.com/ SilverStream Application Server Tuyêt Trâm DANG NGOC - Université de Versailles
Tuyêt Trâm DANG NGOC - Université de Versailles Plan Architectures multi-tiers : architecture 1, 2, 3-tiers J2EE : architecture générale Composants J2EE : Servlets, JSP, EJB, JMS, JAAS, JAXP, JavaMail, JNDI, etc. Outils de développement et d’intégration Produits existants Conclusion Conclusion Tuyêt Trâm DANG NGOC - Université de Versailles
Exemple d’application en entreprise Vérification des données Construction de la requête d’insertion soumission d’une fiche de renseignement insertion de la fiche Servlet de fiches JDBC Message d’erreur Insertion génération de page d’erreur JSP SGBD Tuyêt Trâm DANG NGOC - Université de Versailles
Exemple d’application en entreprise Client Navigateur Compsants graphiques Servlet Requête HTTP Serveur Web JSP fichier HTML EJB Bean Session Bean Session Serveur d’applications Bean Entité Bean Entité JDBC Base de données relationnelles Serveurs de donnes Mainframe Tuyêt Trâm DANG NGOC - Université de Versailles
Exemple d’application en entreprise Servlet de classes EJB Classes JSP JMS récupérer classes présentation liste de classes Listes de EIS voir notifications pas de renvoie classes recupérer classes Tuyêt Trâm DANG NGOC - Université de Versailles
Architecture sécurisée (JCA) Service de cryptographie Interface et classe de certificat Classe et interface de gestion de clef Tuyêt Trâm DANG NGOC - Université de Versailles