Download - JEE Pour Les Nuls

Transcript

JEE pour les nuls*Atelier CRI du 15/01/2008

1

* Je laisse la responsabilit de ce titre Alain Kermarrec ;-)

LicenceCe travail est mis disposition sous une licence Creative Commons

Vous tes libresDe reproduire, distribuer et communiquer cette cration au public De modifier cette cration

Cette cration 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 va3

Java Langage Objet Multiplateforme Utilisation dune JVM (Java Virtual Machine)

Java Java JVM JVM OS OS

JVM JRE (Java Runtime Environment) JDK (Java Development Kit) 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 cre des objets en mmoire, partir de classes, pour stocker de linformation et/ou excuter des traitements Un objet est une instance dune classe Un objet est constitu dattributs et de mthodes

Le code source dans un .java Javac du JDK le transforme en .class Le .class est excut dans un JRE Un Test1.class gnr sous windows fonctionnera sur Linux Ex : java Test1

6

Java On ne dveloppe jamais seul Des bibliothques de classes tout faire existent dj Notre .class va faire appel ces classes (importer) pour crer de nouveaux objets Quand on va lancer notre programme la JVM devra savoir o trouver ces classes On parle de classpath7

Ex : java -cp bin;util Test2

JAVA Pour les maniaques du rangement ! Les classes sont dans des rpertoires Pour avoir un espace de nom propre et viter les conflits Par domaine pour sy retrouver On utilise le . comme sparateur de rpertoires

Exemple org.esupportail.commons.services.smtp.AsynchronousSmtpServiceImpl

org.esupportail utilisation du nom de domaine esup-portail.org lenvers (le - nest pas valide) commons pour esup-commons services.smtp pour le service de mail8

AsynchronousSmtpServiceImpl Le nom de la classe avec Une majuscule en premire lettre et sur chaque mot

JAVA On fait des Zip de tout a Cest plus pratique Ce sont des .jar (Java Archive)

Dans le classpath on utilise donc : Des rpertoires de Classes Des Zip de Classes Ex : java -cp bin;util Test3java.lang.NoClassDefFoundError: org/apache/log4j/Logger

Mieux : java -cp bin;util;lib/log4j-1.2.13.jar Test39

Lancer java En gnral les scripts shell utilisent la variable denvironnement JAVA_HOME pour pointer vers le rpertoire dinstallation de java $JAVA_HOME/bin contient lexcutable 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 grer la mmoire minimum et maximum alloue -Xms512m -Xmx1024m

On peut faire du debug distance -Xdebug -Xrunjdwp:transport=dt_socket,address=55555,server=y,suspend=n

On peut faire de ladministration distance On utilisant JMX (Java Management Extensions) -Dcom.sun.management.jmxremote.port=900410

Objets et interfaces Objets Attributs Peuvent tre accessibles directement Mais trs souvent on cre des mthodes pour manipuler les attributs (des accesseurs ) Meilleure matrise de lvolution du contenu de lobjet Ex : une Personne un nom on aura une mthode pour connatre son non getNom()

Mthodes Pour manipuler les donnes dun objet ou offrir un service Ex : raymond.travailleMaintenant() !11

Une mthode un peu particulire est appele la cration de lobjet : Le constructeur

Objets et interfaces Interfaces Dfinition dune liste de mthodes On va pouvoir utiliser tout objet qui sait rpondre cette liste de mthodes On dit quil implmente linterface Ex : raymond.travailleMaintenant() devient robot.travailleMaintenant() ( ou )

On va voir lutilit de ce mcanisme dans les serveurs dapplications o lon va pouvoir brancher des applications12

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) Lusine gaz et fric que le temps, lexprience et lOpen Source ont rendu accessible

13

Java EE Cest un gros package de technologies Sur lesquelles je vais revenir JSP ; Servlet ; EJB

