Management Pour Les Nuls - PDF by cgb19383

VIEWS: 0 PAGES: 52

More Info
									               JEE pour les nuls*

               Atelier CRI du 15/01/2008




    * Je laisse la responsabilité de ce titre à Alain Kermarrec ;-)
1
                           Licence

    Ce travail est mis à disposition sous une licence Creative Commons
                           Vous êtes libres
        De reproduire, distribuer et communiquer cette création au public
                             De modifier cette création




        Cette création est mise à disposition selon le Contrat
      Paternité-NonCommercial-ShareAlike 2.5 disponible en
      ligne http://creativecommons.org/licenses/by-nc-sa/2.5/
2
             JEE pour les nuls

    • Ou bien :
      – J2EE pour les nuls
      – JEE pour les null
      – Java EE pour les nuls


    • Allez on y va…

3
                              Java
    • Langage
      – Objet
      – Multiplateforme              Java
         • Utilisation d’une JVM     Java
           (Java Virtual Machine)
    • JVM                            JVM
                                     JVM
      – JRE (Java Runtime
        Environment)
      – JDK (Java                    OS
        Development Kit)             OS
         • JRE + javac + javadoc +
4
                              JAVA
    • JRE
      – Sun (Pour Solaris, Linux, Windows), IBM (AIX, Linux,
        etc.), BEA, Apple (Mac)
      – Microsoft (http://www.microsoft.com/mscorp/java/faq.mspx) :
         • Which third-party Java Run-time Environment (JRE) does
           Microsoft recommend?
             – Because Microsoft does not support third-party Java
               implementations, including monitoring and fixes of potential and
               exposed security vulnerabilities, we do not distribute or make
               recommendations on these products. However, customers can
               install any compatible Java virtual machine on any computer
               running Microsoft Windows that they wish. Microsoft works with
               third parties to ensure that they have all of the information
               they need for their technologies to work well in the Windows
               environment.
5
             JAVA
    • Langage objet
      – On crée des objets en mémoire, à partir de classes,
        pour stocker de l’information et/ou exécuter des
        traitements
         • Un objet est une instance d’une classe
         • Un objet est constitué d’attributs et de méthodes
    • Le code source dans un .java
    • Javac du JDK le transforme en .class
    • Le .class est exécuté dans un JRE
      – Un Test1.class généré sous windows fonctionnera sur
        Linux
6
      – Ex : java Test1
                                  Java
    • On ne développe jamais seul
    • Des bibliothèques de classes
      à tout faire existent déjà
    • Notre .class va faire appel à
      ces classes (importer) pour
      créer de nouveaux objets
    • Quand on va lancer notre
      programme la JVM devra
      savoir où trouver ces classes
    • On parle de classpath
7      – Ex : java -cp bin;util Test2
                   JAVA
    • Pour les maniaques du rangement !
    • Les classes sont dans des répertoires
       – Pour avoir un espace de nom propre et éviter les conflits
       – Par domaine pour s’y retrouver
       – On utilise le « . » comme séparateur de répertoires
    • Exemple
       – org.esupportail.commons.services.smtp.AsynchronousSmtpServiceImpl
       – org.esupportail      utilisation du nom de domaine esup-portail.org à
         l’envers (le « - » n’est pas valide)
       – commons        pour esup-commons
       – services.smtp      pour le service de mail
       – AsynchronousSmtpServiceImpl        Le nom de la classe avec Une
8        majuscule en première lettre et sur chaque mot
                 JAVA

    • On fait des Zip de tout ça
      – C’est plus pratique
      – Ce sont des .jar (Java Archive)
    • Dans le classpath on utilise donc :
      – Des répertoires de Classes
      – Des Zip de Classes
      – Ex : java -cp bin;util Test3
        java.lang.NoClassDefFoundError: org/apache/log4j/Logger
      – Mieux : java -cp bin;util;lib/log4j-1.2.13.jar Test3
9
                Lancer java
     •   En général les scripts shell utilisent la variable d’environnement
         JAVA_HOME pour pointer vers le répertoire d’installation de java
     •   $JAVA_HOME/bin contient l’exécutable « java » qui va servir au
         lancement du programme
     •   Quelques options de la ligne de commande java
          – On a vu la gestion du classpath
              • -cp path1;path2;fic1.jar:fic2.jar
          – On peut gérer la mémoire minimum et maximum allouée
              • -Xms512m -Xmx1024m
          – On peut faire du debug à distance
              • -Xdebug -Xrunjdwp:transport=dt_socket,address=55555,server=y,suspend=n
          – On peut faire de l’administration à distance
              • On utilisant JMX (Java Management Extensions)
              • -Dcom.sun.management.jmxremote.port=9004


10
        Objets et interfaces
     • Objets
       – Attributs
          • Peuvent être accessibles directement
          • Mais très souvent on crée des méthodes pour manipuler les
            attributs (des « accesseurs »)
              – Meilleure maîtrise de l’évolution du contenu de l’objet
              – Ex : une Personne à un nom on aura une méthode pour connaître
                son non    getNom()
       – Méthodes
          • Pour manipuler les données d’un objet ou offrir un service
              – Ex : raymond.travailleMaintenant() !
          • Une méthode un peu particulière est appelée à la création de
11          l’objet : Le constructeur
        Objets et interfaces

     • Interfaces
       – Définition d’une liste de méthodes
       – On va pouvoir utiliser tout objet qui sait
         répondre à cette liste de méthodes
          • On dit qu’il implémente l’interface
          • Ex : raymond.travailleMaintenant() devient
            robot.travailleMaintenant() (☺ ou )
       – On va voir l’utilité de ce mécanisme dans les
         serveurs d’applications où l’on va pouvoir
         « brancher » des applications
12
            Revenons à Java EE

     • Java ME (Micro Edition)
       – Je ne connais pas bien
     • Java SE (Standard Edition)
       – On peut tout faire avec
       – Sert de base à Java EE
     • Java EE (Enterprise Edition)
       – L’usine à gaz et à fric que le temps,
         l’expérience et l’Open Source ont rendu
13
         accessible
                               Java EE
     • C’est un gros package de technologies
        – Sur lesquelles je vais revenir
            • JSP ; Servlet ; EJB
        – Ou pas
            • JSF (Java Server Faces. Utilisé dans les développements ESUP et
              Rennes 1)
            • JMS (Java Message Service)
            • JAX-RPC (Java API for XML-Based RPC)
            • Etc.
     • En java, chaque technologie majeure passe par une
       phase ouverte de spécification
        – JCP (Java Community Process      http://www.jcp.org)
        – Production de JSR (Java Specification Request    Ex. de JSR 168
          pour portlet)
14
           La machine de guerre

     • Comme le cadre de travail est clair tout le
       monde y va :
       – Les éditeurs (Oracle, IBM, SUN) lancent des
         serveurs d’applications compatibles Java EE
       – Les DSI forment leurs personnels
       – Les SSII vendent de la prestation
     • Oui mais :
       – Les développeurs souffrent sur certains points
       – Les prix sont parfois astronomiques
15
                            Alors ?
     • JSP et Servlet sont incontournables
        – Apache Tomcat est un serveur d’applications (non Java
          EE au sens stricte) qui ne fait que ça mais le fait bien et
          gratuitement
     • Et pour tout le reste ?
        – Accès aux données        Les EJB sont trop lourds on
          utilise Hibernate
        – On organise les développements avec un conteneur
          léger comme Spring
        – Si on a tel ou tel besoin on va trouver en Open Source
          la bibliothèque qu’il faut
16
                        Servlet

     • C’est une classe java qui va produire le contenu
       d’une page Web
     • Cette classe doit implémenter l’interface Servlet
     • Pratiquement on doit écrire, dans une méthode
       précise, le code java produisant le HTML
     • Le serveur d’applications va savoir appeler cette
       méthode
       – Vous vous souvenez du puzzle ?

17
                           JSP

     • Java Server Page
     • Ecrire une servlet c’est bien mais c’est
       encore trop compliqué
       – Il faut écrire une classe et la compiler
     • JSP permet d’incérer facilement du JAVA
       dans une page HTML
       – C’est le serveur d’application qui va se charger
         de la transformer en Servlet et de la compiler
         quand il le faut
18
                    JSP et Servlet

     • Ce que je viens de vous décrire c’est du bricolage
     • Dans la pratique
       – Les JSP servent au rendu (Vue) et font appel à des
         classes « métier » écrites en java (Modèle) qui
         appellent, à leur tour, le service de stockage de
         l’information (en base de données par ex.)
       – Une Servlet sert à aiguiller entre les vues (Contrôleur)
       – On parle alors de MVC (Modèle, Vue, Contrôleur)


19
          Et si on rangeait ? Ouai !

     • On va mettre toutes les JSP, Servlet ainsi
       que les Classes et librairies qu’elles utilisent
       dans un .war (Web Archive)
       – C’est encore un zip
       – On y trouve toujours
          • WEB-INF/
             – web.xml
             – lib/
             – Classes/
20
              On s’y retrouve mieux ☺
     • web.xml
        – Est un fichier XML de description de l’application
        – Il a une syntaxe précise
        – On va, par ex., y trouver le nom de la Classe (implémentant
          l’interface Servlet) à utiliser pour tel ou tel chemin d’une URL Web
     • Lib/
        – On va y mettre tous les .jar dont notre programme a besoin
     • Classes/
        – On va y mettre toutes les .class que l’on produit
     • Le serveur d’applications va savoir, pour chaque
       application qu’il héberge, lire le web.xml et créer
       automatiquement un classpath spécifique à l’application à
       partir des répertoires lib et classes
21
                               EJB
     • Enterprise Java Bean
       – Bean
          • Objet dont les attributs ne sont accessibles que par des
            accesseurs et dont un des constructeurs ne prend aucun
            paramètre
       – Java
          • OK
       – Enterprise
          • Compliqué ? Solide ? Lourd ? Cher ?
     • Ils sont de deux types
       – Les EJB session
       – Les EJB entité
22
                            EJB
     • L’idée de départ (EJB 1 et 2)
       – Avoir des objets qui offrent des services (Les EJB
         session) répartis, pour des questions de charge, sur
         différents serveurs
       – Avoir un mécanisme standard de persistance des
         données contenues dans les objets (Les EJB Entité)
     • Dans la pratique c’est compliqué
       – Besoin, pour les objets, d’implémenter une interface
         particulière
       – Objets non utilisables hors d’un serveur Java EE
23
       – Pas facilement portable d’un serveur à un autre
                           Hibernate
     • Hibernate est un exemple d’outil de mapping
       objet <-> Relationnel
        – Le mapping est défini dans des fichiers XML
        – Un objet devient une ligne d’une table dans une base de données
        – Un attribut devient un champ de cette ligne
     • Permet de stocker tout objet (pas d’interface particulière)
     • Utilisable hors d’un serveur d’applications Java EE
        – Un simple Tomcat
        – Un programme batch



24
                             EJB 3

     •   EJB 3 reprend les principes d’Hibernate
     •   Hibernate est compatibles avec EJB 3
     •   L’honneur est sauf et les DSI restent en poste ;-)
     •   EJB 3 est surtout focaliser sur l’enregistrement
         des données
         – JPA (Java Persistence API)
     • EJB 3 (JSR 220) fait parti de Java EE 5
         – Faites moi penser à vous parler de versions !
25
             Et les EJB session ?

     • Les Web Services mais aussi les
       framework MVC et les conteneurs légers
       font qu’ils n’ont plus besoin d’exister en tant
       que tel
     • Un Web Service
       – « C’est un EJB session » sauf que l’on utilise
         HTTP pour communiquer et qu’il n’est pas
         obligatoirement écrit en java
26
                   Conteneur léger
     • Son rôle est de créer automatiquement des objets
       et de les mettre en relation
       – C’est ce que fait un serveur Java EE !
       – Mais il est léger :
          • Pas besoin, pour les objets manipulés, d’implémenter une
            interface particulière
          • Utilisable hors d’un serveur Java EE (Tomcat, Batch)
          • Il est tellement léger qu’il est intégré dans l’application et que
            son utilisation impacte seulement les développeurs, pas les
            exploitants
          • Permet de facilement changer un morceau (de puzzle) par un
            autre
          • Ex. de Spring très apprécié des développeurs
27
               ESUP-Commons

     • Ou comment fabriquer un pseudo serveur
       Java EE commun
     • Une démarche
       – Esup-blank
       – Des outils communs
       – Du rangement
     • Une librairie
     • Une formation
28
     • Une communauté
                         ESUP-Commons, le puzzle
                                                Requêtes web

                                                   Présentation
                         web
     Gestion des beans




                                                Logique applicative

                                                  Logique métier

                                  Données




                                                                                Cache
                         data




                                                        portail
                                                 LDAP




                                                                  URLs




                                                                                        Auth.
                                                                         I18n
                                    Accès

                                  Persistance



                                    base
29
                  Les versions de java
     •   1.2
         – Quel est l’idiot qui a oublié de changer le premier numéro ?
         – Que sera la version 2.0 ?
         – J2SE 1.2, J2EE 1.2
     •   1.3
         – J2SE 1.3, J2EE 1.3
     •   1.4
         – J2SE 1.4, J2EE 1.4
     •   1.5
         – J2SE 1.5, Java EE 5
     •   1.6
         – Java SE 6
     •   En général les scripts shell utilisent la variable d’environnement
         JAVA_HOME pour savoir quelle version de java utiliser pour lancer un
30
         programme donné
                Qu’ai-je oublié ?

     • J’ai parlé Servlet (Classe java qui
       fonctionne dans un serveur d’applications)
       mais :
       – C’est quoi un Portlet ?
       – C’est quoi une Applet ?
     • Les exceptions


31
           C’est quoi un Portlet ?

     • Une classe java (conforme à la JSR 168)
       qui tourne dans un portail
       – Le but est d’avoir sur une même page Web
         plusieurs applications (portail)
       – C’est sous forme d’un .war comme une
         application Web avec un WEB-INF/portlet.xml
         en plus
       – L’interface à implémenter n’est plus Servlet
32
         mais Portlet
        C’est quoi une Applet

     • C’est une classe java qui tourne dans une
       JVM intégrée au navigateur Web et qui
       s’exécute sur le poste client
       – C’est sous forme d’un .jar que le navigateur va
         télécharger sur le web
       – Je n’en sais pas plus



33
                   Les exceptions
     • En java quand quelque chose se passe mal on a
       une exception
       – java.lang.NullPointerException
       – java.io.FileNotFoundException
     • Pour le développeur c’est pratique
       – Il essaie (try) des choses
       – Il attrape (catch) des exceptions pour éventuellement
         les traiter
       – Et s’il ne sait pas faire il soumet (throw) le problème au
         chef (en fait, la méthode qui l’appelle dans la pile
34
         d’exécution (stack))
                         Les exceptions
     •   Ce sont aussi des objets avec des méthodes pour connaître :
         – La cause
             • En générale on lève une exception parce que l’on a eu un autre problème
               avant
             • org.esupportail.lecture.exceptions.dao.XMLParseException à cause d’une
               org.dom4j.DocumentException
         – Le message
             • org.dom4j.DocumentException: Connection refused
         – La pile d’exécution
             • org.dom4j.DocumentException: Connection refused
               org.dom4j.io.SAXReader.read(SAXReader.java:484)
             • org.dom4j.io.SAXReader.read(SAXReader.java:321)
             • org.esupportail.lecture.dao.FreshSourceThread.getFreshSource
               (FreshSourceThread.java:81)
             • org.esupportail.lecture.dao.FreshSourceThread.run
               (FreshSourceThread.java:57)

35
                Travaux pratiques

     •   ANT
     •   Voir une config Spring
     •   Voir une config log4j
     •   Eclipse et SVN




36
                           ANT
     • ANT est un outil permettant d’automatiser des
       tâches (comme make utilisé sous Unix)
     • Le fait qu’il soit écrit en java permet qu’il soit
       utilisable sur toutes les plateformes disposant une
       JVM
     • Le principe repose sur des cibles (target) décrites
       dans un fichier XML (build.xml le plus souvent)
       – Les cibles peuvent avoir des relations de dépendance
         entre elles
       – Elles peuvent faire référence à des propriétés
         contenues dans un(des) fichier(s) de propriétés
37
         facilement éditable(s) (par un exploitant par ex.)
                                   ANT
     • Les cibles ont à leur disposition des tâches (task) pour
       effectuer différentes actions :
        – echo, mkdir, copy, replaceregexp, jar, javac, javadoc, etc.
     • Les tâches agissent sur des ensembles de fichiers :
        – fileset, pathelement, etc.
     • Mode de lancement de ANT
        – ant    exécute la cible par défaut (utilisation du build.xml du
          répertoire courant)
        – ant –p    donne la liste des cibles disponibles
        – ant deploy    lance la cible « deploy » en charge d’installer
          (déployer) une application
        – ant deluser -Duser=toto     lance la cible « deluser » de
38        suppression du user toto de la base de données du portail
                       ANT

     • Un exemple de cible :




39
                              Spring
     • Spring est un conteneur léger
       – Son rôle est de créer des objets et de les mettre en
         relation
          • Le développeur utilise des objets mais il n’écrit plus le code de
            création de ces objets
          • Il demande à Spring de les lui fournir
       – Spring permet de facilement changer un morceau (de
         puzzle) par un autre
          • Si un développeur a besoin d’un objet pour envoyer du mail
          • Et qu’une interface définie que l’envoi de mail se fait en
            utilisant une méthode de nom send
          • Le développeur a juste besoin d’appeler cette méthode
          • Spring va se charger de créer le bon objet au bon moment
40
                               Spring
     • Va appeler les objets qu’il gère des beans
     • La définition de ces beans se fait dans un fichier XML
     • Le développeur ne s’occupe plus de ça (il veut juste
       envoyer un mail)
        – Il n’a même plus à se soucier du traitement du fichier de
          configuration contenant l’adresse du serveur de mail
        – Vous comprenez pourquoi je vous disais que les développeurs
          aimaient Spring ;-)
     • L’exploitant a accès à ce fichier XML et peut tout changer
        – S’il le veut il peut même envoyer les mails dans une base de
          données pour archivage et ne plus utiliser SMTP

