Diagrammes de composants – Diagrammes de déploiements
Par experience, les développeurs ont du mal à comprendre le niveau d’exigence et ce que traduit ces diagrammes.
Un seul diagramme de composants
Ce qu’il faut bien noter c’est qu’il n’y a qu’un diagramme de composants et plusieurs diagrammes de déploiement par projet
Qu’est-ce qu’un composant ? Un WAR, un JAR
Unité de déploiement. C’est tout ce qui se déploie. Tout ce qui se déploie est un composant.
Qu’est-ce qui se déploie ?
Eclipse ne se déploie pas : c’est le moyen de créer mon logiciel.
En java, je crée des jar, ou des war si je fais du web : ce sont bien des fichiers déployés, il n’y a pas d’ambiguité, ce sont des unités de déploiement.
Le composant a une vue système, on le voit, exemple, un fichier, un repertoire. Si on l’enlève, ça ne fonctionne plus.
Par contre, le WAR/JAR a besoin de TOMCAT pour s’executer.
Ca veut dire qu’il existe une dépendance entre le WAR/JAR et TOMCAT.
Tomcat est un composant système. Il est pratique, physqiue, et pas thorique.
Mais, c’est plus qu’un composant, car à l’execution, il se matérialise en « serveur » et plus précisément, un process système qui s’execute et qui permet l’execution de mes web archives.
Une base de donnée est un composant système: pour simplifier, c’est un process qui écoute sur un port et qui accède à des fichiers. (via le driver JDBC sur le port TCP)
Le nom des composant est très précis : il incluse les numéros de versions.
Mais, au début, on fait un bench, on ne sait pas ce qu’on va avoir comme serveur web, par exemple Apache, ou IIS. Au fur et à mesure qu’on va avancer, on va pouvoir renseigner davantage les briques et les versions
A chaque users stories, on enrichit le diagramme de composants.
Donc on doit le mettre à jour à plusieurs : les nouvelles users stories apparaitront
Il nous montre les liens logiciels entre les composants. Un composant figure UNE ET UNE SEULE FOIS sur ce diagramme
Une question? Posez-la ici
Quand est-ce qu’on livre un digramme de composants ?
En release 0, on a un diagramme de composants dans sa version préliminaire, pourquoi ? Parce qu’on ne peut pas penser à tout. Il sera en version définitive à la fin du projet.
A chaque mise à jour
Le diagramme de déploiements
C’est la vision dont on va répartir le code sur les différentes machines.
On a autant de fois de composants qu’ils sont déployés sur autant de machines.
Il montre la façon dont les instances de composants sont déployés sur les machines.
Si un logiciel déployé sur 2 clients différents, on aura 2 façons différentes de le déployer, donc, 2 diagrammes de déploiement.
Exemple, dans une petite PME, je mets le même serveur SQL Serveur sur le même serveur que le serveur web IIS.
Dans un grand groupe, il y aura davantage de charge : je mets le serveur SQL sur un serveur et un serveur IIS sur un autre serveur.
Je dois étudier les avantages et les inconvénients de cette conslidations.
Prendre en compte les contraintes géographiques : je rapproche la base de donnée plutôt vers le site du siège social, plutôt que sur le site délocalisé.
Par contre, si on a une entreprise avec 2 sites de même taille, on peut décider de mettre 2 bases sur 2 endroits et répliquer les bases : le soft ne change pas, mais l’installation est différente.
Une question? Posez-la ici
Exemple d’architecture
Le diagramme de composants
RMI, ActiveMQ
Base de production, base Postgress, SQL Server
En mode Agile, je vais extraire mes données manuellement tous les jours, avant de fournir une interface automatisée. Tous les jours mon client execute historic-client, un programme Java classique.
CLI = Command line interface
Quelles sont les dépendances ? Lire la base de donnée PostGress pré-prod (c’est un composant executable, avec une version 8.0 et un port TCP sur lequel je peux me connecter et envoyer des requetes) pour extraire les données.
Ces données je vais les envoyer vers un RMI, livré avec la JRE, sur le port 1099
Ensuite le client se connecte sur le port 1099 pour récupérer l’adresse du serveur qui au préalable s’est enregistré sur le même port.
RMI TCP 1099. Derrière ce port se cache l’interface car la méthode lookup est bien l’interface de Regitry.
JAVA.RMI.REGISTRY possède 2 méthodes : « bind » et « report » .
Les composants écrits en JAVA ont des dépendances vers les JRE
Une fois que j’ai récupéré mes données via le RMI registry, le client se connecte au serveur en RMI toujours. Donc j’ai un port RMI (symbolisé en rectangle)
Public interface HistoricDataFlusher extends java.rmi.remote
Ce sont des méthodes sur la classe HistoricDataFlusher
Transformation des données
Les données sont récupérées de Postgress, il faut que je les transforme
API : transform-apt-5.1.6 que j’implemente dans un projet à part.
Je cree une interface DataTransform dans laquelle j’implemente ma transformation
Public class SimpleDataTransform implements DataTransform
Ca veut dre que mon client qui est mon service, va utiliser le composant jar différent transform-api, car ce sont 2 projets différents au sens MAVEN.
Il faut que le composant 1 a dans son classpath le 2eme jar : ils seront dans le même process.
Interet : si demain je veux faire évoluer ma transformation, qui est-ce qui change ? Juste l’implémenation.
Mes données sont envoyées dans une file ActiveMq protocole AMQP (serveur executable) en utilisant l’API ActiveMQ ; port TCP 5672
Puis ensuite les données sont insérées dans la base de donnée de consolidation sql server protocol tcp 1443
Une question? Posez-la ici
Le diagramme de déploiement
Tous les composants du diagramme de déploiement doivent être sur le diagramme de composants.
L’inverse n’est pas forcément vrai.
Représentation du réseau local où sont déployés les composants :
- client
- base postgress
- registry
- serveur activeMS
- serveur de transformation
- 2eme serveur de transformation
- 2 agents d’insertion
- Switch réseau
Exemple : le composant client est déployé sur une machine avec les composants suivants : historic-client, linux OS, JDBC PostgreSQL, JRE.
Des questions?