Ou pas JSF (Java Server Faces. Utilis dans les dveloppements 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 spcification JCP (Java Community Process http://www.jcp.org) Ex. de JSR 168 Production de JSR (Java Specification Request 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 dapplications compatibles Java EE Les DSI forment leurs personnels Les SSII vendent de la prestation

Oui mais :15

Les dveloppeurs souffrent sur certains points Les prix sont parfois astronomiques

Alors ? JSP et Servlet sont incontournables Apache Tomcat est un serveur dapplications (non Java EE au sens stricte) qui ne fait que a mais le fait bien et gratuitement

Et pour tout le reste ? Accs aux donnes Les EJB sont trop lourds on utilise Hibernate On organise les dveloppements avec un conteneur lger comme Spring Si on a tel ou tel besoin on va trouver en Open Source la bibliothque quil faut16

Servlet Cest une classe java qui va produire le contenu dune page Web Cette classe doit implmenter linterface Servlet Pratiquement on doit crire, dans une mthode prcise, le code java produisant le HTML Le serveur dapplications va savoir appeler cette mthode Vous vous souvenez du puzzle ?17

JSP Java Server Page Ecrire une servlet cest bien mais cest encore trop compliqu Il faut crire une classe et la compiler

JSP permet dincrer facilement du JAVA dans une page HTML Cest le serveur dapplication qui va se charger de la transformer en Servlet et de la compiler quand il le faut18

JSP et Servlet Ce que je viens de vous dcrire cest du bricolage Dans la pratique Les JSP servent au rendu (Vue) et font appel des classes mtier crites en java (Modle) qui appellent, leur tour, le service de stockage de linformation (en base de donnes par ex.) Une Servlet sert aiguiller entre les vues (Contrleur) On parle alors de MVC (Modle, Vue, Contrleur)

19

Et si on rangeait ? Ouai ! On va mettre toutes les JSP, Servlet ainsi que les Classes et librairies quelles utilisent dans un .war (Web Archive) Cest encore un zip On y trouve toujours WEB-INF/ web.xml lib/ Classes/20

On sy retrouve mieux web.xml Est un fichier XML de description de lapplication Il a une syntaxe prcise On va, par ex., y trouver le nom de la Classe (implmentant linterface Servlet) utiliser pour tel ou tel chemin dune URL Web

Lib/ On va y mettre tous les .jar dont notre programme a besoin

Classes/ On va y mettre toutes les .class que lon produit

Le serveur dapplications va savoir, pour chaque application quil hberge, lire le web.xml et crer automatiquement un classpath spcifique lapplication partir des rpertoires lib et classes21

EJB Enterprise Java Bean Bean Objet dont les attributs ne sont accessibles que par des accesseurs et dont un des constructeurs ne prend aucun paramtre

Java OK

Enterprise Compliqu ? Solide ? Lourd ? Cher ?

Ils sont de deux types Les EJB session Les EJB entit22

EJB Lide de dpart (EJB 1 et 2) Avoir des objets qui offrent des services (Les EJB session) rpartis, pour des questions de charge, sur diffrents serveurs Avoir un mcanisme standard de persistance des donnes contenues dans les objets (Les EJB Entit)

Dans la pratique cest compliqu Besoin, pour les objets, dimplmenter une interface particulire Objets non utilisables hors dun serveur Java EE Pas facilement portable dun serveur un autre

23

Hibernate Hibernate est un exemple doutil de mapping objet Relationnel Le mapping est dfini dans des fichiers XML Un objet devient une ligne dune table dans une base de donnes Un attribut devient un champ de cette ligne

Permet de stocker tout objet (pas dinterface particulire) Utilisable hors dun serveur dapplications Java EE Un simple Tomcat Un programme batch

24

EJB 3 EJB 3 reprend les principes dHibernate Hibernate est compatibles avec EJB 3 Lhonneur est sauf et les DSI restent en poste ;-) EJB 3 est surtout focaliser sur lenregistrement des donnes 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 lgers font quils nont plus besoin dexister en tant que tel Un Web Service Cest un EJB session sauf que lon utilise HTTP pour communiquer et quil nest pas obligatoirement crit en java26

Conteneur lger Son rle est de crer automatiquement des objets et de les mettre en relation Cest ce que fait un serveur Java EE ! Mais il est lger : Pas besoin, pour les objets manipuls, dimplmenter une interface particulire Utilisable hors dun serveur Java EE (Tomcat, Batch) Il est tellement lger quil est intgr dans lapplication et que son utilisation impacte seulement les dveloppeurs, pas les exploitants Permet de facilement changer un morceau (de puzzle) par un autre Ex. de Spring trs apprci des dveloppeurs27

ESUP-Commons Ou comment fabriquer un pseudo serveur Java EE commun Une dmarche Esup-blank Des outils communs Du rangement

28

Une librairie Une formation Une communaut

ESUP-Commons, le puzzleRequtes web

Prsentation Logique applicative Logique mtier Donnes Cache

web dataAccs Persistance

Gestion des beans29

portail

LDAP

URLs

Auth.

I18n

base

Les versions de java 1.2 Quel est lidiot qui a oubli de changer le premier numro ? Que sera la version 2.0 ? J2SE 1.2, J2EE 1.2

30

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 gnral les scripts shell utilisent la variable denvironnement JAVA_HOME pour savoir quelle version de java utiliser pour lancer un programme donn

Quai-je oubli ? Jai parl Servlet (Classe java qui fonctionne dans un serveur dapplications) mais : Cest quoi un Portlet ? Cest quoi une Applet ?

Les exceptions

31

Cest quoi un Portlet ? Une classe java (conforme la JSR 168) qui tourne dans un portail Le but est davoir sur une mme page Web plusieurs applications (portail) Cest sous forme dun .war comme une application Web avec un WEB-INF/portlet.xml en plus Linterface implmenter nest plus Servlet mais Portlet

32

Cest quoi une Applet Cest une classe java qui tourne dans une JVM intgre au navigateur Web et qui sexcute sur le poste client Cest sous forme dun .jar que le navigateur va tlcharger sur le web Je nen 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 dveloppeur cest pratique Il essaie (try) des choses Il attrape (catch) des exceptions pour ventuellement les traiter Et sil ne sait pas faire il soumet (throw) le problme au chef (en fait, la mthode qui lappelle dans la pile dexcution (stack))

34

Les exceptions Ce sont aussi des objets avec des mthodes pour connatre : La cause En gnrale on lve une exception parce que lon a eu un autre problme avant org.esupportail.lecture.exceptions.dao.XMLParseException cause dune org.dom4j.DocumentException

Le message org.dom4j.DocumentException: Connection refused

La pile dexcution 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 dautomatiser des tches (comme make utilis sous Unix) Le fait quil soit crit en java permet quil soit utilisable sur toutes les plateformes disposant une JVM Le principe repose sur des cibles (target) dcrites dans un fichier XML (build.xml le plus souvent) Les cibles peuvent avoir des relations de dpendance entre elles Elles peuvent faire rfrence des proprits contenues dans un(des) fichier(s) de proprits facilement ditable(s) (par un exploitant par ex.)

37

ANT Les cibles ont leur disposition des tches (task) pour effectuer diffrentes actions : echo, mkdir, copy, replaceregexp, jar, javac, javadoc, etc.

Les tches agissent sur des ensembles de fichiers : fileset, pathelement, etc.

Mode de lancement de ANT ant excute la cible par dfaut (utilisation du build.xml du rpertoire courant) ant p donne la liste des cibles disponibles ant deploy lance la cible deploy en charge dinstaller (dployer) une application lance la cible deluser de ant deluser -Duser=toto suppression du user toto de la base de donnes du portail

38

ANT Un exemple de cible :

39

Spring Spring est un conteneur lger Son rle est de crer des objets et de les mettre en relation Le dveloppeur utilise des objets mais il ncrit plus le code de cration de ces objets Il demande Spring de les lui fournir

Spring permet de facilement changer un morceau (de puzzle) par un autre Si un dveloppeur a besoin dun objet pour envoyer du mail Et quune interface dfinie que lenvoi de mail se fait en utilisant une mthode de nom send Le dveloppeur a juste besoin dappeler cette mthode Spring va se charger de crer le bon objet au bon moment40

Spring Va appeler les objets quil gre des beans La dfinition de ces beans se fait dans un fichier XML Le dveloppeur ne soccupe plus de a (il veut juste envoyer un mail) Il na mme plus se soucier du traitement du fichier de configuration contenant ladresse du serveur de mail Vous comprenez pourquoi je vous disais que les dveloppeurs aimaient Spring ;-)

