• Aucun résultat trouvé

1Basededonn´ees Servlets,beans,basededonn´ees T.P.2

N/A
N/A
Protected

Academic year: 2022

Partager "1Basededonn´ees Servlets,beans,basededonn´ees T.P.2"

Copied!
5
0
0

Texte intégral

(1)

Institut Galil´ee E-services

Ann´ee 2014-2015 Master 2

T.P. 2

Servlets, beans, base de donn´ ees

L’objectif de ce TP est de mettre en place un site web pour l’administration et la commande de pizzas :

– une pizza est d´etermin´ee par son type et son prix `a l’unit´e – un stock est donn´e pour chaque type de pizza

– une commande se d´efinit par un type de pizza, une quantit´e, le total de la commande, l’email de confirmation

Plus techniquement, l’objectif est de vous faire pratiquer les beans entity et session, le lien avec une base de donn´ees, le lien avec des servlets. Dans ce TP, les tables sont cr´e´ees manuellement.

1 Base de donn´ ees

NetBeans contient par d´efaut la base de donn´ees derby. Les tables qu’on y d´eclare se trouvent sous le r´epertoire$HOME/.netbeans-derby.

– L’ongletServicesdonne sousDatabasesles bases de donn´ees utilisables (Java DB pour derby), les drivers disponibles, les connecteurs possibles (un connecteur par base de donn´ee cr´e´ee). Un tel connecteur permet d’acc´eder directement `a la base de donn´ee, de voir les tables et leur con- tenu, d’effectuer des requˆetes SQL soit par l’interface, soit par ex´ecution de la requˆete explicite directement.

– L’onglet Services donne sous Servers les serveurs d’application sur lesquels sont d´eploy´ees les applications d´evelopp´ees sous Netbeans. En l’oc- curence Glassfishest fourni en standard. BEA WebLogic et Websphere sont d’autres serveurs d’application. Ces serveurs int`egrent aussi un serveur JNDI qui permettra de faire le lien entre les objets publi´es (base de donn´ees, servlets, ...).

Pour cr´eer une base de donn´ee pour le projet : sous l’ongletServices, clic droit surJava DB - Create Database

– nom : PizzaDB – user name : pizza – password : pizzaUP13

– (port modifiable, 1527 par d´efaut)

Sous l’ongletServices, clic sur le connecteur jdbc de Pizza :connect. Deux possibilit´es alors pour cr´eer des tables : soit via Create Table, soit par une requˆete SQL dans Execute Command. La 1`ere m´ethode n’est valable que pour les cas simples (vu l’interface !). Dans les 2 cas, ces options sont disponibles par clic droit sous l’entr´ee Tablesdu connecteur.

– On commence par cr´eer le sch´ema PIZZA : Clic droit sur Tables - Execute Command,

1 CREATE SCHEMA PIZZA ;

puisExecute

– table Pizza, cr´eation des colonnes : Clic droit surTables - Create Table

(2)

– primary Key, pizza id, VARCHAR, 10 – prix, NUMERIC

– table Stock : Clic droit surTables - Execute Command

1 CREATE TABLE PIZZA . ”STOCK” (

2 ”STOCK ID” INTEGER g e n e r a t e d a l w a y s a s i d e n t i t y p r i m a r y key ,

3 ”PIZZA ID” VARCHAR( 1 0 ) ,

4 ”QUANTITE” n u m e r i c

5 ) ;

6 a l t e r t a b l e PIZZA . s t o c k add f o r e i g n key ( p i z z a i d ) r e f e r e n c e s PIZZA . p i z z a ; puisExecute

– table Commande : Clic droit surTables - Execute Command

1 CREATE TABLE PIZZA . ”COMMANDE” (

2 ”COMMANDE ID” INTEGER g e n e r a t e d a l w a y s a s i d e n t i t y p r i m a r y key ,

3 ”PIZZA ID” VARCHAR( 1 0 ) ,

4 ”QUANTITE” numeric ,

5 ”TOTAL” numeric ,

6 ”EMAIL” v a r c h a r ( 2 0 )

7 ) ;

8 a l t e r t a b l e PIZZA . commande add f o r e i g n key ( p i z z a i d ) r e f e r e n c e s PIZZA . p i z z a ; puisExecute

La commande refresh permet de rafraˆıchir les donn´ees d’un sch´ema.

