Java avanc Tuyt Trm DANG NGOC Laboratoire PRi
Java avancé Tuyêt Trâm DANG NGOC Laboratoire PRi. SM Université de Versailles-Saint-Quentin <dntt@prism. uvsq. fr> Cours CNAM, le 26 novembre 2003
Evolution de Java Personal Java 1. 0 / 1. 1 / 1. 2 Java 2 SDK SE 1. 3. 0, 1. 3. 1, 1. 4. 0 OAK JDK 1. 0 JDK 1. 1 Plateforme Java embarqué Tuyêt Trâm DANG NGOC - Université de Versailles FDT, I/O, Collection et Outils, Applet + Thread, AWT + Swing, TCP/ IP + UDP / IP, RMI, New I/O, Expression rationnelle, Image I/O, Java 2 D, Java 3 D, JAI, JMF, Son, JCE, JSSE, JAAS JSP + Servlet + Java. Beans, EJB, RMI-IIOP and CORBA, Java 2 SDK JNDI, JMS, JDBC, XML EE 1. 2. 1 EE 1. 3. 0 Java 2 SDK ME (Micro Edition) Pour téléphones cellulaires PDA, JINI, JIRO ** Plateforme Java 2 samedi 6 mars 2021 • Java 1. 0. 2 • Java 1. 1. 1 , 1. 1. 2, 1. 1. 3, 1. 1. 8 • Java 1. 2. 2
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 samedi 6 mars 2021
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 samedi 6 mars 2021
Inactivité d'un thread Un thread est bloqué (Not Runnable), dans les cas suivants : 1. sa méthode sleep a été invoquée ; 2. le thread a appelé la méthode wait afin d’attendre la réalisation d’un certain évènement ; 3. le thread est en attente d’une entrée/sortie. Suivant la cause de bloquage du thread, sa remise en activité peut-être : 1. si un thread a été mis en sommeil, alors, le nombre de millisecondes demandes devra être écoulé ; 2. si un thread attend une condition, alors, un autre objet doit l’avertir du changement de la condition – notify ou notify. All ; 3. 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 samedi 6 mars 2021
Comment créer un thread ? Par dérivation de la classe Thread Par implémentation de l'interface Runnable class Mon. Thread extends Thread { // constructeur Mon. Thread (. . . ) { [. . . ] } // methode ’run’ a surcharger public void run() { [. . . ] } } class Mon. Thread implements Runnable { // constructeur Mon. Thread (. . . ) { [. . . ] } // methode ’run’ a implementer public void run() { [. . . ] } } Tuyêt Trâm DANG NGOC - Université de Versailles samedi 6 mars 2021
Communication sur IP Tuyêt Trâm DANG NGOC - Université de Versailles samedi 6 mars 2021
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 ns 1. nic. fr Tuyêt Trâm DANG NGOC - Université de Versailles samedi 6 mars 2021
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 samedi 6 mars 2021
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 Inet. Address <Les classes utilises spcifiquement pour TCP : URL, URLConnection, Socket , Server. Socket ; <Les classes utilises spécifiquement pour UDP : Datagram. Packet , Datagram. Socket , Multicast. Socket. Tuyêt Trâm DANG NGOC - Université de Versailles samedi 6 mars 2021
URL Tuyêt Trâm DANG NGOC - Université de Versailles samedi 6 mars 2021
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 samedi 6 mars 2021
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 <event. Ocurrence. Method. Name>(<Event. State. Object. Type> evt); <Event handling methods with arbitrary argument list: void <event. Ocurrence. Method. Name>(<Arbitrary. Parameter. List>); <Multicast event delivery: public void add<Listener. Type>(<Listener. Type> listener); public void remove<Listener. Type>(<Listener. Type> listener); <Unicast event delivery: public void add<Listener. Type>(<Listener. Type> listener) throws java. util. Too. Many. Listeners. Exception; public void remove<Listener. Type>(<Listener. Type> listener); Tuyêt Trâm DANG NGOC - Université de Versailles samedi 6 mars 2021
Architecture J 2 EE Cours CNAM, le 26 novembre 2003
Plan <Architectures multi-tiers : architecture 1, 2, 33 -tiers <J 2 EE : architecture générale <Composants J 2 EE : Servlets, JSP, EJB, JMS, JAAS, JAXP, Java. Mail, JNDI, etc. <Outils de développement et d’intégration <Produits existants <Conclusion Tuyêt Trâm DANG NGOC - Université de Versailles samedi 6 mars 2021
Architecture 1 -tiers Navigateur Présentation Serveur Web Traitement données Système de fichiers Tuyêt Trâm DANG NGOC - Université de Versailles samedi 6 mars 2021
Architecture 2 -tiers Navigateur Présentation Serveur Web Traitement données Base de données Tuyêt Trâm DANG NGOC - Université de Versailles samedi 6 mars 2021 Base de données
Architecture 3 -tiers +Dimensionnement +Maintenance +Fiabilité +Disponibilité +Extensibilité +Gestion du Navigateur Présentation Serveur Web Traitement Serveur d’applications développement - complexité Tuyêt Trâm DANG NGOC - Université de Versailles données Base de données samedi 6 mars 2021 Base de données
Plan <Architectures multi-tiers : architecture 1, 2, 3 tiers <J 2 EE : architecture générale <Composants J 2 EE : Servlets, JSP, EJB, JMS, JAAS, JAXP, Java. Mail, JNDI, etc. <Outils de développement et d’intégration <Produits existants <Conclusion Tuyêt Trâm DANG NGOC - Université de Versailles samedi 6 mars 2021
Qu’est ce que la plateforme J 2 EE ? <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 samedi 6 mars 2021
Container J 2 EE <Container J 2 EE : 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 J 2 EE Web : utilisés pour héberger des servlets ou des pages JSP <Container J 2 EE EJB : supportant l’exécution des composants EJB Tuyêt Trâm DANG NGOC - Université de Versailles samedi 6 mars 2021
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 samedi 6 mars 2021
Container D’autres services relatifs à la vie du composant : attente de ressources, ramasse-miette, etc. Services déclaratifs Autres services container Contrat Container Un ensemble d’API spécifiés par le containair, que les applications doivent étendre ou implémenter Composant d’application Descripteur de déploiement API services du container Tuyêt Trâm DANG NGOC - Université de Versailles Services que le container interpose sur les applications, basés sur le descripteur de déploiement donné pour chaque composant d’application Services additionnels fournis par le container et qui sont généralement requis par toutes les applications du container samedi 6 mars 2021
Intégration J 2 EE Container J 2 EE Web Base de données Répertoire LDAP Pages JSP HTTP Servlets IIOP-RMI JDBC Container J 2 EE EJB JCA Enterprise Bean Tuyêt Trâm DANG NGOC - Université de Versailles ERP samedi 6 mars 2021 Navigateur
Plan <Architectures multi-tiers : architecture 1, 2, 3 tiers <J 2 EE : architecture générale Composants J 2 EE : Servlets, JSP, EJB, JMS, <Composants J 2 EE : Servlets, JSP, EJB, JAAS, JAXP, Java. Mail, JNDI, etc. JMS, JAAS, JAXP, Java. Mail, JNDI, etc <Outils de développement et d’intégration <Produits existants <Conclusion Tuyêt Trâm DANG NGOC - Université de Versailles samedi 6 mars 2021
Composants J 2 EE Messagerie Transaction Java. Beans Mail Web EJB Blue. Print JSP Servlet JTA/JTS JMS Java. Mail Container J 2 EE Connecteurs Outils Applet Java. Beans Guide de programmation Java 2 SDK – Edition standard Java. IDL, RMI-IIOP CORBA Tuyêt Trâm DANG NGOC - Université de Versailles Sécurité JAAS JDBC JNDI JAXP Base de Nommage données & Répertoire samedi 6 mars 2021 XML
API pour J 2 EE < 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 Java. Beans < 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 < Java. Mail 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 samedi 6 mars 2021
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 samedi 6 mars 2021
Cycle de vie d’une servlet • init() : initialisation de la servlet Chargement Code Serveur chargement du code. Servlet Souvent effectué lors de la première requête cliente (do. Get, do. Post) Allocation d’un pool de threads Serveur Client • do. Get () : Traitement des requêtes Traitement HTTP GET Code des requêtes • do. Put () : Traitement des requêtes Servlet clientes Client HTTP PUT par thread • do. Post () : Traitement des requêtes HTTP POST Code Serveur • destroy () : destruction de la servlet Servlet par le serveur Déchargement Tuyêt Trâm DANG NGOC - Université de Versailles samedi 6 mars 2021
GET /home. html HTTP/1. 0 200 OK Mime-version: 1. 0 Content-type: text/html <html> User-Agent: Mozilla/4. 0 Accept: image/gif, image/jpeg, text/*, */* <head> HTTP 1. 0 Requête Servlet Service( req, rep) Tuyêt Trâm DANG NGOC - Université de Versailles samedi 6 mars 2021 Réponse
API Servlet <import javax. servlet. *; <import javax. servlet. http. *; Tuyêt Trâm DANG NGOC - Université de Versailles samedi 6 mars 2021
Programmation des Servlets import javax. servlet. http. *; import javax. servlet. *; import java. io. *; public class Hello extends Http. Servlet { public void do. Get (Http. Servlet. Request requete, Http. Servlet. Response reponse) throws Servlet. Exception, IOException { // Récupère le flux d’écriture pour la réponse Print. Writer out = reponse. get. Writer () ; // Prépare la réponse reponse. set. Content. Type ("text/html"); // Récupère l’adresse IP du client String adresse. Distante = requete. get. Remote. Addr () ; // Imprime la page HTML out. println("<html>") ; out. println("<title>Bienvenue !</title> <body>") out. println("<h 1>Bonjour !</h 1>") ; out. println("Votre adresse IP est identifié comme : <b>" + adresse. Distante + "</b>. ") ; out. println(“</body></html>") ; } } Tuyêt Trâm DANG NGOC - Université de Versailles samedi 6 mars 2021
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 samedi 6 mars 2021
<Directives <Balise de déclaration <Balise d’affichage <Balise de scriplet <Balise de directive <Balise d’action Tuyêt Trâm DANG NGOC - Université de Versailles <%!. . . %> <%=. . . %> <%@. . . %> <jsp : . . . /> samedi 6 mars 2021
API JSP <import javax. servlet. jsp. *; <import javax. servlet. jsp. tagext. *; Tuyêt Trâm DANG NGOC - Université de Versailles samedi 6 mars 2021
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: use. Bean id='clock' scope='page' class='dates. Jsp. Calendar' type="dates. Jsp. Calendar" /> <font size=4> <ul> <li> Jour du mois <jsp: get. Property name="clock" property="day. Of. Month"/> </li> <li> année <jsp: get. Property name="clock" property="year"/> </li> <li> mois <jsp: get. Property name="clock" property="month"/> </li> <li> temps <jsp: get. Property name="clock" property="time"/> </li> </ul> </font> </body> Tuyêt Trâm DANG NGOC - Université de Versailles </html> samedi 6 mars 2021
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 J 2 EE et les spécifications EJB. Tuyêt Trâm DANG NGOC - Université de Versailles samedi 6 mars 2021
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 samedi 6 mars 2021
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 samedi 6 mars 2021
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 samedi 6 mars 2021
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é (Session. Bean ou Entity. Bean par exemple) Tuyêt Trâm DANG NGOC - Université de Versailles samedi 6 mars 2021
API EJB <import javax. ejb. * ; <import javax. ejb. spi. * ; Tuyêt Trâm DANG NGOC - Université de Versailles samedi 6 mars 2021
Programmation EJB import java. rmi. Remote. Exception; import javax. ejb. Create. Exception; import javax. ejb. EJBHome; public interface Home. De extends EJBHome { De create() throws Remote. Exception, Create. Exception; } import javax. ejb. EJBObject; import java. rmi. Remote. Exception; public interface De extends EJBObject { public int lancer() throws Remote. Exception; } Tuyêt Trâm DANG NGOC - Université de Versailles samedi 6 mars 2021
import java. rmi. Remote. Exception ; import javax. ejb. Session. Bean ; import javax. ejb. Session. Context ; public class De. EJB implements Session. Bean { public De. EJB() {…} public void ejb. Create() {…} public void ejb. Remove() {…} public void ejb. Activate(){…} public void ejb. Passivate() {…} public void set. Session. Context (Session. Context sc) {…} public int lancer(){…} } Tuyêt Trâm DANG NGOC - Université de Versailles samedi 6 mars 2021
Java. Beans 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 samedi 6 mars 2021
API JAF <import javax. activation. * ; Tuyêt Trâm DANG NGOC - Université de Versailles samedi 6 mars 2021
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 samedi 6 mars 2021
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, DB 2, 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 samedi 6 mars 2021
indépendant du constructeur Ecoute distante natif côté client Java Application dépendant du constructeur SGBD Java Application Interface serveur SGBD JDBC API JDBC Type 1 JDBC API JDBC Type 2 SGBD Interface serveur SGBD Interface SGBD Client natif ODBC Interface SGBD Client Java Application JDBC API JDBC Type 3 Ecouteur SGBD Interface client SGBD Tuyêt Trâm DANG NGOC - Université de Versailles SGBD Interface serveur SGBD Java Application JDBC API JDBC Type 4 samedi 6 mars 2021 SGBD Interface serveur SGBD
API JDBC <import java. sql. *; Tuyêt Trâm DANG NGOC - Université de Versailles samedi 6 mars 2021
Programmation JDBC private void executer (String driver, String chaine_connexion, String login, String password) { // On charge le driver Class. for. Name (driver) ; // on se connecte conn = Driver. Manager. get. Connection (chaine_connexion, login, password) ; // on initialise le curseur stmt = conn. create. Statement () ; // execution d’une chaine SQL sur le SGBD String SQL = "SELECT * from essai" ; Result. Set rs = stmt. execute. Query (SQL) ; Result. Set. Meta. Data rsetdata = rs. get. Meta. Data() ; System. out. println (rsetdata. get. Column. Name(1) + "t" + rsetdata. get. Column. Name(2)) ; while (rs. next ()) { // On recupere le premier champ qui est une chaine puis le deuxieme System. out. println (rs. get. String (1) + "t" + rs. get. Int (2)) ; } stmt. close () ; conn. close () ; } Tuyêt Trâm DANG NGOC - Université de Versailles samedi 6 mars 2021
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. GIOP RMI <CORBA : générique langage objets <RMI : spécifique à Java Tuyêt Trâm DANG NGOC - Université de Versailles samedi 6 mars 2021 IIOP TCP/IP
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 Tuyêt Trâm DANG NGOC - Université de Versailles client RMI serveur RMI Interface RMI Squelette RMI Stub RMI Couche de référence distante Couche transport RMI TCP/IP samedi 6 mars 2021
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 samedi 6 mars 2021
Architecture CORBA < Portable Object Adapter (POA) < Object Request Broker (ORB ) Client reférence objet ORB Tuyêt Trâm DANG NGOC - Université de Versailles samedi 6 mars 2021 Serveur objet ORB
API CORBA, RMI <import javax. rmi. * ; <import javax. rmi. CORBA ; <import org. omg. CORBA. * ; // RMI-IIOP, IDL <import org. omg. Cos. Naming. * ; // RMI-IIOP, IDL Tuyêt Trâm DANG NGOC - Université de Versailles samedi 6 mars 2021
Programmation RMI // Fichier Bonjour. java : Interface du service 'Bonjour' import java. rmi. Remote ; import java. rmi. Remote. Exception ; public interface Bonjour extends Remote { String dis. Bonjour (String nom) throws Remote. Exception ; } // Fichier 'Bonjour. Impl. java': implementation de l'interface 'Bonjour‘ definie dans 'Bonjour. java'. import java. rmi. Remote. Exception ; import java. rmi. server. Unicast. Remote. Object ; public class Bonjour. Impl extends Unicast. Remote. Object implements Bonjour { public Bonjour. Impl () throws Remote. Exception { super () ; } public String dis. Bonjour (String nom) { return "Bonjour " + nom + " !" ; } } Tuyêt Trâm DANG NGOC - Université de Versailles samedi 6 mars 2021
// Enregistre l’objet Bonjour dans le registry du serveur local import java. rmi. Naming ; import java. rmi. RMISecurity. Manager ; public class Service. Bonjour { public static void main (String args[]) throws Exception { Bonjour. Impl obj = new Bonjour. Impl () ; Naming. rebind ("rmi: //localhost/Objet. Bonjour", obj) ; System. out. println ("Enregistre sous le nom 'Objet. Bonjour'") ; } } Tuyêt Trâm DANG NGOC - Université de Versailles samedi 6 mars 2021
// Fichier 'Bonjour. CLient. java' : contacte le registry a l'URL donne et recupere la reference de l'objet. import java. rmi. Naming ; import java. rmi. Remote. Exception ; public class Bonjour. Client { public static void main (String argv []) throws Exception { String message = null ; Bonjour obj = null ; obj = (Bonjour) Naming. lookup ("rmi: //gibet. prism. uvsq. fr/Objet. Bonjour") ; message = obj. dis. Bonjour (argv [0]) ; System. out. println ("Le serveur a dit : '" + message + ". ") ; } } Tuyêt Trâm DANG NGOC - Université de Versailles samedi 6 mars 2021
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 cher 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 samedi 6 mars 2021
Architecture JNDI Application Java API JNDI Gestionnaire de nommages et d’annuaire JNDI SPI Système de fichiers SPI nommage CORBA Cos. Naming CORBA Tuyêt Trâm DANG NGOC - Université de Versailles SPI LDAP SPI RMI Services LDAP samedi 6 mars 2021 Services RMI Autres SPI Autres services (DNS, NDS, NIS…)
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 samedi 6 mars 2021
Programmation import javax. naming. Initial. Context; import javax. rmi. Portable. Remote. Object; class Client. De { // 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 { Initial. Context jndi. Context = new Initial. Context (); ref = jndi. Context. lookup (“jeux/De"); De. Home home= (Ens. De) Portable. Remote. Object. narrow (ref, De. Home. class); De de = home. create () ; // Crée un objet De depuis l’interface Ens. Calculateur System. out. println (de. lancer (0. 2, 1000, “vert”)); } catch (Exception e) { System. out. println(e. to. String()); } } } Tuyêt Trâm DANG NGOC - Université de Versailles samedi 6 mars 2021
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 samedi 6 mars 2021
<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 samedi 6 mars 2021
message Client 1 Envoie file d’attente Consomme Client 2 Acquitte Souscrit message Client 1 Délivre message thème Publie Tuyêt Trâm DANG NGOC - Université de Versailles samedi 6 mars 2021 Client 2 Souscrit Délivre message Client 3
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 samedi 6 mars 2021
API JMS <import javax. jms. * ; Tuyêt Trâm DANG NGOC - Université de Versailles samedi 6 mars 2021
Java Transaction Support/API (JTS/JTA) <JTA et JTS permettent aux applications J 2 EE 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 Java. Beans 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 samedi 6 mars 2021
Exemple de déroulement de transaction begin transaction. . . update table-a. . . if (condition-x) commit transaction else if (condition-y) update table-b commit transaction else rollback transaction begin transaction update table-c commit transaction Tuyêt Trâm DANG NGOC - Université de Versailles samedi 6 mars 2021
API JTA <import javax. transaction ; <import javax. transaction. xa ; Tuyêt Trâm DANG NGOC - Université de Versailles samedi 6 mars 2021
Programmation JTA import javax. transaction. User. Transaction ; [. . . ] public void withdraw. Cash(double amount) { User. Transaction ut = context. get. User. Transaction(); try { ut. begin(); update. Checking(amount); machine. Balance -= amount; insert. Machine(machine. Balance); ut. commit(); } catch (Exception ex) { try { ut. rollback(); } catch (System. Exception syex) { throw new EJBException ("Rollback failed: " + syex. get. Message()); } throw new EJBException ("Transaction failed: " + ex. get. Message()); } } [. . . ] Tuyêt Trâm DANG NGOC - Université de Versailles samedi 6 mars 2021
Java. Mail <Java. Mail 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 samedi 6 mars 2021
API Java. Mail <import javax. mail. * ; <import javax. mail. event. * ; <import javax. mail. internet. * ; <import javax. mail. search. * ; Tuyêt Trâm DANG NGOC - Université de Versailles samedi 6 mars 2021
Programmation Java. Mail import javax. mail. *; import javax. mail. internet. *; import java. util. *; public class Send. Email { public String Send. Message(String emailto, String emailfrom, String smtphost, String emailmultipart, String msg. Subject, String msg. Text) { String msg. Text 2 = "multipart message"; boolean sendmultipart = Boolean. value. Of(emailmultipart). boolean. Value(); // set the host Properties props = new Properties(); props. put("mail. smtp. host", smtphost); // create some properties and get the default Session session = Session. get. Default. Instance(props, null); try { // create a message Message msg = new Mime. Message(session); // set the from Internet. Address from = new Internet. Address(emailfrom); msg. set. From(from); Internet. Address[] address = { new Internet. Address(emailto) }; msg. set. Recipients(Message. Recipient. Type. TO, address); msg. set. Subject(msg. Subject); Tuyêt Trâm DANG NGOC - Université de Versailles if(!sendmultipart) { // send a plain text message msg. set. Content(msg. Text, "text/plain"); } else { // send a multipart message// create and fill the first message part Mime. Body. Part mbp 1 = new Mime. Body. Part(); mbp 1. set. Content(msg. Text, "text/plain"); // create and fill the second message part Mime. Body. Part mbp 2 = new Mime. Body. Part(); mbp 2. set. Content(msg. Text 2, "text/plain"); // create the Multipart and its parts to it Multipart mp = new Mime. Multipart(); mp. add. Body. Part(mbp 1); mp. add. Body. Part(mbp 2); // add the Multipart to the message msg. set. Content(mp); } Transport. send(msg); } catch(Messaging. Exception mex) { mex. print. Stack. Trace(); } return "Email envoyé à " + emailto; } } samedi 6 mars 2021
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 <Key. Store Tuyêt Trâm DANG NGOC - Université de Versailles samedi 6 mars 2021
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>, <code. Base URL> <Principal field(s)> { permission perm_class_name "target_name", "action"; . . . permission perm_class_name "target_name", "action"; }; Java. policy <Principal field> : = Principal_class "principal_name" <import javax. security. * ; Tuyêt Trâm DANG NGOC - Université de Versailles samedi 6 mars 2021
Programmation JAAS (authentification) import import java. io. IOException; javax. security. auth. *; javax. security. auth. callback. *; javax. security. auth. login. *; javax. security. auth. spi. *; public class Sample. Login. Module implements Login. Module { 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, Callback. Handler callback. Handler, Map shared. State, Map options) { // Initialize this Login. Module. } public boolean login() { // Method to authenticate a Subject (phase 1). } public boolean logout() { // Method which logs out a Subject. } } grant codebase "file: Sample. Login. Module. jar" { permission javax. security. auth. Auth. Permission "modify. Principals"; }; Tuyêt Trâm DANG NGOC - Université de Versailles samedi 6 mars 2021
Programmation JAAS (autorisation) import java. io. File; import java. security. Privileged. Action; public class Sample. Action implements Privileged. Action { public Object run() { System. out. println("n. Your java. home property value is: " + System. get. Property("java. home")); System. out. println("n. Your user. home property value is: " + System. get. Property("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: . /Sample. Action. jar", Principal sample. principal. Sample. Principal "test. User" { permission java. util. Property. Permission "java. home", "read"; permission java. util. Property. Permission "user. home", "read"; permission java. io. File. Permission "foo. txt", "read"; }; Tuyêt Trâm DANG NGOC - Université de Versailles samedi 6 mars 2021
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 samedi 6 mars 2021
XML – SAX -DOM Tuyêt Trâm DANG NGOC - Université de Versailles samedi 6 mars 2021
API XML < import javax. xml. parsers ; < import javax. xml. transform. dom ; < import javax. xml. transform. sax ; < import javax. xml. transform. stream ; < import org. xml. sax. ext ; < import org. xml. sax. helpers ; < import org. w 3 c. dom. html ; < import org. w 3 c. dom. range ; < import org. w 3 c. dom. traversal ; Tuyêt Trâm DANG NGOC - Université de Versailles samedi 6 mars 2021
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 samedi 6 mars 2021 Tuyêt Trâm DANG NGOC - Université de Versailles
Plan <Architectures multi-tiers : architecture 1, 2, 3 tiers <J 2 EE : architecture générale <Composants J 2 EE : Servlets, JSP, EJB, JMS, JAAS, JAXP, Java. Mail, JNDI, etc. <Outils de développement et d’intégration <Produits existants <Conclusion Tuyêt Trâm DANG NGOC - Université de Versailles samedi 6 mars 2021
J 2 EE SDK <J 2 EE SDK est une définition opérationnelle de la plateforme J 2 EE <Fait par Sun Microsystem pour les démonstrations, les prototypes et les applications non-commerciales <Contient : <J 2 EE Application Server <Serveur Web <Base de données relationnelles <API J 2 EE <un kit de développement et de déploiement <But : permettre aux développeurs d’exécuter leurs applications J 2 EE et vérifier leur compatibilité Tuyêt Trâm DANG NGOC - Université de Versailles samedi 6 mars 2021
Déploiement J 2 EE <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 samedi 6 mars 2021
Plan <Architectures multi-tiers : architecture 1, 2, 3 tiers <J 2 EE : architecture générale <Composants J 2 EE : Servlets, JSP, EJB, JMS, JAAS, JAXP, Java. Mail, JNDI, etc. <Outils de développement et d’intégration <Produits existants <Conclusion Tuyêt Trâm DANG NGOC - Université de Versailles samedi 6 mars 2021
Serveurs J 2 EE <Apache Tomcat, http: //jakarta. apache. org/ <BEA Web. Logic, http: //www. bea. com/ <IBM Web. Sphere <Sun i. Planet 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/ <Silver. Stream Application Server Tuyêt Trâm DANG NGOC - Université de Versailles samedi 6 mars 2021
Plan <Architectures multi-tiers : architecture 1, 2, 3 tiers <J 2 EE : architecture générale <Composants J 2 EE : Servlets, JSP, EJB, JMS, JAAS, JAXP, Java. Mail, JNDI, etc. <Outils de développement et d’intégration <Produits existants Conclusion <Conclusion Tuyêt Trâm DANG NGOC - Université de Versailles samedi 6 mars 2021
Exemple d’application en entreprise soumission d’une fiche de renseignement Vérification des données Servlet de fiches insertion de la fiche Message d’erreur génération de page d’erreur JSP Tuyêt Trâm DANG NGOC - Université de Versailles Construction de la requête d’insertion JDBC Insertion SGBD samedi 6 mars 2021
Exemple d’application en entreprise Navigateur Servlet Requête HTTP Compsants graphiques JSP fichier HTML EJB Bean Session Bean Entité Base de données relationnelles Tuyêt Trâm DANG NGOC - Université de Versailles samedi 6 mars 2021 Mainframe Serveurs de donnes JDBC Serveur Web Serveur d’applications Client
Exemple d’application en entreprise récupérer classes recupérer classes Servlet de classes Listes de classes présentation liste de classes renvoie classes voir notifica tions JSP Tuyêt Trâm DANG NGOC - Université de Versailles récupérer classes EJB Classes JMS samedi 6 mars 2021 EIS renvoie classes pas de notifica tions
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 samedi 6 mars 2021
- Slides: 93