Vous êtes sur la page 1sur 52

JEE pour les nuls*

Atelier CRI du 15/01/2008

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

Licence
Ce travail est mis disposition sous une licence Creative Commons

Vous tes libres


De 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 va
3

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

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 classpath
7

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 mail
8

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 Test3
java.lang.NoClassDefFoundError: org/apache/log4j/Logger

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


9

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=9004
10

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 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)


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 faut
16

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 faut
18

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 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 paramtre

Java
OK

Enterprise
Compliqu ? Solide ? Lourd ? Cher ?

Ils sont de deux types


Les EJB session Les EJB entit
22

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 java
26

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 dveloppeurs
27

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 puzzle
Requtes web

Prsentation Logique applicative Logique mtier Donnes Cache

web data
Accs Persistance

Gestion des beans


29

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 moment
40

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 SMTP
41

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, DEBUG
45

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 SVN
47

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 passer
48

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 local
49

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 pertinentes
50

SVN

51

Conclusion
Java cest :
Tentaculaire, passionnant, structurant

Donc java peut rendre :


Insomniaque, psychorigide, maniaque

Vous tes prvenus. Faites attention !


52