1. TP JEE
Ce document contient les énoncés de TP JEE
et des guides techniques pour les serveurs et outils utilisés
Tomcat7, Jboss 7, Eclipse Juno
Le contenu de ce document est mis à disposition selon les termes de la
Licence Creative Commons Attribution - Partage dans les Mêmes Conditions 3.0 France.
1
3. Installation de Tomcat
• Décompresser l’archive dans un sous-répertoire
o avec les droits en lecture/écriture
o sans d’espace ou accents
o Configuration « conf/server.xml »
• Démarrage / Arrêt
o startup.bat (avec java dans le PATH)
o shutdown.bat ou CTRL-C
• Surveillance
o Fichier « logs/catalina.<date>.log »
INFO: Doép loJiCemoennsto dlue répertoire C:ProjetsToolsapache-‐‑tomcat-‐‑7.0.30webappsmanager de
l'ʹapplication web
18 sept. 2012 10:10:50 org.apache.catalina.startup.HostConfig deployDirectory
INFO: Déploiement du répertoire C:ProjetsToolsapache-‐‑tomcat-‐‑7.0.30webappsROOT de l'ʹapplication
web
18 sept. 2012 10:10:50 org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["ʺhUp-‐‑bio-‐‑8880"ʺ]
18 sept. 2012 10:10:50 org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["ʺajp-‐‑bio-‐‑8809"ʺ]
3
18 sept. 2012 10:10:50 org.apache.catalina.startup.Catalina start
INFO: Server startup in 14591 ms
4. Déployer une application
• http://localhost:8080/manager/html
• User
« tomcat »,
1
mot de passe
« tomcat »
• ou répertoire
webapps
• ce peut être
plus complexe
2
$tomcat/conf/tomcat-users.xml
<role rolename="ʺmanager-‐‑gui"ʺ/>
<role rolename="ʺadmin-‐‑gui"ʺ/>
<user username="ʺtomcat"ʺ password="ʺtomcat"ʺ roles="ʺtomcat,manager-‐‑gui,admin-‐‑gui"ʺ/>
4
5. la jconsole
• Executable « jconsole[.exe] » fournie avec le JDK,
utilisable avec d’autres applications
• Voir les erreurs
dans la console
linux ou MSDOS
5
7. TP 1 : utilisation de
Tomcat 7
• Téléchargement de Tomcat 7 32 bits windows
• Installation (utiliser jdk.bat, après avoir adapté JAVA_HOME)
• Démarrage
• Utilisation du manager
• Déploiement d’une application web
o sur le site du cours dans ressources/exo/hawtio...
• Utilisation de la jconsole
• Arrêt
• Déployer plusieurs applications web
o en cas d'erreur mémoire OutOfMemoryError mettre
set JAVA_OPTS=-Xms256m -Xmx512m
au début de catalina.bat
http://mirrors.jenkins-ci.org/war/latest/jenkins.war 7
9. Installer JBoss
• Décompresser l’archive dans le sous-répertoire de
votre choix où
o vous avez les droits en lecture/écriture
o Il n’y a pas d’espace ou d’accents dans le chemin complet
• Documentation
o https://docs.jboss.org/author/display/AS7/Admin+Guide
9
10. Démarrer Jboss en
standalone
• JBOSS_HOMEbinstandalone.bat
• http://localhost:9990/console
10
11. Ajouter l’utilisateur
• Realm vide (par défaut ManagementRealm)
• Avec la commande "add-user"
o Rajouter le user admin/jboss
11
16. Autres façons d’installer
une application JEE
• Déposer le fichier war ou ear dans $JBossstandalone
deployments
o Répertoire scruté périodiquement par le serveur d’application
o Faire un déplacement plutôt qu’une copie
• Depuis Eclipse
• Outil en ligne de commande « jboss-cli »
o Mode interactif par défaut
o Mode non interactif : ./jboss-cli.sh --file=install-pizzashop.cli
• Le script d’installation est préférable pour livrer un logiciel
o Pas d’erreur de manipulation humaine
o Procédure maitrisée
•
16
18. Arrêter JBoss
Plusieurs choix :
1. fermer la console MSDOS de standalone.bat
ou le shell linux de standalone.bat/.sh
2. Utiliser la commande jboss-cli
1. jboss-cli.bat --connect command=:shutdown
ou
./jboss-cli.sh --connect command=:shutdown
3. Tuer la tâche associée à jboss sous linux :
1. ps –ef | grep jboss
2. kill xxx
18
19. TP 2 : utilisation de
JBoss AS 7.1
• Installation
• Démarrage
• Ajouter l'utilisateur admin/jboss
• Utilisation de la console d’administration
• Déploiement d’une application JEE
o les applications sont déployées par défaut sur le port 8080
• Utilisation de la jconsole
o faire une connection en "remote process"
service:jmx:remoting-jmx://localhost:9999
avec le user créé ci-dessus
• Arrêt
19
20. TP 3 : Servlet
• Outils : javac, notepad++, jar
• Consignes :
o ne pas utiliser d’IDE comme Eclipse
o ne pos déclarer de package
o Il faudra rajouter %TOMCAT_HOME%libservlet-api.jar dans le CLASSPATH
• HelloWorld (voir support de cours pour le code, make_hello.bat fourni)
o A déployer dans %TOMCAT_HOME%webappshello
• PizzaServlet v1
o A déployer dans
%TOMCAT_HOME%webappspizza
o Page formulaire : doGet
• Code exemple fourni
o Page confirmation : doPost
• Afficher la commande saisie
20
21. PizzaServlet v2
• Outils : javac, notepad++, jar
• Consignes :
o ne pas utiliser d’IDE comme Eclipse
o ne pos déclarer de package
o Il faudra rajouter %TOMCAT_HOME%libservlet-api.jar dans le CLASSPATH
• Modifier l'exemple PizzaServlet fourni pour scinder le
fonctionnement en plusieurs pages :
o la première page demande le type de pizza et le nombre commandé
o la seconde page demande l'adresse de livraison (nom, prenom,
detailAdresse, codePostal, ville) et le mode de paiement (carte, à la
livraison)
o la 3eme page affiche la commande saisie
• utilisez les sessions pour conserver les informations entre les pages
o n'utiliser qu'une seule servlet pour toute les pages
21
22. TP 4 : JSP
• Outils : notepad++
• Consignes : ne pas utiliser d’IDE comme Eclipse
1. convertir PizzaServlet v2 en 3 pages JSP
o Dans un sous-répertoire « mypizza » (autre nom que celui pour
PizzaServlet)
2. utiliser les taglibs JSTL
o Déployer les JSP dans une autre application web avec les taglibs
o Utiliser <jsp:forward> si le nombre de pizza est <0 dans la 2nde page
o Saisir une date de livraison à la 2nde page (format "dd/MM/YYYY")
o Utiliser <fmt:formatDate> pour afficher la date de livraison à la 3eme
page (format "dd/MM/YYYY")
22
23. Installer Eclips e
• Installer Eclipse Juno JEE
• Rajouter l’extension JBoss Tools
• Déclarer les « Server Runtime » suivants :
o Apache 7, server name "Tomcat v7.0 Server at localhost"
o JBoss AS 7.1, server name "JBoss 7.1 Runtime 1 Server
• Librairie JAR pour les exercices
o Recopier le répertoire jar_libs des ressources du cours JEE vers C:jar_libs
o Déclarer la variable de CLASSPATH "JAR_LIBS"
• Menu Préferences, Java, Build Path, ClassPatch Variables
• Faire pointer la variable "JAR_LIBS" vers C:jar_libs
23
24. Bonnes pratiques Eclips e
• C:Eclipsebinaries : pour les versions d’éclipse
o Installer eclipse sous C:Eclipsebinarieseclispe_juno_jee
• C:Eclipseworkspaces : pour les workspaces
• Déclarer le runtime server et sa JVM
• Mettre la console en taille illimitée
• Désactiver le build automatique 24
25. Rajouter un jar dans le
classpath d'ʹun projet Eclips e
Clique droit sur un Projet,
menu Properties
Utiliser "Add Variable",
puis extend
pour chercher un jar
depuis $JAR_LIBS
25
26. TP 5 : JDBC + JUn it
• Outils : Eclipse, MySQL, phpMyAdmin
• Consignes :
o Utiliser la base de données fournies (URL : jdbc:mysql://localhost:3306/pizzadb)
o Créer vos classes dans le package « fr.jpcarmona.tppizza.persistence »
o Tracer les erreurs avec log4j
o Implémenter les interfaces DAO pour les classes métier
• PizzaDAOImpl
• OrderDAOImpl
o Faire des Junit de test
de chaque méthode
• Afficher le toString()
résultat
EndUser
+email
+password
+nickname
+firstname
+lastname
PizzaOrder
+deliveryDateHour
+orderDateHour
+comment
+paymentMean: Enum
+paymentRef
+pizzas 1..*
Pizza
+pizzaType: Enum
+pizzaName
+address 1
Address
+addressDetail
+postalCode
+city
PizzaTypes :
White
Tomato
Special
+customer
1 0..*
PaymentMean:
cc
cash
paypal
26
nb: chaque classe
hérite de BizBase
28. Création de la base dans
PhpMyAdmin
• Création d'un user pizzadb/pizzadb avec sa base
• Puis import du code de pizzadb_export.sql dans l'onglet SQL
28
29. TP 6 : Webapp "ʺPizzaWar"ʺ
• Importer le projet PizzaWar_Debut
o Contient le code JDBC de création de commandes et de pizzas
• le code n'accepte que la création de commande d'une pizza à la fois
o Déclare la DataSource jdbc/PizzaDB dans Tomcat
o Déclare la Servlet ...ui.PizzaShopControlerServlet
o Les DAO sont créés par la Servlet avec le DataSource Tomcat
• Créer la méthode de servlet de création de pizza
o URL : pizzashop/createPizza
• Créer la page de la liste des pizzas à vendre
o page admin/listePizzas.jsp appelée après la création d'une pizza
• Afficher la liste des pizzas en vente dans la combox
(choice) de pizza1.jsp
• depuis index.jsp appeler pizzaShop/displayOrderPage
• mettre en session la liste des pizzas et retourner la page pizza1.jsp
29
31. Arborescenc e
index
front-‐‑office
back-‐‑office
création
commande
gestion
pizzas
gestion
commande
31
32. TP 7 : Bootstrap & JQuery
• A partir du code de l'archive PizzaWar_debut fournie ou votre travail
• Utiliser Bootstrap dans chaque page
o Utiliser la commande <jsp:include page="header.jsp">
<jsp:param name="titre" value="page2"/></jsp:include>
pour inclure une entête et un pied de page commun à chaque JSP
• Utiliser request.getParameter("titre") dans header.jsp
o depuis la 1ere page de commande de pizza, appeler pizzas.option.html pour
avoir une liste de pizzas dynamique
• Modifier le contrôleur pour ajouter un appel à l'API REST pizzas/id
o La 3eme page doit afficher le nom de la pizza pas l'id
• appel Javascript à http://localhost:8080/PizzaWar/pizzashop/pizzas/<id>.json
32
33. Architecture v2 -‐‑ 4 tier s
33
tppizza.biz.Pizza
tppizza.biz.PizzaOrder
tppizza.biz.Pizza
tppizza.biz.PizzaOrder
tppizza.biz.Pizza
tppizza.biz.PizzaOrder
tppizza.ui
PizzaShopControlerServet
EndUserManager PizzaManager
tppizza.service
tppizza.persistence
EndUserManagerBean
PizzaManagerBean
EndUserDAO PizzaDAO PizzaOrderDAO
DaoBase
JSP
Vue
Controler
Model
<<Interface>>
javax.sql.DataSource
JEE Server manage a database
connection pool
JNDI Connection
JNDI Connection
WAR
ejb-jar.jar
JAR
34. TP8 : EJB
• Outils : Eclipse, JBoss avec Jboss Tools
• Etapes :
o Installer Jboss (TP 2)
o Ajouter JBossTools pour pouvoir créer un Server Runtime Jboss 7
• Depuis la servers window, add a server, server wizard,
download additional server adapters, add JBoss AS Tools
o Déclarer la DataSource PizzaDS dans JBoss (voir pages suivantes)
o Importer les projets PizzaEAR, PizzaEJB et PizzaBiz de PizzaEAR_debut.zip
o Ne garder que le WebContent et le code java du package ".ui"
dans un projet PizzaWar (T2)
• Le projet PizzaWar (T2) n'a plus le package "persistence" ni "biz"
• Supprimer META-INF/context.xml et le ressource-ref dans WEB-INF/web.xml
• Remplacer les accès à la DataSource dans PizzaShopServlet
par une connection aux EJB (au lieu des DAO et DataSource)
o @EJB(mappedName="java:global/PizzaEAR/PizzaEJB/PizzaManagerBean")
o private PizzaManager pizzaManager;
o Appeler les EJB depuis la Servlet en utilisant l'annotation @EJB
o Completer les méthodes en todo de PizzaManagerBean
o Tester l'application PizzaEAR jusqu'à la création d'une commande de Pizza
34
35. Déclarer une DataSource
dans JBoss
o Dézipper mysql_jboss_module.zip
sous $Jboss/modules
o Déclarer la DataSource dans $Jboss/standalone/configuration/standalone.xml
<subsystem xmlns="ʺurn:jboss:domain:datasources:1.0"ʺ>
<datasources>
...
<datasource jndi-‐‑name="ʺjava:/PizzaDS"ʺ pool-‐‑name="ʺPizzaDS"ʺ enabled="ʺtrue"ʺ use-‐‑java-‐‑
context="ʺtrue"ʺ>
<connection-‐‑url>jdbc:mysql://localhost:3306/pizzadb</connection-‐‑url>
<driver>mysqlDriver</driver>
<security>
<user-‐‑name>root</user-‐‑name>
<password></password>
</security>
</datasource>
...
<drivers>
....
<driver name="ʺmysqlDriver"ʺ module="ʺcom.mysql"ʺ>
<xa-‐‑datasource-‐‑class>com.mysql.jdbc.Driver</xa-‐‑datasource-‐‑class>
</driver>
...
35
36. Logs de bon démarrag e
...
16:31:15,178 INFO [org.jboss.as.ejb3.deployment.processors.EjbJndiBindingsDeploymentUnitProcessor] (MSC
service thread 1-7) JNDI bindings for session bean named PizzaManagerBean in deployment unit
subdeployment "PizzaEJB.jar" of deployment "PizzaEAR.ear" are as follows:
java:global/PizzaEAR/PizzaEJB/PizzaManagerBean!fr.jpcarmona.tppizza.service.PizzaManager
java:app/PizzaEJB/PizzaManagerBean!fr.jpcarmona.tppizza.service.PizzaManager
java:module/PizzaManagerBean!fr.jpcarmona.tppizza.service.PizzaManager
java:jboss/exported/PizzaEAR/PizzaEJB/PizzaManagerBean!fr.jpcarmona.tppizza.service.PizzaManager
java:global/PizzaEAR/PizzaEJB/PizzaManagerBean
java:app/PizzaEJB/PizzaManagerBean
java:module/PizzaManagerBean
chemins JNDI possibles
...
16:31:15,964 INFO [org.jboss.web] (MSC service thread 1-4) JBAS018210: Registering web context: /PizzaWar
16:31:16,045 INFO [org.jboss.as.server] (DeploymentScanner-threads - 2) JBAS018559: Deployed
"PizzaEAR.ear"
36
Chemin pour l'ʹURL :
hUp://localhost:8080/PizzaWar
37. Forcer un redéploiemen t
En cas de message
• Alors : Rajouter un fichier nommé
PizzaEAR.ear.dodeploy
• dans $Jboss/standalone/deployments
37
6:39:08,388 INFO [org.jboss.as.server.deployment.scanner]
(DeploymentScanner-‐‑threads -‐‑ 1) JBAS015003: Found PizzaEAR.ear in
deployment directory. To trigger deployment create a file called
PizzaEAR.ear.dodeploy
38. Créer des projets
EJB et EAR pour Eclips e
Menu "New EAR Project", puis sélection des modules
menu "New EJB Project" :
38
40. Configuration d’un
Client JNDI Jboss 7
jndi.properties
java.naming.factory.url.pkgs=org.jboss.ejb.client.naming
jboss-‐‑ejb-‐‑client.properties
remote.connections=default
remote.connection.default.host=127.0.0.1
remote.connection.default.port=4447
remote.connection.default.username=pizzafo
remote.connection.default.password=*****
endpointremote.connectionprovider.create.options.org.xnio.Options.SS
L_ENABLED=false
remote.connection.default.connect.options.org.xnio.Options.SASL_PO
LICY_NOANONYMOUS=false
Code java du client de l'ʹEJB
Context ctx = new InitialContext();
ctx.lookup("ʺejb:<EAR>/<EJBModule>//<EJBClassName>!<EJBInterfaceName>"ʺ);
40
41. Ajouter un utilisateur
applicatif JBos s
• Depuis la ligne de commande JBoss
o cd $JBOSS/bin
o ./add-user.sh (puis selectionnez un application user)
o Enter the details of the new user to add.
o Realm (PizzaApp) : PizzaApp
o Username (pizzafo) : pizzafo
o Password : *****
o Re-enter Password : *****
o What roles do you want this user to belong to? (Please enter a comma
separated list, or leave blank for none) : frontoffice
41
44. Consulter l'ʹarbre
JNDI JBos s
• Depuis la ligne de commande JBoss
o cd $JBOSS/bin
o ./jboss-cli.sh
o You are disconnected at the moment. Type 'connect' to connect to the
server or 'help' for the list of supported commands.
o [disconnected /] connect
o [standalone@localhost:9999 /]
• Depuis la log Jboss
o ... INFO ... JNDI bindings for session bean named ....:
• ...
• java:global/PizzaEAR/PizzaEJB/PizzaManagerBean
• java:app/PizzaEJB/PizzaManagerBean
• java:module/PizzaManagerBean
44
45. TP9 JPA & transaction s
• Outils : Eclipse, Hibernate, MySQL
o Rajouter le facet JPA au projet PizzaBiz et PizzaEJB
o Voir quickref_JPA.pdf et http://docs.oracle.com/javaee/6/api/
• Consignes : écrire en JPA la persistance de PizzaDAO
puis de PizzaOrderDAO
1. Mettre les annotations JPA dans toutes les classes métier sauf adresse
• Pour simplifier, supprimez la classe BizBase et rajouter l'attribut id partout
• Déclarer la classe EndUser en @Entity avec l'adresse en @Transient
et y définir l'attribut pizzaOrders comme dans le cours
2. Copier/coller et renommer les classes DAOImpl existantes en DAOJpaImpl
• Ignorer le paramètre whereClause pour retourner tous les éléments en base
3. Remplacez le DataSource par un entity manager dans l'EJB
• META-INF/persistence.xml doit être dans le projet PizzaEJB
4. Remplacez les appels JDBC par des appels JPA dans les nouveaux DAO
45
46. TP9'ʹ finalisation
PizzaEAR
• finir et faire fonctionner le TP jusqu'à la création
d'une commande de pizza
• mettre le frontoffice.war dans tomcat
o création d'un utilisateur dans Jboss
o utilisation de l'API
o voir le corrigé PizzaEAR avec le junit de l'EJB sous PizzaEJBtest
• Optionnel : faire un backoffice.war dans l'EAR avec
o La page de liste des commandes
o la page de prise en compte d'une commande
o la fonction de modification de la liste des pizzas en ¬vente
46
47. Connexion entre module s
PizzaEjb
PizzaWar
persistence.xml
MySQL
@EJB(name="ʺPizzaManager"ʺ)
@Resource(name="ʺjava:/PizzaDS"ʺ)
PersistenceContext(unitName="ʺPizzaPU"ʺ)
<datasource jndi-‐‑name="ʺjava:/PizzaDS"ʺ ...
jdbc:mysql://localhost:3306/pizzadb
JBoss
DataSource
<jta-‐‑data-‐‑source>java:/PizzaDS</jta-‐‑data-‐‑source>
standalone.xml
PizzaManagerBean.java
PizzaShopControlerServlet.java
47