41
     Spring




42
                     Spring




     • On peut centraliser le paramétrage



43
                            log4j
     • Log for Java
     • Depuis java 1.4 il existe, en standard dans la
       JVM, un mécanisme de log qui ressemble
       beaucoup à ce qui existait déjà avec log4j
     • Apache commons logging met tout le monde
       d’accord en offrant une surcouche au
       développeur
     • Le développeur logue tout :
       – Les erreurs (ERROR), les avertissements (WARN), des
         informations plus ou moins importantes pour l’exploitant
         (INFO) ou lui (DEBUG)
44
                                   log4j
     • C’est l’exploitant ensuite qui décide de ce qu’il garde, où
       et comment
        – Grace à un fichier log4j.properties ou log4j.xml qu’il met à la racine
          du classpath (emplacement par défaut) ou dans properties/logging
          (pour un développement esup-commons)
        – Il a sa disposition des appenders (où seront envoyés les logs)
            • Fichiers tournants ou pas
            • Syslog
            • Etc.
        – Il décide de quelles classes il veut les logs en précisant
            • L’appender à utiliser
            • Le niveau de log souhaité
                – ERROR, WARN, INFO, DEBUG
45
     log4J




46
                    Eclipse
     • Eclipse est un IDE écrit en java qui permet, entre autres
       choses, de développer en JAVA
        – Coloration syntaxique, auto-complétion, vérification des erreurs à
          la volée, etc.
     • Il est très modulaire et permet de facilement éditer
       différents type de fichiers grâce à différents plugins
        –   Editeur XML générique
        –   Editeur ANT
        –   Editeur Spring
        –   Etc.
     • Il offre aussi des outils intéressants
        – Navigateur LDAP ou SQL
        – Client SVN
