Question 1

Qu’est-ce que vraiment Java EE ?

Réponse 1

Java EE (c'est-à-dire Enterprise Edition) est un ensemble de spécifications pour le développement et le déploiement d'applications d'entreprise. En général, les applications JEE se réfèrent à des applications écrites en Java et packagées sous forme de fichiers jar, war ou ear exécutables et hébergées sur des serveurs d'applications comme Tomcat, JBoss, IBM Webspehere, etc. Certaines des technologies et API de base de JEE sont Java Servlet, JSP , JSF, JPA, JDBC, JNDI, EJB, RMI ,JMS, JTS, JTA, JavaMail et JAF.

Question 2

Les développeurs full stack sont de plus en plus demandés. Que signifie le terme «développeur Java full stack»?

Réponse 2

As-tu vu des offres d'emploi comme….

"L'équipe de développement est à la recherche d'un développeur Java full stack ……"

Ne sois pas intimidé par les entreprises à la recherche des compétences full stack. Ce blog couvre plusieurs sujets pour augmenter vos compétences en tant que développeur full stack:

Java, JEE, Spring, Hibernate, Maven, Bases de données relationnelles, Bases de données NoSQL, SQL, JavaScript, HTML, CSS, JSON, XML, Unix, UML, ERD pour la modélisation des données, AngularJS, etc.

Certaines sont obligatoires, tandis que les autres sont facultatives et tu dois être suffisamment flexible pour apprendre ces compétences. Développeur full stack est un terme très vague mais qui concerne une expérience dans 2 ou plusieurs des catégories de compétences ci-dessous :

1) Technologies d'interface utilisateur côté client telles que HTML, CSS, JavaScript et jQuery. Développe ces compétences pour apprendre un framework MVW (Model View Whatever) comme AngularJS, ReactJS, etc.

2) Compétences en développement de services Web en utilisant les bases de données Java, JEE, Spring, Hibernate et RDBMS comme le serveur MySQL, SQL et JSON.

3) Compétences d'intégration utilisant des services Web (c.-à-d. RESTful et SOAP), JMS (par exemple Webspeher MQ, ActiveMQ, etc.) avec utilisation des Topics et des files d'attente, ESB (Apache Camel, Mule, Spring Integration), FIX Protocol, etc.

4) Compétences ETL (Extract Transform & Load) et ELT (Extract Load & Transform) comme Spring batch, Apache Spark, Sqoop, Flume, SQL, NoSQL, etc.

5) Compétences en infrastructure comme Unix, AWS, Cloud computing, surveillance des systèmes, etc.

Le diagramme d'architecture de la Question 5 montre que les interfaces utilisateurs sont écrites dans des technologies / frameworks basés sur JavaScript et que les services Web ont été écrits dans des technologies / frameworks basés sur Java, Spring, Hibernate. Le développement de ce genre d’applications nécessite un développeur web full stack. Les systèmes backend peuvent être intégrés aux autres systèmes via la messagerie, les services Web RESTful et ETL.

Voici le chemin pour devenir un développeur full stack :

Développeur Java principal => Applications Web et services Web => Développeur Java full stack.

Question 3

Qu'est-ce que Java EE? Quels sont les technologies et services JEE?

Réponse 3

La plate-forme Java Enterprise Edition ou Java EE est une plate-forme Java fournissant des API et des services d'exécution.


Serveur Web & Serveur d'applications, Conteneur Web & Conteneurs EJB

Lorsque du traitement des demandes basées sur le Web, les demandes sont acheminées via des serveurs Web ou HTTP vers des serveurs d'applications. Un client contactera toujours un serveur Web en premier. Un serveur Web prend les demandes des clients, associe cette demande à un fichier sur le système de fichiers, puis renvoie ce fichier au client. Les serveurs Web ne servent que des ressources statiques comme HTML et CSS.

Si besoin du contenu dynamique dans l’applications, alors il faut déléguer aux servlets et aux JSP qui s'exécutent sur un serveur d'applications. Les serveurs d'applications auront un conteneur Web pour héberger les servlets, les JSP et les Java Beans. Par exemple, Apache Tomcat ou Jetty. Un conteneur Web implémente simplement la spécification JSP et Servlet de JEE.

De plus, certains serveurs d'applications comme WildFly, Websphere Application Server d'IBM, etc. ont un conteneur EJB pour gérer la logique métier, la persistance, la gestion des transactions et la sécurité de manière standard. Avec l'avènement des frameworks Java légers comme Spring et Hibernate, vous n'avez vraiment pas besoin de la surcharge supplémentaire avec les EJB. Vous pouvez obtenir la plupart des fonctionnalités fournies par les EJB via Spring, Hibernate et JavaBeans avec moins de surcharge et moins d’effort d'apprentissage.

