47
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

Tp java ee.pptx

Embed Size (px)

DESCRIPTION

TP java JEE BOSS AS 7

Citation preview

Page 1: Tp java ee.pptx

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

Page 2: Tp java ee.pptx

Tomcat  7 Présentation avant travaux

2

Page 3: Tp java ee.pptx

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

Page 4: Tp java ee.pptx

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

Page 5: Tp java ee.pptx

la  jconsole •  Executable « jconsole[.exe] » fournie avec le JDK,

utilisable avec d’autres applications •  Voir les erreurs

dans la console linux ou MSDOS

5

Page 6: Tp java ee.pptx

Vue  de  Tomcat  en  fonctionnement

6

Page 7: Tp java ee.pptx

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

Page 8: Tp java ee.pptx

Jboss  AS  7.1 Présentation avant travaux

8

Page 9: Tp java ee.pptx

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

Page 10: Tp java ee.pptx

Démarrer  Jboss  en  standalone

•  JBOSS_HOME\bin\standalone.bat •  http://localhost:9990/console

10

Page 11: Tp java ee.pptx

Ajouter  l’utilisateur •  Realm vide (par défaut ManagementRealm) •  Avec la commande "add-user"

o  Rajouter le user admin/jboss

11

Page 12: Tp java ee.pptx

Déployer  une  application    1/3

12

Page 13: Tp java ee.pptx

Déployer  une  application    2/3

13

Page 14: Tp java ee.pptx

Déployer  une  application  3/3

14

Page 15: Tp java ee.pptx

La  console  d’administration

•  $JBOSS/standalone/configuration/standalone.xml

15

Page 16: Tp java ee.pptx

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

Page 17: Tp java ee.pptx

Jconsole  Jboss

17

Page 18: Tp java ee.pptx

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

Page 19: Tp java ee.pptx

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

Page 20: Tp java ee.pptx

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

Page 21: Tp java ee.pptx

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

Page 22: Tp java ee.pptx

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

Page 23: Tp java ee.pptx

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

Page 24: Tp java ee.pptx

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

Page 25: Tp java ee.pptx

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

Page 26: Tp java ee.pptx

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

Page 27: Tp java ee.pptx

MLD

27

Page 28: Tp java ee.pptx

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

Page 29: Tp java ee.pptx

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

Page 30: Tp java ee.pptx

Architecture  v1  –  3  tiers

30

Page 31: Tp java ee.pptx

Arborescence index

front-­‐‑office

création  commande  

back-­‐‑office

gestion  pizzas

gestion  commande

31

Page 32: Tp java ee.pptx

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

Page 33: Tp java ee.pptx

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

Page 34: Tp java ee.pptx

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

Page 35: Tp java ee.pptx

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

Page 36: Tp java ee.pptx

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

Page 37: Tp java ee.pptx

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

Page 38: Tp java ee.pptx

Créer  des  projets    EJB  et  EAR  pour  Eclipse

Menu "New EAR Project", puis sélection des modules

menu "New EJB Project" :

38

Page 39: Tp java ee.pptx

Gérer  les  librairies  de  l'ʹEAR  dans  Eclipse

39

Page 40: Tp java ee.pptx

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

Page 41: Tp java ee.pptx

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

Page 42: Tp java ee.pptx

Admin  Console  JBoss

42

Page 43: Tp java ee.pptx

Vue  de  l'ʹEAR  dans  JBoss

43

Page 44: Tp java ee.pptx

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

Page 45: Tp java ee.pptx

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

Page 46: Tp java ee.pptx

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

Page 47: Tp java ee.pptx

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