Lexploitant a accs ce fichier XML et peut tout changer Sil le veut il peut mme envoyer les mails dans une base de donnes pour archivage et ne plus utiliser SMTP41

Spring

42

Spring

On peut centraliser le paramtrage

43

log4j Log for Java Depuis java 1.4 il existe, en standard dans la JVM, un mcanisme de log qui ressemble beaucoup ce qui existait dj avec log4j Apache commons logging met tout le monde daccord en offrant une surcouche au dveloppeur Le dveloppeur logue tout : Les erreurs (ERROR), les avertissements (WARN), des informations plus ou moins importantes pour lexploitant (INFO) ou lui (DEBUG)44

log4j Cest lexploitant ensuite qui dcide de ce quil garde, o et comment Grace un fichier log4j.properties ou log4j.xml quil met la racine du classpath (emplacement par dfaut) ou dans properties/logging (pour un dveloppement esup-commons) Il a sa disposition des appenders (o seront envoys les logs) Fichiers tournants ou pas Syslog Etc.

Il dcide de quelles classes il veut les logs en prcisant Lappender utiliser Le niveau de log souhait ERROR, WARN, INFO, DEBUG45

log4J

46

Eclipse Eclipse est un IDE crit en java qui permet, entre autres choses, de dvelopper en JAVA Coloration syntaxique, auto-compltion, vrification des erreurs la vole, etc.

Il est trs modulaire et permet de facilement diter diffrents type de fichiers grce diffrents plugins Editeur XML gnrique Editeur ANT Editeur Spring Etc.

Il offre aussi des outils intressants Navigateur LDAP ou SQL Client SVN47

SVN SubVerSion est un outil de gestion des versions Trs utilis par les dveloppeurs il pourrait (devrait ?) ltre par les exploitants pour grer leurs fichiers de configuration Quand un dveloppeur nutilisant pas SVN le dcouvre aprs avoir longtemps rsist, il se demande comment il a pu sen passer48

SVN Cest simple ! Checkout on prend ce qui est sur le serveur pour le mettre en local on met jour ce qui est local avec Update ce qui est sur le serveur Commit on met jour le serveur avec ce qui a t modifi en local49

SVN On peut faire un tag Cest 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) limage une date, un tag

On peut facilement travailler plusieurs : Au pire on devra faire une fusion (merge) et dcider laquelle des deux modifications est la plus pertinentes50

SVN

51

Conclusion Java cest : Tentaculaire, passionnant, structurant

Donc java peut rendre : Insomniaque, psychorigide, maniaque

Vous tes prvenus. Faites attention !52