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/. Android - Java EE 1/5 Jean-Marc Farinone
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" Android - Java EE 2/5 Jean-Marc Farinone
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"> android:text="@string/hello_world" /> <RadioGroup android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_alignparentleft="true" android:layout_alignparentstart="true"> android:text="obtenir le solde" android:id="@+id/radiobutton" /> android:text="ou bien" /> android:text="retirer" android:id="@+id/radiobutton2" /> android:text="crediter" android:id="@+id/radiobutton3" /> android:text="la somme de :" android:id="@+id/textview2" /> <EditText android:layout_width="match_parent" android:inputtype="numberdecimal" android:ems="10" android:id="@+id/edittext" /> Android - Java EE 3/5 Jean-Marc Farinone
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) Android - Java EE 4/5 Jean-Marc Farinone
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 : Android - Java EE 5/5 Jean-Marc Farinone