M2 BD IA — BDED Semaine du 6/10 au 10/10/2009 TP 1 • Illustration des concepts objets distribués avec Java-RMI Ce TP fera l’objet d’un compte rendu à réaliser par binôme et à rendre avant le 31/10/2008 (maximum 30 pages hors code en annexe) Exercice 1. Prise en main de Java-RMI Le but de ce premier exercice (application directe du cours) est de prendre en main l’environnement JavaRMI et de se familiariser avec le processus de développement d’applications objets distribués. Réaliser le programme client serveur HelloWolrd vu en cours. 1. Tester l’ensemble sur une seule machine. 2. Observer la génération du stub et du squelette avec les JDK 1.4 et 1.5 ou 1.6, que constatez vous ? Quelles sont les évolutions d’un JDK à l’autre ? Compléter vos observation en utilisant la commande rmic -keep 3. Séparer le code du client et celui du serveur dans deux répertoires, quels sont les fichiers nécessaires à chacun pour la compilation et pour l’exécution ? 4. Recompiler client et serveur avec la même version de JDK, lancer le serveur et le client sur deux machines différentes de même architecture. 5. Répéter l’opération précédente sur deux machines d’architecture différentes en prenant garde d’activer la même version de la machine virtuelle. 6. Peut-on utiliser 3 machines afin d’avoir un référentiel d’interfaces séparé, que constatez-vous ? 7. Modifier le code de votre application afin de mettre en place le téléchargement automatique de classes via un serveur Web. Utiliser votre répertoire public html afin de permettre le partage des classes depuis l’un des serveurs ufrsciencestech/kundera ou depinfo/genet. 8. Expérimenter la méthode LocateRegistry, résumer son fonctionnement. 9. Qu’est ce que le service JNDI proposé dans Java EE, quelles sont les relations entre JNDI et Java RMI. Exercice 2. Réaliser un programme de simulation de gestion de compte bancaires. Vous devez obligatoirement adopter une approche objet et définir une classe compte permettant la création d’un compte, proposant les opérations de dépôt, retrait, affichage du solde et permettant un archivage des opérations effectuées. – Lancer plusieurs clients simultanément. Que se passe-t-il ? Comment est (doit-être) gérée la concurrence ? – Comment réaliser une application qui gère 200 000 comptes ? Expérimentez le pattern de développement ObjectFactory. – Que se passe t’il côté client si le serveur est arrêté puis relancé ? Quelles solutions peut-on envisager pour résoudre ce problème ? – Expérimentez les fonctionnalités fournies par le package activation. – Utiliser les références persistantes du mécanisme d’activation. Á quel type de problèmes sont-elles une solution ? Exercice 3. Objets mobiles – Reprendre l’exercice précédent, envoyer à la demande du client un objet compte et effectuer le calcul du solde sur le client. – Réaliser le programme de serveur générique permettant la mobilité des objets Java (exemple du cours). – Modifier le programme afin de réaliser un objet mobile pouvant se déplacer de serveur en serveur en utilisant une route décrite dans un fichier ou dans un tableau. Exercice 4. Objets distribués et persistance – Reprendre l’exercice 2, stocker les valeurs des attributs d’un compte et les transactions réalisées dans un base de données au moyen d’un connexion JDBC – Identifier les problèmes de concurrence et de synchronisation. – En déduire des règles de programmation. Eric Leclercq — Département IEM — http://ufrsciencestech.u- bourgogne.fr 1 – Montrer comment les techniques vues dans l’exercice 2 peuvent être appliquées dans le cas de la persistance d’objets distribués. Notes : Plusieurs versions de J2SE (jdk) sont installées sur les serveurs, l’ensemble des stations SUN Solaris et sur les machines Linux. Les installations résident sous /usr/local. Afin de pouvoir utiliser la version choisie, vous devez positionner la variable d’environnement PATH comme suit et JAVA HOME : export PATH=/usr/local/java-1.4/bin:$PATH export JAVA_HOME=/usr/local/java-1.4 Nom externe depinfo.u-bourgogne.fr ufrsciencestech.u-bourgogne.fr Nom local genet.iem stendhal.iem MI105-03,08,05,10-14,16 MI105-06,07,09,17-20,23,24 kundera.iem MI104-01 à 12 OS/Architecture Solaris 10 x64 Solaris 10 x64 Solaris 10 SPARC Solaris 10 x64 Debian Fedora Core 8 JDK JDK 1.2, 1.4, 1.5, 1.6 JDK 1.2, 1.4, 1.5, 1.6 JDK 1.4, 1.5 JDK 1.2, 1.4, 1.5, 1.6 JDK 1.4, JDK 1.4, 1.5 Afin d’observer précisement le comportement de Java RMI, ne pas utiliser d’environnement de développement mais un simple éditeur comme vi, xemacs, nedit ou bluefish. Le service rmiregistry écoute par défaut sur le port 1099. Si vous partagez une machine avec d’autres binômes, utiliser un autre port. Eric Leclercq — Département IEM — http://ufrsciencestech.u- bourgogne.fr 2