TE1 (JAVA EE - Generals) Flashcards
Qu’est-ce qui définit une application multi-tiers ?
☝🏼 Une application multi-tiers est distribuée. En général, il y a au moins une machine client et une machine serveur connectées sur un réseau.
👉🏼 Une entité utilise un appareil pour intéragir avec l’application.
Ex : User veut aller sur internet avec un browser avec son natel.
Ex : User veut taper une commande sur une interface de commande. L’entité peut tout aussi bien être un humain qu’un robot ou un script.
👉🏼 Les interactions utilisateurs déclenchent un appel à un service distant. Lorsqu’un user envoie une query ou une commande à un serveur à distance, ce dernier est fait avec un protocole d’application construit au-dessus d’un protocole de transport. Ca se traduit souvent par un payload JSON envoyé via HTTP.
👉🏼 La requête est traitée par une série de composants qui collaborent entre eux et se focus sur une tâche particulière.
👉🏼 Pendant le traitement d’une requête, une business logic est exécutée et l’état de l’application est consultée ou mis à jour. Finalement, une réponse est renvoyée au tiers “client” afin que l’utilisateur puisse avoir un feedback.
Dessiner un schéma de l’architecture de référence 5-tiers.
Cela laisse penser que :
👉🏼 Le tiers client est éloigné des autres tiers. (ils sont connectés par internet)
👉🏼 Les tiers présentation, business et intégration sont proches les uns des autres. (ils se trouvent souvent sur le même processus).
👉🏼 Les tiers présentation, business, intégration et ressources sont souvent connectés par le même réseau. (les appels de intégration et ressources sont en remote, mais cela coûte tjr moins cher que de faire passer des appels par internet.)
En quoi consiste le tiers Client ?
👉🏼 Les composants sont très proches de l’utilisateur. 👉🏼 Les appareils utilisés (ex : laptop) fournissent un temps d’exécution pour nos composants d’application. Parfois c’est fait par un environnement plus haut niveau, comme un navigateur web qui présente nos pages ou run nos fonctions javascript.
En quoi consiste le tiers Présentation ?
👉🏼 Le tiers présentation se trouve du côté serveur ou il met à dispo un point d’entrée.
👉🏼 Les composants de cet tiers traitent les requêtes (ex : HTTP), délègue le travail au tiers business et récoltent les données.
👉🏼 Ils fournissent les données aux vues qui sont renvoyées au tiers client.
Ex :
- génération de pages HTML qui sont traitées par un navigateur du côté client. La page de navigation l’interface utilisateur sont contrôlées par le côté serveur.
- Le tiers client génère des documents JSON qui sont par la suite traité par des composants javascript sur un navigateur. Dans ce cas, la page de navigation et l’interface utilisateur sont en partie maniées depuis le côté client. (ex : single page application).
En quoi consiste le tiers Business ?
👉🏼 Ce tiers est séparé de l’interface utilisateur et n’est concerné que par la business logic.
👉🏼 Le même service peut traiter des requêtes venant de plusieurs channels d’interaction utilisateur.
Ex : sur un site de shopping, un panier peut être utilisé pour un utilisateur mobile et un utilisateur sur ordinateur.
En quoi consiste le tiers intégration ?
👉🏼 Il contient les composants qui font le pont entre la logique business et les bases de données.
👉🏼 Il fournit une couche d’abstraction, ce qui signifie que les services business n’intéragissent pas directement avec les BDD. Ils le font via une application tiers.
En quoi consiste le tiers ressource ?
👉🏼 contient les bases de données + dossiers des serveurs.
👉🏼 contient les systèmes externes qui font partie du système d’informations de l’entreprise.
👉🏼 Y a-t-il des composants d’application dans ce tiers ?
✔ Oui, si de la logique est placée dans la banque de données (ex : procédures dans une base de données relationnelle)
❌ Non, si la logique est placée dans le tiers business.
Expliquer ce qu’il se passe lorsqu’on déploie une application desktop avec une interface utilisateur graphique ou une interface en ligne de commande.
👉🏼 Le code tourne directement sur la machine virtuelle Java.
👉🏼 L’utilisateur recoit un fichier .jar contenant les classes compilées et les ressources.
Il exécute le code en tapant la commande “java -jar application.jar”
👉🏼 Lorsque la commande est exécutée, la JVM se lance, charge les classes et exécute la méthode main.
👉🏼 La combinaison de la JVM et de la librairie standard Java fournit un environnement d’exécution.
Citer au moins 3 serveurs d’applications.
- Wildfly
- JBoss
- Glassfish
- Payara (fork of the Glassfish codebase)
- Apache Tomcat (pas vraiment un serveur d’application JavaEE parce qu’il n’implémente seulement un sous-groupe des API javaEE.
- Apache TomEE (combinaison de Tomcat et OpenEJB/JPA, MyFaces pour remplir l’écart entre la version entière de JavaEE.)
Citer les deux façons de run un serveur d’applications.
👉🏼 via une image Docker.
- Avantages
- On peut démarrer en quelques minutes.
- On peut créer un package et distribuer nos applications en créant des images Docker.
👉🏼 via une version locale du serveur d’applications.
Avantages :
- Cela permet d’utiliser les outils de l’IDE et rnd le cycle de développement plus efficace.
- facile à installer. On n’a qu’à extraire l’archive et la lancer via un script.
À quoi sert un fichier .WAR ?
👉🏼 Un fichier WAR est un fichier utilisé pour distribuer une collection de fichiers JAR, de JSP, de servlets, de classes Java, de fichiers XML, de pages Web statiques) et d’autres ressources constituant une application Web.
👉🏼 Le fichier war peut être généré par les équipes de développement et donné ensuite aux équipes d’opérations qui s’occupent de configurer les serveurs d’applications (ou clusters de serveurs) et de déployer le .war.
👉🏼 Cette manière de faire n’est plus la plus populaire depuis la tendance DevOps, mais elle a d’autres avantages.
À quoi sert un fichier JAR ?
👉🏼 utilisé pour stocker les définitions des classes, ainsi que des métadonnées, constituant l’ensemble d’un programme.
👉🏼 proposés pour les composants business.
- Les composants sont découplés du tiers présentation et peuvent être réutiliser entre différent channels d’interface utilisateur.
- Les composants intéragissent avec les bases de données, les applications existantes et les plateformes de messages.
Ex : Entreprise Java Beans (EJBs) a été développé pour ce but. EJBs sont packagés en fichier .jar.
À quoi sert un fichier .EAR ?
👉🏼 Proposé pour les applications entières.
👉🏼 war + jar rassemblés. Il contient des meta-données.
👉🏼 Beaucoup d’équipes laissent tomber le format EAR au profit du format WAR car il est impossible de lier les EJBs avec le tiers présentation.
Comment déployer le même fichier .WAR dans 3 serveurs d’application ?
https://www.youtube.com/playlist?list=PLfKkysTy70QaWqP7sD6xiqFvLZemVLQw_
Est-ce que Apache Tomcat est un serveur d’applications ?
Tomcat est un serveur Web et un conteneur Pages Servlet / JavaServer.
Il est souvent utilisé en tant que serveur d’applications pour des applications strictement Web, mais n’inclut pas l’ensemble des fonctionnalités qu’un serveur d’applications JavaEE fournit.
Par exemple : les EJBs
Est-ce que le modèle de développement J2EE est un anti-pattern ?
La tendance actuelle est d’intégrer et de livrer de façon continue afin d’avoir un meilleur feedback et tester tout le processus de manière automatisée. De manière générale, il s’agit de livrer un produit de meilleure qualité.
On aime donc plus lier développement et opérations. Cela ne signifie pas que le modèle de développement de JavaEE est mauvais, mais il n’est plus tout à fait à la mode.
Quelle est la différence entre le tiers client et le tiers présentation ?
Le tiers client est ce qui se trouve du côté client comme par exemple le browser, les mobile app, command line tool etc.
Le tiers présentation est la partie serveur qui va communiquer avec le client (servlet), et lui fournir une réponse et des page html/jsp.
Le client demande des choses au tiers présentation, le tiers présentation fournit/affiche ce que le client veut.
La plupart des serveurs d’applications proposent 3 façons de déployer un fichier .war. Décrire comment ces méthodes marchent et leurs bénéfices.
- On peut le faire manuellement depuis la console de notre serveur d’applications. Par exemple sur Payara il suffit d’aller dans le menu application et cliquer sur deploy et choisir notre fichier war.
- Inconvénient : Pas automatisé
- Avantage : Facile d’utilisation.
- On peut aussi faire un script qui s’occupe de faire la même chose de manière automatisée.
- Inconvénient : Très dépendant du serveur utilisé.
- Avantage : Automatisable
- Ou alors, de déposer le .war dans un dossier spécifique. Au lancement du serveur d’applications, le serveur va regarder ce dossier et déployer tout les fichiers .war qui y sont dedans.
- Inconvénient : ll faut redémarrer le serveur.
- Avantage : Automatisable, facile à changer pour un autre serveur
Que signifie l’acronyme “AJAX” et quel est son lien avec le tiers client ?
- Asynchronous Javascript And XML
- Le tiers client peut effectuer des requêtes AJAX pour obtenir des informations du tiers présentation “à la carte et sur demande”.
Donner un exemple d’outli CLI qu’on utilise et dont il est le client d’une application multi-tiers.
- Git
- Heroku
- Docker
Quelle est la différence entre les portées de la requête, de la session et de l’application dans l’API de servlet ?
👉🏼 Request scope : Avec la request scope, on est assuré qu’aucune autre request ne pourra affecter nos objets dans cette request scrope pendant son traitement.
👉🏼 Session scope : est associé à un utilisateur. Lorsqu’un utilisateur visite l’application Web, une session est créée par le conteneur Web. La durée de la session est donc conservée tant que l’utilisateur interagit avec l’application ou lorsque session.invalidate () est appelé.
👉🏼 Application Scope : ou scope global est associée à l’app web. Cette scope est active tant que l’app web est déployée.
What is inversion of control? (IoC)
Dans un framework on instancie pas explicitement et manuellement nos objets. Ils sont managés automatiquement et notre code est appelé au bon moment.
Exemple: notre servlet se fait appelé sa méthode doGet lorsque l’app reçoit une requête HTTP GET.
What is dependency injection?(DI)
Ça peut arriver qu’on aie besoin d’appeler la méthode d’une autre classe dans notre code. Mais comme on manipule des objets managés, et que parfois on peut avoir besoin de changer au runtime les comportements, on ne peut pas se contenter d’un import de package manuel.