Projet JAVA

publicité
3ème cycle Internet : Programmation & Applications
POLE UNIVERSITAIRE LEONARD DE VINCI
92916 PARIS-LA-DEFENSE
IPA 2002
eVinci-XP Group
Blaise DELEMAZURE
Hervé MARCANTONI
Michel FEUILLADE
JAVA
XML-RPC LITE
COMPTE-RENDU
Projet: octobre 2001--janvier 2002
SOMMAIRE
II – PRESENTATION DES 2 PROGRAMMES........................................................... 3
2.1 – LE SERVEUR ........................................................................................................................................................ 3
2.1.1 – La couche serveur ..................................................................................................................................... 3
2.1.2 – La couche RPC............................................................................................................................................ 4
2.1.4 – La couche application ............................................................................................................................... 5
2.2 - LE CLIENT .......................................................................................................................................................... 6
2.2.1 – La couche RPC............................................................................................................................................ 6
2.2.2 – La couche graphique ................................................................................................................................ 8
III – ECRITURE DU PROGRAMME ...................................................................... 9
3.1 – LES PROBLEMES RESOLUS............................................................................................................................... 9
3.1.1 -........................................................................................................................................................................ 9
3.2 – LIMITATIONS CONNUES ............................................................................................................................... 9
3.2.1 – Passage par l’écriture dur le disque de la hashtable......................................................................... 9
3.2.1 – Passage par l’écriture dur le disque des fichiers XML ..................................................................... 9
CONCLUSION ........................................................................................... 10
Projet JAVA – XML-RPC Lite
- page 2 -
27/05/17 - eVinci Group IPA:
[email protected], [email protected], [email protected]
II – Présentation des 2 programmes
XML-RPC Lite étant basé sur le modèle client-serveur, deux parties bien distinctes ont
été développées : le serveur et le client.
2.1 – Le serveur
L’application XML-RPC Lite serveur est implantée sur le serveur. Elle est constituée de
trois couches superposées :
2.1.1 – La couche serveur
Première étape
Le serveur démarre et attend la connexion d’un client éventuel (server Socket).
Seconde étape
Lorsqu’un client se connecte, un thread (serverChild) est créé qui :
1. Lance la couche RPC (RPCLite.start()).
2. Enregistre le document XML du flux d’entrée de la socket dans un fichier
(request.xml).
3. Appel la méthode RPCLite.XMLResponse(). Ce dernier appel est une entorse à la
philosophie qui sous-tend la conception de RPC, car celle-ci est d’encapsuler
complètement la couche RPC, qui ne doit être accessible que par les méthodes
start() et stop().
4. Lit le document XML généré par RPCLite dans un fichier (response.xml) et
l’enregistre dans le flux de sortie de la socket.
Projet JAVA – XML-RPC Lite
- page 3 -
27/05/17 - eVinci Group IPA:
[email protected], [email protected], [email protected]
2.1.2 – La couche RPC
Première étape
Elle analyse le fichier XML par la méthode de contrôle XMLResponse() qui crée le DOM
en mémoire en analysant le fichier request.xml et fait appel selon le premier tag reçu
(<request> ou <stock>) :
 Soit à la méthode getAction() à laquelle elle transmet le DOM en paramètre pour
fournir la méthode demandée
 Soit à la méthode getStock(), façon WSDL, pour fournir le « stock » de classes,
méthodes et objets présents sur le serveur et disponibles pour les clients.
Ces deux méthodes traitent la demande du client et génèrent un document XML,
contenant les résultats, qui est enregistré dans un fichier response.xml.
Seconde étape
La couche RPC est composée des éléments suivants :
1. Une table de hachage, un champ de RPCLite, qui permet de retrouver les
références sur les objets avec leur nom. Elle est désérialisée et sérialisée dans le
fichier hashtable.bin à chaque connexion d’un client, c’est à dire à chaque
invocation des méthodes RPCLite.start() et RPCLite.stop() Cette solution
pose des problèmes de cohérence car un client peut écraser les objets créés par
un autre. Il faudra dans une version ultérieure charger la table de hachage une
seule fois par session du serveur.
2. Une classe de méthodes utilitaires auxquelles font appel getAction() et
getStock() Cette classe, Utilities, est interne à la classe RPCLite car ses
méthodes manipulent la table de hachage
3. Une méthode loadConfig(), pour configurer RPC, qui est lancée en exécutant
directement la méthode main() de RPC et fait appel à deux fichiers que
l’administrateur peut éditer : config.xml et update.xml. Cette méthode permet
dans cette version de créer éventuellement une nouvelle table de hachage et
surtout de charger de nouvelles classes à disposition des clients. D’autres
fonctionnalités pourront être développées pour une version ultérieure.
Projet JAVA – XML-RPC Lite
- page 4 -
27/05/17 - eVinci Group IPA:
[email protected], [email protected], [email protected]
2.1.4 – La couche application
Elle est composée de tous les objets, classes et méthodes que le client peut manipuler sur
le serveur. Le développement d’une classe accessible par le client sur le serveur (donc
partageable par RPC-Lite) doit respecter les spécifications suivantes :
 La classe doit implémenter Serializable pour que ses instances puissent être
