Rapport projet Option Java - Page personnel de Sylvain Archenault

publicité
Abi Chahine Carlo
GM 4
Archenault Sylvain
2006
Houpert Yves
Wang Martine
Rapport projet Option Java
Pour l'option Java, nous avons choisi de développer un système de messagerie instantanée. Ce projet avait pour but de nous faire découvrir les composants Entreprise de Java, la communication réseau, programmation multithreadée, traitement du XML.
1. Communication réseau
Avant d'aborder les communications réseaux, nous devons présenter l'architecture que nous avons choisie. Il y a tout d'abord un serveur central qui sera en charge de gérer la connexion des clients, et de relayer les messages d'un client à un autre. Afin de réaliser ces différentes tâches, il se servira d'une base de données auquelle il aura accès grâce à un Entreprise Java Bean (EJB).
Illustration 1: Architecture Bamboo Ch@t
Pour faire communiquer les programmes clients avec le serveur, nous avons choisi d'utiliser une communication Socket. Cela a pour avantage de pouvoir communiquer facilement avec des programmes écrit dans d'autres langages. Nous avons en effet développer un client C++. L'utilisation de RMI aurait été plus difficile, voir impossible.
Il est également intéressant de noter que nous n'avons pas utilisé les classes ­ 1 ­
Socket et ServerSocket classiques (celles issues du package java.net), mais les classes SocketChannel et ServerSocketChannel du paquet java.nio1 introduit dans la version 1.4 de Java. Celles­ci se révèlent beaucoup plus efficaces. En effet, avant les méthode de la classe Socket pour lire était bloquante. Ceci a pour conséquence d'attribuer un thread à chaque connexion ouverte, cela peut­être donc problématique dans le cas d'un serveur très chargé. Les nouvelles classes offertes par java.nio permettent d'éviter ce problème en fournissant des méthode non bloquantes. Nous nous sommes référer au livre d'O'Reilly : « Java NIO »2 ainsi qu'un article publié par Giuseppe Naccarato sur http://www.onjava.com3
2. Entreprise Java Bean
Au début, nous souhaitions beaucoup utilisé les EJB pour communiquer entre les clients et le serveur. Cependant, lors de l'étude de faisabilité, nous nous sommes rendu compte qu'il serait dangereux d'utiliser uniquement les EJB. En effet, ils nous sont apparus assez complexes à utiliser et nous n'étions pas sûr de pouvoir réaliser toutes les travaux nécessaires à l'application grâce au bean. De plus, l'utilisation des beans rendait beaucoup plus difficile l'utilisation de clients développés dans d'autres langages que Java. Mais comme nous accordions beaucoup d'importance à utiliser ce composant très puissant, nous avons décidé de le limiter à la communication avec la base de données. Ainsi, nous avons réduit l'impact du bean sur le développement du projet, évitant ainsi de mauvaises surprises, tout en l'incluant dans le projet ce qui nous a permis d'appréhender son développement. Un EJB permettant l'inscription des utilisateurs à également été crée. Celui­ci est accessible via une interface web. Il est couplé à des pages JSP.
3. Thread pool
Afin que le serveur puisse être performant, nous avons choisi d'utiliser un « design pattern » assez répandu, le thread pool. Le thread pool consiste en une collection de threads (la taille est fixé au début) qui traite les requêtes des clients. Ce design a pour avantage de permettre un parallélisme du traitement des messages, tout en évitant un débordement de capacité lors d'une charge importante du serveur. 4. Traitement XML
Afin de faire communiquer les différents programmes, nous avons dû définir un protocole. Nous avons choisi d'utiliser au maximum la conception objet. Nous avons décidé de créer pour chaque message un objet. Cet objet doit donc transiter par le réseau. Comme nous avons décidé de ne pas utiliser RMI ou Corba, nous avons donc défini une méthode pour faire transiter ces objets par le réseau. Ce processus s'appelle le « marshalling ». Avant d'envoyer un message sur le réseau nous le transformons en XML. Lors de la réception du message XML, nous recréons l'objet.
1 http://java.sun.com/j2se/1.4.2/docs/guide/nio/
2 http://javanio.info/
3 http://www.onjava.com/pub/a/onjava/2002/09/04/nio.html
­ 2 ­
La transformation Objet – XML est plutôt facile. Au contraire, la transformation est plus difficile. Nous avons choisi d'utiliser la librairie xerces4 et un parseur SAX qui a pour intérêt d'être rapide et léger. L'autre choix possible était un parseur DOM, cependant celui­
ci est plut lourd et ne s'adaptait pas bien à notre cas.
5. Divers
Un point intéressant que nous avons également abordé est l'internationalisation du programme. Cela consiste à proposer le programme en plusieurs langues suivant l'environnement sur lequel celui­ci est exécuté. Nous avons seulement internationalisé le programme serveur en français et anglais. La langue à utiliser est également paramétrable par une option dans la ligne de commande.
Ce projet fût très enrichissant à réaliser, nous avons abordé des notions importantes dans la programmation moderne (réseau, thread, bean, xml, ...). 4 http://xerces.apache.org
­ 3 ­
Téléchargement