Upload
eric-bourdet
View
416
Download
2
Embed Size (px)
DESCRIPTION
TP java JEE BOSS AS 7
Citation preview
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
Tomcat 7 Présentation avant travaux
2
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 » o JConsole INFO: Déploiement du répertoire C:\Projets\Tools\apache-‐‑tomcat-‐‑7.0.30\webapps\manager de
l'ʹapplication web 18 sept. 2012 10:10:50 org.apache.catalina.startup.HostConfig deployDirectory INFO: Déploiement du répertoire C:\Projets\Tools\apache-‐‑tomcat-‐‑7.0.30\webapps\ROOT 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"ʺ] 18 sept. 2012 10:10:50 org.apache.catalina.startup.Catalina start INFO: Server startup in 14591 ms
3
Déployer une application • http://localhost:8080/manager/html • User
« tomcat », mot de passe
« tomcat » • ou répertoire
webapps • ce peut être
plus complexe
1
23
<role rolename="ʺmanager-‐‑gui"ʺ/> <role rolename="ʺadmin-‐‑gui"ʺ/> <user username="ʺtomcat"ʺ password="ʺtomcat"ʺ roles="ʺtomcat,manager-‐‑gui,admin-‐‑gui"ʺ/>
$tomcat/conf/tomcat-users.xml
4
la jconsole • Executable « jconsole[.exe] » fournie avec le JDK,
utilisable avec d’autres applications • Voir les erreurs
dans la console linux ou MSDOS
5
Vue de Tomcat en fonctionnement
6
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
Jboss AS 7.1 Présentation avant travaux
8
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
Démarrer Jboss en standalone
• JBOSS_HOME\bin\standalone.bat • http://localhost:9990/console
10
Ajouter l’utilisateur • Realm vide (par défaut ManagementRealm) • Avec la commande "add-user"
o Rajouter le user admin/jboss
11
Déployer une application 1/3
12
Déployer une application 2/3
13
Déployer une application 3/3
14
La console d’administration
• $JBOSS/standalone/configuration/standalone.xml
15
Autres façons d’installer une application JEE
• Déposer le fichier war ou ear dans $JBoss\standalone\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
Jconsole Jboss
17
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
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
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%\lib\servlet-api.jar dans le CLASSPATH
• HelloWorld (voir support de cours pour le code, make_hello.bat fourni)
o A déployer dans %TOMCAT_HOME%\webapps\hello
• PizzaServlet v1 o A déployer dans
%TOMCAT_HOME%\webapps\pizza o Page formulaire : doGet
• Code exemple fourni o Page confirmation : doPost
• Afficher la commande saisie
20
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%\lib\servlet-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
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
Installer Eclipse • 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
Bonnes pratiques Eclipse • C:\Eclipse\binaries : pour les versions d’éclipse
o Installer eclipse sous C:\Eclipse\binaries\eclispe_juno_jee
• C:\Eclipse\workspaces : pour les workspaces
• Déclarer le runtime server et sa JVM • Mettre la console en taille illimitée • Désactiver le build automatique 24
Rajouter un jar dans le classpath d'ʹun projet Eclipse
Clique droit sur un Projet, menu Properties Utiliser "Add Variable", puis extend pour chercher un jar depuis $JAR_LIBS
25
TP 5 : JDBC + JUnit • 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
Pizza
+pizzaType: Enum+pizzaName
+pizzas 1..*
Address
+addressDetail+postalCode+city
+address 1
PizzaTypes :WhiteTomatoSpecial
+customer
0..*1
PaymentMean:cccashpaypal
26
nb: chaque classe hérite de BizBase
MLD
27
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
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
Architecture v1 – 3 tiers
30
Arborescence index
front-‐‑office
création commande
back-‐‑office
gestion pizzas
gestion commande
31
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
Architecture v2 -‐‑ 4 tiers
33
tppizza.biz.Pizza tppizza.biz.PizzaOrder
tppizza.biz.Pizza tppizza.biz.PizzaOrder
tppizza.biz.Pizza tppizza.biz.PizzaOrder tppizza.ui
tppizza.service
tppizza.persistence
EndUserManager PizzaManager
EndUserManagerBeanPizzaManagerBean
EndUserDAO PizzaDAO PizzaOrderDAO
DaoBase
PizzaShopControlerServet
JSPVue
Model
Controler
javax.sql.DataSource<<Interface>>
JEE Server manage a database connection pool
JNDI Connection
JNDI Connection
WAR
ejb-jar.jar
JAR
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
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
chemins JNDI possibles
Logs de bon démarrage ... 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
... 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
Forcer un redéploiement 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
Créer des projets EJB et EAR pour Eclipse
Menu "New EAR Project", puis sélection des modules
menu "New EJB Project" :
38
Gérer les librairies de l'ʹEAR dans Eclipse
39
Configuration d’un Client JNDI Jboss 7
java.naming.factory.url.pkgs=org.jboss.ejb.client.naming jndi.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.SSL_ENABLED=false remote.connection.default.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS=false
jboss-‐‑ejb-‐‑client.properties
Context ctx = new InitialContext(); ctx.lookup("ʺejb:<EAR>/<EJBModule>//<EJBClassName>!<EJBInterfaceName>"ʺ);
Code java du client de l'ʹEJB
40
Ajouter un utilisateur applicatif JBoss
• 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
Admin Console JBoss
42
Vue de l'ʹEAR dans JBoss
43
Consulter l'ʹarbre JNDI JBoss
• 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
TP9 JPA & transactions • 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
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 PizzaEJB\test\
• 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
Connexion entre modules PizzaEjb
PizzaWar
MySQL
@EJB(name="ʺPizzaManager"ʺ)
@Resource(name="ʺjava:/PizzaDS"ʺ)
<datasource jndi-‐‑name="ʺjava:/PizzaDS"ʺ ... jdbc:mysql://localhost:3306/pizzadb
JBoss
DataSource
@PersistenceContext(unitName="ʺPizzaPU"ʺ)
<jta-‐‑data-‐‑source>java:/PizzaDS</jta-‐‑data-‐‑source>
persistence.xml
standalone.xml
PizzaManagerBean.java
PizzaShopControlerServlet.java
47