sérialisées avec la table de hachage
 Elle ne doit pas avoir de constructeur autre que celui par défaut. En fait c’est une
restriction non nécessaire puisque la méthode Class.getConstructors()
permet de créer des objets avec un constructeur qui accepte des paramètres.
Projet JAVA – XML-RPC Lite
- page 5 -
27/05/17 - eVinci Group IPA:
[email protected], [email protected], [email protected]
2.2 - Le client
L’application XML-RPC Lite client est implantée sur le client. Elle est constituée de deux
couches superposées :
2.2.1 – La couche RPC
La couche RPC telle que nous l’avons définie au début du projet proposait une amélioration
par rapport au projet initial : la possibilité de « découverte » par le client des classes
disponibles sur le serveur et, parallèlement, la notion de « service » proposé par le serveur.
Ce mécanisme a été implémenté dans la couche RPC par l’intermédiaire du document XML
Stock. Cette notion de découverte de service par le client implique donc que ce mécanisme
soit pris en compte dès l’initialisation des composants de l’interface.
Les classes de la couche
 ClientSocket : Cette classe gère les connexions avec le serveur. Elle offre deux
méthodes :

La méthode openConnection() permet de gérer les flux d'entrée et de sortie de
la socket.

La méthode remoteProcedureCall() utilise ces flux pour transmettre les
requettes et recevoir les réponses.
 ClientXmlParsing : Cette classe gère les différents traitements effectués sur
le XML. Elle offre trois méthodes :

La méthode parseStock() permet d'analyser le document XML Stock de
description de service et d'en extraire les informations permettant de construire
les listes déroulantes de l'interface graphique. Cette méthode utilise les classes
ClientDescriptionService et ClientDescriptionClass pour générer les
informations de service.

La méthode parseRequest() permet de générer le document XML de requête.

La méthode parseResponse() permet d'analyser le document XML de réponse et
d'en extraire le résultat de la requête.
 ClientDescriptionService : Cette classe offre la possibilité de représenter
un service RPC complet, à savoir une liste de classes "utilisables" à distance.(pour
cela, elle utilise la classe ClientDescriptionClass). Cette représentation objet
du service RPC permet :

La mise à jour des listes déroulantes de l'interface graphique.

La construction du document XML de requête.
Projet JAVA – XML-RPC Lite
- page 6 -
27/05/17 - eVinci Group IPA:
[email protected], [email protected], [email protected]
 ClientDescriptionClass : Cette classe offre la possibilité de représenter une
classe d'un service RPC, à savoir :

Son nom.

Une liste de ses méthodes.

Une liste de ses instances (ou objets).
Cette représentation objet d'une classe d'un service RPC permet :

La mise à jour des listes déroulantes de l'interface graphique.

La construction du document XML de requête.
Les étapes de traitement
Première étape : parseStock() (lors de l’initialisation de l’interface graphique) :
1. Création d’une Socket avec le serveur par la méthode openConnection() de la
classe ClientSocket.
2. Envoi du document XML requête de demande de description de service :
<stock></stock> par la méthode remoteProcedureCall() de la classe
ClientSocket.
3. Réception du document XML réponse de description de service.
4. Analyse du document XML par la méthode DOM et création d’un objet
ClientDescriptionService.
Seconde étape :
parseRequest() (lors de la demande de l’utilisateur) :
1. Par la méthode du DOM, création du document XML de requête à partir des saisies
de l’utilisateur.
2. Envoi du document XML requête d’invocation de méthode distante par la méthode
remoteProcedureCall() de la classe ClientSocket.
3. Réception du document XML réponse d’invocation de méthode distante.
Troisième étape : parseResponse() (lors de la demande de l’utilisateur) :
1. Analyse du document XML par la méthode DOM et affichage du résultat dans une
boîte de dialogue.
Projet JAVA – XML-RPC Lite
- page 7 -
27/05/17 - eVinci Group IPA:
[email protected], [email protected], [email protected]
2.2.2 – La couche graphique
Les classes de la couche
 ClientApplication Cette classe gère l'application, c'est elle qui possède la