Ajouter par SQL des types de pizza et les stocks associ´es. V´erifier que la base contient les donn´ees.

2 Application et beans

Cr´eer un nouveau projetEnterprise Application – nom : TP Pizza

– server : GlassFish

2.1 Partie EJB

1. Il faut d’abord ajouter une “unit´e de persistence”, c’est `a dire mettre en place un serveur JNDI qui va faire la liaison entre la base de donn´ees et les beans : dansTP_Pizza-ejb, New / Persistence Unit

– Data Source / New Data Source – s´electionner jdbc :... PIZZA – mettre PIZZA comme nom JNDI – Table Generation Strategy : None

2. cr´eer lesEntity Beansli´ees aux tables de la BD : – New / Entity Classes from Database – Data Source : PIZZA

– s´electionner les tables

– mettreEntityPizzacomme package – Finish

les 3 classes sont cr´e´ees dansTP_Pizza-ejb / Source Packages / Pizza

(3)

3. cr´eer lesSession Beansli´ees auxEntity Beans : – New / Session Beans for Entity Classes – s´electionner les 3Entity

– cr´eer avec les interfaces Remote et Local – mettreEntityPizzacomme package – Finish

4. ModifierStockFacade en ajoutant :

1 public void c r e a t e ( S t r i n g p i z z a I d , i n t q u a n t i t e ) {

2 S t r i n g s = ” i n s e r t i n t o s t o c k ( p i z z a i d , q u a n t i t e ) ” ;

3 s = s + ” v a l u e s ( ’ ” + p i z z a I d + ” ’ , ” + q u a n t i t e + ” ) ” ;

4 em . c r e a t e N a t i v e Q u e r y ( s ) . e x e c u t e U p d a t e ( ) ;

5 }

etStockFacadeLocalen ajoutant :

1 void c r e a t e ( S t r i n g p i z z a I d , i n t q u a n t i t e ) ; 5. ModifierCommandeFacadeen ajoutant :

1 public void c r e a t e ( S t r i n g p i z z a I d , i n t q u a n t i t e , i n t t o t a l , S t r i n g e m a i l ) {

2 S t r i n g s = ” i n s e r t i n t o commande ( p i z z a i d , q u a n t i t e , t o t a l , e m a i l ) ” ;

3 s = s + ” v a l u e s ( ’ ” + p i z z a I d + ” ’ , ” + q u a n t i t e + ” , ” ;

4 s = s + t o t a l + ” , ’ ” + e m a i l + ” ’ ) ” ;

5 em . c r e a t e N a t i v e Q u e r y ( s ) . e x e c u t e U p d a t e ( ) ;

6 }

etCommandeFacadeLocalen ajoutant :

1 void c r e a t e ( S t r i n g p i z z a I d , i n t q u a n t i t e , i n t t o t a l , S t r i n g e m a i l ) ;

2.2 Partie servlets

DansTP_Pizza-war, cr´eer les servlets d’administration et de gestion de com- mandes parNew / Servletpour

– Admin_Pizzadans le packageAdministration(faire Nextpour d´efinir le nom public)

– ajouter le code ”noyau” (cf annexe A) `a la place de ce qui est en com- mentaire entretryetfinally

– s´electionnerclic droit / Insert Code ... / Call Enterprise Bean (ou pour une version ant´erieure de Netbeans

pizzaFacade / clic droit / Enterprise Resources / Call Enterprise Bean) – s´electionnerpizzaFacadedeTP_Pizza-ejb

– ajouter enfin les import n´ecessaires

– Commande_Pizzadans le package GestionClient

