===== Conception de logiciels intranet ===== ==== Présentation de l'Unité d'Enseignement ==== {{:departement_info:personnels:pb:cli:NSY102.pdf|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. {{:departement_info:personnels:pb:cli:classloader.pdf|chargement des classes d'un programme Java à son exécution}} Cela est rendu possible par des mécanismes dit d'introspection. {{:departement_info:personnels:pb:cli:introspection.pdf|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 : * effectuer des contrôles d'accès ou d'autres opérations comme une journalisation avant de répondre à une requête (on parle alors de proxy-mandataire) * ou répondre aux requêtes qu'on lui soumet en conservant leur résultat afin de ne pas aller le chercher à nouveau si la même requête lui est soumise (on parle alors de proxy-cache). On retrouve ces 2 cas de figure en programmation ({{:departement_info:personnels:pb:cli:exemplesProxy.zip|exemples de proxy}}) mais il y a en fait toute une {{:departement_info:personnels:pb:cli:proxy.pdf|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. {{:departement_info:personnels:pb:cli:dynamic_proxies_in_java.pdf|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. {{:departement_info:personnels:pb:cli:client-serveur.pdf|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. {{:departement_info:personnels:pb:cli:tcp-en-java.pdf|programmation client-serveur en Java}}\\ {{:departement_info:personnels:pb:cli:tcp_java.zip|exemple TCP échange d'objets java}}\\ {{:departement_info:personnels:pb:cli:tcp_maison.zip|exemple TCP protocole "maison"}}\\ {{:departement_info:personnels:pb:cli:tcp_http.zip|exemple TCP HTTP (GET seulement)}}\\ {{:departement_info:personnels:pb:cli:calculette réseau.zip|calculette en réseau}}\\ {{:departement_info:personnels:pb:cli:ClientEtServeurEcho.zip|écho en réseau}}\\ Travail à faire : - Modifier le client pour qu'il soit capable de recevoir des textes même s'il n'a pas soumis de texte au serveur. - 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). {{:departement_info:personnels:pb:cli:discussion.zip|un corrigé}}\\ Travail à faire : - Comprendre l'architecture logicielle et le fonctionnement du serveur - 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. {{:departement_info:personnels:pb:cli:multicast.pdf|diaporama}} {{:departement_info:personnels:pb:cli:exempleMulticastUDP.zip|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 ([[https://courses.cs.duke.edu//fall16/compsci356/DNS/DNS-primer.pdf|courses.cs.duke.edu]] et [[https://linuxembedded.fr/2020/08/bonjour-mon-nom-est-dns-sd|linuxembedded.fr]]) permet d’ajouter des informations sur les services disponibles sur chacune des machines présentes sur un réseau local. {{:departement_info:personnels:pb:cli:DNS-SD-presentation-cas-utilisations.pdf|diaporama de Antoine Bernard}} Des services type sont prédéfinis ([[http://www.dns-sd.org/ServiceTypes.html|dns-sd.org]]). JmDNS implante ce protocole en Java, définit des [[http://jmdns.sourceforge.net/clover/javax/jmdns/impl/constants/DNSConstants.html|constantes]] et propose une [[http://jmdns.sourceforge.net/apidocs/index.html|API]] pour exploiter la structure des paquets mDNS. {{:departement_info:personnels:pb:cli:decouverte_services.pdf|diaporama}} {{:departement_info:personnels:pb:cli:udp_decouverte.zip|exemples en Java de découverte de services}} Exercice :\\ - modifier le client de discussion pour qu'il découvre le service chat et ses coordonnées - modifier le serveur de discussion pour qu'il publie son service et ses coordonnées