méthode main().
 ClientBoxMain : Cette classe gère la fenêtre principale de l'application cliente.
 ClientBoxAbout : Cette classe gère la fenêtre "A propos" de l'application
cliente. On y retrouve deux types de méthodes :

La méthode d’initialisation des composants.

Les méthodes de gestion des évènements.
 ClientComboBuilder : Cette classe gère la mise à jour des liste déroulantes de
l'interface graphique présentant les paramètres à saisir pour la requette RPC.
Elle offre quatre méthodes :

La méthode updateClass() permet la mise à jour de la liste déroulante présentant
les classes disponibles dans le service RPC.

La méthode updateMethod() permet la mise à jour de la liste déroulante
présentant les méthodes disponibles dans la classe sélectionnée.

La méthode updateObject() permet la mise à jour de la liste déroulante
présentant les instances (objets) disponibles dans la classe sélectionnée.

La méthode updateParam() permet la mise à jour du champs de saisie des
paramètres de la méthode sélectionnée.
Les étapes de traitement
Première étape : ClientBoxMain (lors du lancement de l’application) :
1. Initialisation des composants de la fenêtre principale de l’application et utilisation
de la classe ClientComboBuilder pour l’initialisation des composants de saisie de
la requête (ComboBox et TextField).
Seconde étape :
ClientBoxMain (lors de la demande de l’utilisateur) :
1. Initialisation des composants de saisie de la requête
ClientComboBuilder en fonction des saisies de l’utilisateur.
par
Troisième étape : ClientBoxAbout (lors de la demande de l’utilisateur) :
1. Initialisation des composants de la fenêtre « A propos ».
Projet JAVA – XML-RPC Lite
- page 8 -
27/05/17 - eVinci Group IPA:
[email protected], [email protected], [email protected]
la
classe
III – ECRITURE DU PROGRAMME
La première étape fut de fixer les bases de la communication client  serveur. Pour cela,
la couche applicative implantant le protocole XML-RPC Lite fut le premier élément développé.
Durant cette phase, mais aussi par la suite, sont apparus quelques problèmes qu’il nous a
fallu résoudre par tel ou tel moyen aboutissant soit au fonctionnement normal de l’application,
soit à une variante pouvant être encore complétée et améliorée.
3.1 – Les problèmes résolus
3.1.1 -
3.2 – Limitations connues
3.2.1 – Passage par l’écriture dur le disque de la hashtable.
Problème :
accès concurrents à la hashtable par plusieurs threads, impliquant un risque
de perte de données
Causes :
Solution :
passer par un processus principal et unique pour l’écriture de la hashtable
sur le disque. Il en résultera un gain de performances et de sécurité.
3.2.1 – Passage par l’écriture dur le disque des fichiers XML
Problème :
performance si tous les fichiers XML des deux applications transitent par le
disque.
Causes :
types de flux incompatibles entre la méthode readLine() de Socket et la
méthode parse() DocumentBuilder.
Solution :
Projet JAVA – XML-RPC Lite
- page 9 -
27/05/17 - eVinci Group IPA:
[email protected], [email protected], [email protected]
CONCLUSION
De nombreux commentaires ont été ajoutés dans le code. Ce projet a nécessité beaucoup
de rigueur dans la définition de l’algorithme. Les heures de programmation m’ont permis
d’atteindre l’objectif, à savoir construire un DOM et restituer le code source à partir de ce
DOM.
Certains problèmes plus ou moins bloquants que j’ai été amené résoudre m’ont permis de
prendre du recul face au programme et de rectifier certaines orientations du projet avant
qu’elles ne deviennent, elles aussi, bloquantes. C’est essentiellement en testant le programme
dans des situations réelles et diverses que l’on découvre ces points bloquants, d’où
l’importance de la classe Test.
L’objectif est donc atteint, même s’il subsiste quelques petits problèmes (détectés et
dont je connais les solutions).
Projet JAVA – XML-RPC Lite
- page 10 -
27/05/17 - eVinci Group IPA:
[email protected], [email protected], [email protected]
Téléchargement