– ajouter le code ”noyau” (cf annexe B) `a la place de ce qui est en com- mentaire entretryetfinally

– s´electionnerclic droit / Insert Code ... / Call Enterprise Bean (ou pour une version ant´erieure de Netbeans

stockFacade / clic droit / Enterprise Resources / Call Enterprise Bean) – s´electionnerstockFacadedeTP_Pizza-ejb

– ajouter enfin les import n´ecessaires

(4)

2.3 Utilisation

Faire Build sur les 2 sous-projets TP_Pizza-ejb et TP_Pizza-war. Dans TP_Pizza:undeploy / deploy

Requˆetes http (le num´ero de port est mentionn´e dans la fenˆetreGlassFish) : – pour l’administration

http://localhost:8093/TP_Pizza-war/Admin_Pizza – pour la commande

http://localhost:8093/TP_Pizza-war/Commande_Pizza

3 D´ eveloppements

Modifier et compl´eter le code pour les fonctionnalit´es suivantes : – Mettre `a jour le stock apr`es chaque commande

– Refuser les commandes pour un stock insuffisant, refuser les commandes pour un type inexistant

– Lister les commandes effectu´ees

– Envoyer un mail une fois la commande effectu´ee

A Code noyau pour Admin Pizza

1 o u t . p r i n t l n ( ”<html>” ) ;

2 o u t . p r i n t l n ( ”<head>” ) ;

3 o u t . p r i n t l n ( ”<t i t l e>A d m i n i s t r a t i o n P i z z a</ t i t l e>” ) ;

4 o u t . p r i n t l n ( ”</head>” ) ;

5 o u t . p r i n t l n ( ”<body>” ) ;

6 o u t . p r i n t l n ( ”<h1>A j o u t e r un nouveau t y p e de p i z z a : </h1>” ) ;

7 L i s t l P i z z a = p i z z a F a c a d e . f i n d A l l ( ) ;

8 f o r ( I t e r a t o r i t = l P i z z a . i t e r a t o r ( ) ; i t . hasNext ( ) ; ) {

9 P i z z a elem = ( P i z z a ) i t . n e x t ( ) ;

10 o u t . p r i n t l n ( ”Type : <b>” + elem . g e t P i z z a I d ( ) + ” </b> ” ) ;

11 o u t . p r i n t l n ( ” P r i x : ” + elem . g e t P r i x ( ) + ”<br/>” ) ;

12 }

13 S t r i n g t y p e=n u l l;

14 t y p e=r e q u e s t . g e t P a r a m e t e r ( ” t y p e ” ) ;

15 i f ( t y p e !=n u l l) {

16 try {

17 i n t p r i x =0;

18 p r i x=new I n t e g e r ( r e q u e s t . g e t P a r a m e t e r ( ” p r i x ” ) ) ;

19 i n t q u a n t i t e=new I n t e g e r ( r e q u e s t . g e t P a r a m e t e r ( ” q u a n t i t e ” ) ) ;

20 o u t . p r i n t l n ( ”On a j o u t e un t y p e de p i z z a<br/>” ) ;

21

22 P i z z a e = new P i z z a ( ) ;

23 e . s e t P i z z a I d ( t y p e ) ;

24 e . s e t P r i x ( p r i x ) ;

25 p i z z a F a c a d e . c r e a t e ( e ) ;

26 s t o c k F a c a d e . c r e a t e ( type , q u a n t i t e ) ;

27 r e s p o n s e . s e n d R e d i r e c t ( ” Admin Pizza ” ) ;

28

29 } catch ( E x c e p t i o n ex ) {

30 ex . p r i n t S t a c k T r a c e ( ) ;

(5)

31 }

32 o u t . p r i n t l n ( ” P i z z a s a u v e g a r d´e ” ) ;

33 } e l s e {

34 o u t . p r i n t l n ( ”<form method=’POST’>” ) ;

35 o u t . p r i n t l n ( ”Type : <i n p u t t y p e =’ t e x t ’ name=’ t y p e ’><br/>” ) ;

36 o u t . p r i n t l n ( ” P r i x : <i n p u t t y p e =’ t e x t ’ name=’ p r i x ’><br/>” ) ;

37 o u t . p r i n t l n ( ” Q u a n t i t´e : <i n p u t t y p e =’ t e x t ’ name=’ q u a n t i t e ’><br/>” ) ;

38 o u t . p r i n t l n ( ”<i n p u t t y p e =’ submit’><br/>” ) ;

39 o u t . p r i n t l n ( ”</form>” ) ;

40 }

41 o u t . p r i n t l n ( ”</body>” ) ;

42 o u t . p r i n t l n ( ”</html>” ) ;

B Code noyau pour Commande Pizza

1 o u t . p r i n t l n ( ”<html>” ) ;

2 o u t . p r i n t l n ( ”<head>” ) ;

3 o u t . p r i n t l n ( ”<t i t l e>Commande P i z z a</ t i t l e>” ) ;

4 o u t . p r i n t l n ( ”</head>” ) ;

5 o u t . p r i n t l n ( ”<body>” ) ;

6 L i s t l S t o c k = s t o c k F a c a d e . f i n d A l l ( ) ;

7 f o r ( I t e r a t o r i t = l S t o c k . i t e r a t o r ( ) ; i t . hasNext ( ) ; ) {

8 P i z z a elem = ( ( S t o c k ) i t . n e x t ( ) ) . g e t P i z z a I d ( ) ;

9 o u t . p r i n t l n ( ”Type : <b>” + elem . g e t P i z z a I d ( ) + ” </b> ” ) ;

10 o u t . p r i n t l n ( ” P r i x : ” + elem . g e t P r i x ( ) + ”<br/>” ) ;

11 }

12

13 o u t . p r i n t l n ( ”<h1>C h o i s i s s e z v o t r e p i z z a : </h1>” ) ;

14 S t r i n g t y p e=r e q u e s t . g e t P a r a m e t e r ( ” t y p e ” ) ;

15 i f ( t y p e !=n u l l) {

16 try {

17 i n t q u a n t i t e=new I n t e g e r ( r e q u e s t . g e t P a r a m e t e r ( ” q u a n t i t e ” ) ) ;

18 S t r i n g e m a i l=new S t r i n g ( r e q u e s t . g e t P a r a m e t e r ( ” e m a i l ” ) ) ;

19 P i z z a p i z z a = p i z z a F a c a d e . f i n d ( t y p e ) ;

20 i n t t o t a l = q u a n t i t e ∗ p i z z a . g e t P r i x ( ) ;

21 o u t . p r i n t l n ( ”On a j o u t e une commande dont l e p r i x t o t a l e s t : ”+t o t a l+”<br/>” ) ;

22

23 commandeFacade . c r e a t e ( type , q u a n t i t e , t o t a l , e m a i l ) ;

24

25 } catch ( E x c e p t i o n ex ) {

26 ex . p r i n t S t a c k T r a c e ( ) ;

27 }

28 o u t . p r i n t l n ( ”Commande e f f e c t u ´e e ” ) ;

29 } e l s e {

30 o u t . p r i n t l n ( ”<form method=’POST’>” ) ;

31 o u t . p r i n t l n ( ”Type : <i n p u t t y p e =’ t e x t ’ name=’ t y p e ’><br/>” ) ;

32 o u t . p r i n t l n ( ” Q u a n t i t´e : <i n p u t t y p e =’ t e x t ’ name=’ q u a n t i t e ’><br/>” ) ;

33 o u t . p r i n t l n ( ” Email : <i n p u t t y p e =’ t e x t ’ name=’ e m a i l ’><br/>” ) ;

34 o u t . p r i n t l n ( ”<i n p u t t y p e =’ submit’><br/>” ) ;

35 o u t . p r i n t l n ( ”</form>” ) ;

36 }

37 o u t . p r i n t l n ( ”</body>” ) ;

38 o u t . p r i n t l n ( ”</html>” ) ;

Références

Documents relatifs

La boucle tant que est utilis ´ee lorsque le nombre d’it ´erations n’est pas connu `a l’avance: elle ex ´ecute le bloc d’instructions tant que la condition reste vraie.

Le but de ce projet informatique est de traiter des donn´ ees ` a travers le paradigme de pro- grammation MapReduce, la structure de fichiers HDFS et ` a l’aide du package rmr2

Le but de ce projet informatique est de traiter des donn´ ees ` a travers le paradigme de pro- grammation MapReduce, la structure de fichiers HDFS et ` a l’aide du package rmr2

Programme des enseignements – Syst` emes d’information et conception d’entrepˆ ots de donn´ ees – Les principes et la d´ emarche du Data Mining (fouille de donn´ ees)

Construire sur un seul graphique les nuages de points de l’indice de Qu´ etelet en fonction de la taille, en fonction du poids, pour chaque sexe8. Repr´ esenter, sur un seul

Une exp´ erience par coloration a montr´ e qu’une rivi` ere souterraine alimente une r´ esurgence dans la vall´ ee. La rivi` ere souterraine a un d´ ebit tr` es sensible aux

Les donn´ ees d’une sous-cat´ egorie C 0 v´ erifient les conditions suivantes. identit´

Perdre ses photos de vacances : ¸ca n’a pas de