TP architecture N-tiers en Java EE ou
Java EE, Android : la synthèse
Vous allez, dans ce TP, construire une architecture client serveur, plus précisément une application Android cliente et une servlet serveur. Pour cela, on va d'abord installer la partie serveur : une application web. Puis la tester par un navigateur web. Vous développerez ensuite une application Android cliente. A la fin du TP vous aurez ainsi deux clients (un smartphone Android et un navigateur web) qui pourront gérer le même compte bancaire.
Le serveur GereCompteBancaireServlet
Le programme qui va recevoir les requêtes des clients et y répondre est une servlet.
1°) Récupérer à l'URL
http://cedric.cnam.fr/~farinone/GDAPIA/ADistribuer.zip, le fichier ADistribuer.zip. Ouvrer ce fichier dans votre répertoire de travail. Vous devez désormais
avoir une arborescence comme :
Vous avez donc, dans le répertoire ADistribuer :
− le .war de l'application web (contenant l'arborescence du répertoire CopieSiteWeb)
− une copie du site web qui sera finalement mise sous tomcat (grâce au .war)
− les sources *.java pour votre servlet
− un script qui permet de construire cette application web
Certaines ressources données dans ce .zip ne le sont qu'à titre indicatif.
2°) Lancer tomcat sur votre machine. Si vous ne l'avez pas, vous pouvez le récupérer et l'installer à partir de l'URL http://tomcat.apache.org/.
Déployer le fichier GestionnaireCompteBancaire.war dans tomcat (utiliser Tomcat Manager (cf. cours et TP précédent).
3°) Lisez le code de la servlet GereCompteBancaireServlet (fichier GereCompteBancaireServlet.java) ainsi que le fichier web.xml.
3.1) En déduire l'URL qu'il faut utiliser pour obtenir le solde du compte bancaire.
3.2) De même en lisant le code de la servlet GereCompteBancaireServlet, déduire l'URL pour débiter 52 euro.
3.3) De même en lisant le code de la servlet GereCompteBancaireServlet, déduire l'URL pour créditer 52 euro.
3.4) Vérifier vos réponses aux questions 3.1, 3.2, 3.3 en accédant à ces URLs par un navigateur.
Au premier accès, si vous demandez le solde de votre compte bancaire, vous devriez avoir déjà 300 euro !
4°) Comment est sauvegardé le compte bancaire ? Sous quel format ? Trouver et lisez cette sauvegarde.
Le client Android
5°) Ecrire une application Android qui permettra de manipuler le compte bancaire. On peut avoir un "écran d'accueil" comme :
Vous pouvez utiliser le fichier d'IHM suivant : fichier activity_main.xml
---
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context=".MainActivity"
android:orientation="vertical">
<TextView android:text="@string/hello_world"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<RadioGroup
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true">
<RadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Obtenir le solde"
android:id="@+id/radioButton" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="ou bien" />
<RadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Retirer"
android:id="@+id/radioButton2" />
<RadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Crediter"
android:id="@+id/radioButton3" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="la somme de :"
android:id="@+id/textView2" />
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="numberDecimal"
android:ems="10"
android:id="@+id/editText" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="euro"
android:id="@+id/textView4" />
</RadioGroup>
</LinearLayout>
---
6°) Ecrire le code qui permet d'obtenir le solde du compte bancaire, c'est à dire, lorsque l'utilisateur clique sur le bouton "Obtenir le solde", l'application lance un nouvel écran qui affiche le solde. Par exemple avec les émulateurs AVD ou Genymotion, on pourra obtenir :
Remarque
Il faut évidemment utiliser l'URL que vous avez trouvée à la question 3.1. Si, à cette quesstion, vous aviez utilisé localhost, cela a (malheureusement !) fonctionné. Dans le cas du smartphone ou des AVD, lors de l'exécution du programme, que signifie localhost ?
Il faut donc mettre, dans les deux cas navigateur web (question 3.x) et smartphone, l'adresse IP de la machine à atteindre. On obtiendra cette adresse à l'aide des commandes ipconfig (windows) ou ifconfig (Unix).
7°) Ecrire le code qui permet de déduire du solde du compte bancaire, la somme indiquée par l'utilisateur dans l'écran d'accueil, c'est à dire, lorsque l'utilisateur clique sur le bouton "Retirer", l'application Android retire la somme indiquée et lance un nouvel écran. Par exemple avec les
émulateurs, on pourra obtenir :
Vérifier que le compte bancaire a bien été débité avec l'une ou l'autre de vos applications clientes.
8°) Faire de même avec l'opération créditer.
L'architecture client-serveur (client Android, serveur servlet)
Vous devez désormais pouvoir manipuler votre compte bancaire par un client web ou un téléphone portable sous Android et vérifier les opérations faites par un client à l'aide de l'autre client.
Bonus
9°) Si votre compte bancaire est en fait géré par la servlet de l'ordinateur voisin, modifier vos clients pour qu'ils puissent manipuler ce compte bancaire. Vous aurez besoin du numéro IP de l'ordinateur voisin.
10°) De même, puisque votre servlet gère un compte bancaire, en supposant que celui-ci est celui de votre voisin, demander lui de gérer son compte en se connectant sur votre servlet. Vous devrez, pour cela, lui communiquer le numéro IP de votre machine et il devra modifier le code de son application Android.
Conclusion
Dans les questions 9°) et 10°) on obtient un véritable architecture client-serveur où le client et le serveur sont sur deux machines différentes. On pourrait même envisager une architecture 3-tiers si la sauvegarde de la donnée pérenne était sur une troisième machine (avec une connexion de la servlet sur une base de données déposée sur cette troisième machine par exemple). D'ailleurs certaines de ces parties peuvent être découplées est mise sur des machines distinctes pour constituer une véritable architecture N-tiers :