Lorsqu'un client fait une demande de JSP ou de servlet, la demande est initialement envoyée au serveur Web. Le serveur Web lit le fichier XML spécial fourni par le serveur d'applications et se rend compte que la demande reçue doit être envoyée au serveur d'applications pour traitement. Le serveur Web gère la demande entrante et fait correspondre cette demande au serveur d'applications configuré pour gérer le servlet ou le JSP donné.

Un servlet peut faire à peu près tout ce que le développeur veut qu'il fasse. En règle générale, un servlet implémente une logique de contrôle. Par exemple, un servlet peut comprendre ce qu'un utilisateur a tapé dans certains champs de texte dans un formulaire Web. Il pourrait alors prendre ces informations et les enregistrer dans une base de données. Bien qu'un servlet puisse interagir directement avec une base de données, ce n'est pas une bonne pratique. Au lieu de cela, les servlets sont censés déléguer à un JavaBean (ou un EJB).

1) Les API de JEE

  • javax.servlet.* pour les Servlet & JSP une abstraction des services du protocole HTTP
  • javax.faces.* pour Java Server Faces (JSF) pour créer des interfaces utilisateur.
  • javax.el (Expression Language) utilisé pour l’association des pages JSF à des composants.
  • javax.enterprise.inject.* contient les annotations d’injections des beans gérés par Contexts and Dependency Injection (CDI).
  • javax.enterprise.context pour CDI
  • javax.ejb.* pour les Enterprise Java Beans (i.e. EJBs)
  • javax.persistence.* pour Java Persistence API (i.e. JPA)
  • javax.transaction.* pour Java Transaction API (JTA)
  • javax.jms.* pour Java Message Service (i.e. JMS) qui sert à envoyer et recevoir les messages à partir d’un Message Oriented Middlewares (MOM).
  • javax.resource.* pour Java EE Connector Architecture (JCA) qui sert à intégrer l’application JEE avec les systèmes externes EIS(Enterprise Integration Systems).

2) Environnement d’exécution

Pour développer et exécuter des applications JEE d’entreprise tels que ear (Enterprise ARchive), war (Web ARchive) ou jar (Java ARchive) déployés sur un serveur d'applications JEE comme le serveur WildFly ayant des conteneurs Web et EJB. Les composants modulaires exécutés sur un serveur d'applications utilisent des annotations et des conventions pour configurer et connecter r tous les composants et modules. Facultativement, les fichiers de description de déploiement basés sur XML peuvent être utilisés pour remplacer les annotations.

Physiquement, c'est un système à 3 niveaux, mais logiquement et fonctionnellement, JEE est un système à plusieurs niveaux ou à N niveaux.



Java EE 7 se concentrait sur HTML 5 avec WebSocket et JSON. WebSocket permet une communication bidirectionnelle avec un hôte distant ce qui permet à des applications Web de maintenir des communications bidirectionnelles avec des composants côté serveur. JSON, ou JavaScript Object Notation, est un format d'échange de données léger basé sur JavaScript et présentant un format de texte indépendant du langage de programmation, moins verbeux que XML. Le but est d'avoir une façon standard d'accomplir les échanges.




Question 4

Peux-tu donner des exemples d'améliorations de la dernière spécification Java EE par rapport aux anciennes spécifications JEE ?

Réponse 4