47
                     SVN

     • SubVerSion est un outil de gestion des
       versions
       – Très utilisé par les développeurs il pourrait
         (devrait ?) l’être par les exploitants pour gérer
         leurs fichiers de configuration
       – Quand un développeur n’utilisant pas SVN le
         découvre après avoir longtemps résisté, il se
         demande comment il a pu s’en passer
48
                    SVN

     • C’est simple !
       – Checkout     on prend ce qui est sur le serveur
         pour le mettre en local
       – Update     on met à jour ce qui est local avec
         ce qui est sur le serveur
       – Commit      on met à jour le serveur avec ce qui
         a été modifié en local

49
                       SVN
     • On peut faire un tag    C’est juste une copie, une
       image à un moment donné, de ce qui est sur le
       serveur (ex : version mise en prod le 01/04/2007)
     • Quand ça ne marche plus :
        – On a des outils pour voir ce qui a changé depuis telle
          date, tel tag
        – On peut revenir (switch) à l’image à une date, un tag
     • On peut facilement travailler à plusieurs :
        – Au pire on devra faire une fusion (merge) et décider
          laquelle des deux modifications est la plus pertinentes
50
     SVN




51
                      Conclusion

     • Java c’est :
       – Tentaculaire, passionnant, structurant


     • Donc java peut rendre :
       – Insomniaque, psychorigide, maniaque


     • Vous êtes prévenus. Faites attention !
52

								
To top