Conception de logiciels intranet

Présentation de l'Unité d'Enseignement

fiche UE du CNAM


Rappels

A l'exécution d'un programme écrit en Java, il faut charger les classes en mémoire pour que leurs méthodes soient disponibles afin d'être exécutées par les objets instanciés dans le programme. Ce chargement n'est pas effectué au chargement du programme mais au moment où on a besoin d'une classe parce qu'un objet de cette classe doit être instancié. Il est réalisé par un chargeur de classes (ClassLoader). La machine virtuelle Java en utilise un par défaut mais il est possible d'en utiliser un autre pour charger une classe à la demande ou à distance, ce qui intéresse les logiciels intranet.

chargement des classes d'un programme Java à son exécution

Cela est rendu possible par des mécanismes dit d'introspection.

introspection en java


Proxy

Le mot anglais proxy se traduit par procuration en français. En informatique, on désigne par le mot proxy un intermédiaire qui agit par procuration. Dans les réseaux informatiques, un proxy peut :

On retrouve ces 2 cas de figure en programmation (exemples de proxy) mais il y a en fait toute une famille de proxys.

En utilisant l'introspection, il est même possible de construire le proxy à l'exécution. On parle alors de mandataire dynamique.

explication mandataire dynamique


TCP

TCP pour Transmission Control Protocol est un système de règles qui permet à deux hôtes (ordinateurs) de se connecter et d'échanger des données. Son rôle est d'assurer la livraison fiable et sans erreur des paquets, dans l'ordre où ils ont été envoyés.

Les données sont envoyées et reçues par des logiciels qui s'exécutent sur les hôtes. On appelle ces logiciels des clients et des serveurs.

client-serveur

En Java, la programmation d'application cliente ou serveur avec TCP utilise das classes prédéfinies du paquet java.net : Socket et ServerSocket.

programmation client-serveur en Java

exemple TCP échange d'objets java
exemple TCP protocole "maison"
exemple TCP HTTP (GET seulement)

calculette en réseau
écho en réseau

Travail à faire :

  1. Modifier le client pour qu'il soit capable de recevoir des textes même s'il n'a pas soumis de texte au serveur.
  2. Modifier le serveur pour qu'il envoie le texte reçu d'un client à tous les clients connectés (et pas seulement au client émetteur).

un corrigé

Travail à faire :

  1. Comprendre l'architecture logicielle et le fonctionnement du serveur
  2. Modifier le serveur pour implanter le patron publish-subscribe (variante de observer)

UDP

Le protocole de datagramme utilisateur (UDP) permet la transmission de données (sous forme de datagrammes) de manière très simple entre deux entités, chacune étant définie par une adresse IP et un numéro de port. Aucune communication préalable n'est requise pour établir la connexion, au contraire de TCP (qui utilise une négociation préalable (handshaking). UDP utilise un mode de transmission sans connexion. UDP ne garantit pas la bonne livraison des datagrammes, ni leur ordre d’arrivée. Il peut même arriver qu’un datagramme soit reçu en plusieurs exemplaires.

UDP est utile pour transmettre rapidement de petites quantités de données, depuis un serveur vers de nombreux clients ou bien dans des cas où la perte éventuelle d'un datagramme est préférée à l'attente de sa retransmission.


Multicast IP

Le multicast est une forme de diffusion d'un émetteur (source unique) vers un groupe de récepteurs (on parle aussi de « diffusion multipoint » ou « diffusion de groupe »). Les récepteurs intéressés par les messages adressés à ce groupe doivent s'inscrire à ce groupe. Les messages ne sont pas envoyés autant de fois qu’il y a de connexions (unicast), ni à toutes les machines du réseau (broadcast), mais une seule fois, au groupe. Le multicast IP ne permet pas de savoir qui participe, qui peut participer ou non au groupe.

diaporama

exemple de récepteur et d'émetteur multicast en Java


Découverte de services

Les protocoles de découverte de services (SDP) sont des protocoles réseau qui permettent la détection automatique d’équipements et de services offerts par ces équipements dans un réseau d’ordinateurs. La découverte de services nécessite un langage commun pour permettre aux agents logiciels d'utiliser les services les uns des autres sans avoir besoin d'une intervention continue de l'utilisateur.

mDNS-SD (multicast DNS Service Discovery) permet l'utilisation de services en réseau sans configuration. Il utilise des paquets dont la structure (courses.cs.duke.edu et linuxembedded.fr) permet d’ajouter des informations sur les services disponibles sur chacune des machines présentes sur un réseau local.

diaporama de Antoine Bernard

Des services type sont prédéfinis (dns-sd.org). JmDNS implante ce protocole en Java, définit des constantes et propose une API pour exploiter la structure des paquets mDNS.

diaporama

exemples en Java de découverte de services

Exercice :

  1. modifier le client de discussion pour qu'il découvre le service chat et ses coordonnées
  2. modifier le serveur de discussion pour qu'il publie son service et ses coordonnées