La nouvelle spécification est basée sur le fait de favoriser la «convention sur la configuration» pour faciliter le développement et introduit des annotations pour remplacer l'utilisation de XML verbeux pour la configuration.

  • CDI assure l'unification des technologies DI (par exemple Guice, Spring, Seam, EJB3 et CDI lui-même) et introduit le cycle de vie des composants pour simplifier le développement de nouvelles fonctionnalités. Tu peux combiner des mappages de cycle de vie Seams avec des MVC Spring et des JPA.
  • Les managed beans ont été introduits pour résoudre les problèmes d'interaction entre les couches de présentation (Servlets, JSP et JSF) et les couches de persistance (EJB 3.0, JTA, JCA et JPA). Il existe de nombreuses formes de beans dans JEE comme JSF Bean, EJB Bean, Spring Bean, Seam Bean, Guice CDI, Entity Beans, etc., mais en fin de compte, tous sont des POJO définis par la spécification «Managed Bean 1.0», et le conteneur fournit des services de base comme la gestion du cycle de vie (@PostConstruct, @PreDestory), l'injection d'une ressource (@Resource) et l'interception avec des intercepteurs (@Interceptors, @ArounInvoke). Manage Bean est un SPI qui a été étendu pour cette utilisation spécifique.
  • L'introduction des Profils & Pruning permet aux architectes techniques et aux développeurs de contrôler les API et les fonctions nécessaires pour une application. Java / JEE est une énorme plateforme et importe de nombreuses API dans les projets. Profils est un concept d'introduction pour limiter le nombre d'API nécessaires pour une application spécifique. Il existe des profils prédéfinis comme Profil Web. Pruning permet de supprimer les API ou les frameworks existants utilisés par une application. JEE 6 avait la capacité de plug-in pour étendre une application Java EE avec d'autres frameworks via des points d'extensibilité et des interfaces de fournisseur de services (SPI).
  • Depuis Servlets 3.0, il n'est pas nécessaire de modifier le fichier descripteur web.xml pour ajouter les bibliothèques tierces comme Struts, Spring, JSF, etc. Servlets 3.0 introduit le descripteur Web Fragments pour spécifier les détails de chaque bibliothèque utilisée par le conteneur.
  • L'injection de dépendances simplifie les EJB.
  • La couche de persistance a été remplacée par JPA.
  • Le traitement par Batch est introduit pour le traitement par lots
  • HTML 5 est intégré dans JEE 7 avec Web Sockets et JSON
  • Utilitaires JEE Concurrency étendant le framework Java SE Executor pour le traitement asynchrone.
  • Framework de validation standardisé sur le Web, EJB, JCA, etc.

Le framework Spring avait comblé certaines des lacunes de Java EE en se concentrant sur le développement centré sur POJO, et a dominé le développement traditionnel de Java, et maintenant JEE a adopté le développement centré sur POJO avec de nombreuses améliorations de manière standard. Alors, prépare-toi à des questions d'entretien telles que ton opinion sur Spring Vs JEE 6 ou JEE 7 pour le développement? Il n'y a pas de bonnes ou de mauvaises réponses, mais posez des questions comme :

La compatibilité descendante est-elle requise ? Notre serveur d'applications prend-il en charge la nouvelle version de Java EE, Puis-je réaliser tout dans Java EE version 7 ce qui peut être réalisé dans Spring ?, Etc. Spring Vs. JEE sera un sujet brûlant en cours pendant un certain temps.

Question 5

Peux-tu décrire l'architecture et les technologies utilisées dans l'un des projets Java EE auxquels tu as récemment participé ?

Réponse 5

Il s'agit d'une question très populaire, et ta réponse entraînera d'autres questions détaillées.


Étape 1: lorsque l'URL est tapée comme https: // myhost: 8080/myapp, les fichiers HTML dynamiques avec le code angularjs et tous les fichiers angular.js, les fichiers CSS bootsrtap et les images sont téléchargés dans le navigateur client.

Étape 2: L'interface utilisateur basée sur angularjs sera une application Internet riche (aka RIA ou Single Page Application ). Avec des onglets et une interface graphique riche , cette interface fera des demandes ajax à https: // myhost: 8080/my-ws pour obtenir des données en JSON (Notation d'objet JavaScript).

La couche «Web Service» dépend du protocole HTTP et les couches «Business» et «DAO» sont faites de POJO (Plain Old Java Objects). Par conséquent,étant indépendant du protocole. C'est là que vous devez mettre la logique métier et la logique d'accès aux données.

Deux fichiers d'archive Web (war) sont déployés dans le même conteneur Web. L'un pour l'interface utilisateur et l'autre consiste à récupérer des données via les services Web RESTful. Les requêtes ajax ne rendront qu'une section de la page unique. Le fichier war de présentation avec HTML, CSS et JavaScript peut être hébergé via CDN (c'est-à-dire Content Delivery Networks), qui est un grand système distribué de serveurs déployés dans plusieurs centres de données sur Internet. L'objectif d'un CDN est de fournir du contenu aux utilisateurs finaux avec une haute disponibilité et des performances élevées.

Remarque : comme moi, beaucoup aiment JavaScript. Aujourd'hui, JavaScript est très populaire pour faire des applications riches et dynamiques sur Internet (RIA). Donc, il vaut vraiment la peine de connaître JavaScript. JavaScript est une technologie côté client (et côté serveur avec node.js) qui est utilisée pour manipuler dynamiquement l'arborescence DOM. Il existe un certain nombre de framework basés sur JavaScript comme jQuery pour rendre votre code plus compatible et plus simple entre les navigateurs. Ce qui est encore plus populaire, ce sont les frameworks MVW (Model View Wwhat) basés sur JavaScript comme angularjs,react, vue.js, backbone.js, ember.js, etc. pour construire l'interface graphique.