Qu'est-ce que Java EE vraiment? [fermé]

100

Java EE a ce «linceul mystérieux» autour de lui pour les jeunes développeurs Java - un que j'essaye de soulever moi-même depuis un certain temps avec peu de succès.

La confusion vient de:

  • Java EE semble être à la fois une bibliothèque et une plate-forme - il existe plusieurs façons "d'obtenir" la bibliothèque Java EE, généralement à partir de quelque chose comme le téléchargement du SDK Java EE d'Oracle. Cependant, la bibliothèque Java EE ne fonctionnera pas, ni ne se compilera, sauf si votre code est exécuté sur ou a accès à un serveur d'applications Java EE (tel que JBoss, GlassFish, Tomcat, etc.). Pourquoi? Les bibliothèques ne peuvent-elles pas fonctionner en dehors de l'environnement du serveur d'applications? Pourquoi ai-je besoin de quelque chose de massif comme JBoss juste pour compiler du code simple pour envoyer un e-mail?

  • Pourquoi les bibliothèques Java EE ne sont-elles pas «standard» et incluses dans le téléchargement normal de la JVM et / ou le SDK?

  • Pourquoi y a-t-il autant d'offres Java EE alors qu'il n'y a en réalité que deux versions principales de Java standard (Oracle JVM / SDK | OpenJDK JVM / JDK)?

  • Que peut-on faire avec Java EE qu'ils ne peuvent pas faire avec Java standard?

  • Que peut-on faire avec Java standard qu'ils ne peuvent pas faire avec Java EE?

  • Quand un développeur décide-t-il qu'il "a besoin" de Java EE?

  • Quand un développeur décide-t-il qu'il n'a pas besoin de Java EE?

  • Pourquoi la version de la bibliothèque Java EE n'est-elle pas synchronisée avec les versions de la bibliothèque Java standard (Java EE 6 vs Java 7)?

Merci de m'aider à nettoyer le fouet!

SnakeDoc
la source
5
Pour info, ce type de question (beaucoup de questions ouvertes dans un seul post) n'est pas considéré comme constructif sur SO. Veuillez lire la FAQ et Comment demander des conseils sur la rédaction de bonnes questions.
Jim Garrison
6
et déjà fermé ... Ce serait bien d'avoir toutes ces réponses au même endroit par des personnes qui l'ont utilisé, au lieu de chercher partout sur le net ....
Daniel Ryan
18
Le SO devient de plus en plus rigide et inutilisable. Il fut un temps où toutes les personnes intelligentes ici essayaient de s'entraider. Désormais, chaque question est close en 5 minutes. C'est juste trop réglementé et inutilisable et frustrant. Tous les administrateurs de suppression de wikipedia sont-ils venus ici?
user573215
34
J'aime votre question et je tapais déjà une réponse, quand un message est apparu, disant que cette question était fermée. L'AFAI peut voir dans ce cas que la règle est le problème. Bien que je vois le but de l'assurance qualité et des règlements en général, je doute que ce genre de règles fonctionne bien sur un site comme celui-ci. Quand j'ai commencé à visiter SO, je n'ai jamais remarqué qu'il y avait un problème sans cette règle. Maintenant SO est tellement sur-réglementé, n'aide plus et est juste frustrant. En ce moment, c'est un site d'archives. Il y a tellement de gens intelligents ici. Discutons de la technologie jusqu'à ce que nos têtes brûlent et ne se bloquent pas.
user573215
6
Oui, j'ai voté pour fermer cette question (alors allez chercher quelques réponses que j'ai faites et votez en bas :)). Cette question pourrait facilement être répondue par Google. Java EE et pourquoi il existe est un sujet très brûlant . C'est comme demander pourquoi Emacs existe ou Silverlight ou Flash ou n'importe quelle bibliothèque de logiciels / application / framework. La question n'est pas une bonne question parce que c'est comme 40 questions, et parce que ce n'est pas vraiment une question de programmation.
Adam Gent

Réponses:

39

Pourquoi les bibliothèques ne peuvent-elles pas fonctionner en dehors de l'environnement du serveur d'applications?

En fait, ils le peuvent. La plupart des bibliothèques peuvent être directement utilisées de manière autonome (dans Java SE) ou incluses dans un .war (pratiquement toujours Tomcat). Certaines parties de Java EE, comme JPA, ont des sections explicites dans leurs spécifications respectives qui indiquent comment elles doivent fonctionner et être utilisées dans Java SE.

En fait, ce n'est pas tant un environnement de serveur d'applications en soi qui est en jeu ici, mais la présence de toutes les autres bibliothèques et le code d'intégration qui les unit.

Pour cette raison, les annotations ne seront analysées qu'une seule fois pour toutes vos classes au lieu de chaque bibliothèque (EJB, JPA, etc.) effectuant cette analyse sur elle-même. Aussi à cause de cela, les annotations CDI peuvent être appliquées aux beans EJB et les gestionnaires d'entités JPA peuvent y être injectés.

Pourquoi ai-je besoin de quelque chose de massif comme JBoss juste pour compiler du code simple pour envoyer un e-mail?

Il y a quelques problèmes avec cette question:

  1. Pour la compilation, vous n'avez besoin que du fichier JAR API, qui est inférieur à 1 Mo pour le profil Web, et un peu plus de 1 Mo pour le profil complet.
  2. Pour courir, vous avez évidemment besoin d'une implémentation, mais «massif» exagère les choses. L'OpenJDK, par exemple, fait environ 75 Mo et TomEE (une implémentation de profil Web contenant la prise en charge de la messagerie) ne fait que 25 Mo. Même GlassFish (une implémentation de profil complet) ne fait que 53 Mo.
  3. Mail fonctionne parfaitement à partir de Java SE (et donc Tomcat) aussi bien en utilisant les autonomes mail.jar et activation.jar .

Pourquoi les bibliothèques Java EE ne sont-elles pas «standard» et incluses dans le téléchargement normal de la JVM et / ou le SDK?

Java EE a été en quelque sorte l'une des premières tentatives de fractionnement du JDK déjà massif en morceaux plus faciles à gérer et à télécharger. Les gens se plaignent déjà que les classes graphiques (AWT, Swing) et les applets sont à l'intérieur du JRE quand tout ce qu'ils font est d'exécuter des commandes sur un serveur headless. Et puis vous souhaitez également inclure toutes les bibliothèques Java EE dans le JDK standard?

Avec la sortie éventuelle de la prise en charge de la modularité, nous aurons juste un petit JRE de base avec de nombreux éléments pouvant être installés séparément sous forme de packages. Peut-être qu'un jour, plusieurs ou même toutes les classes qui composent maintenant Java EE le seront également. Le temps nous le dira.

Pourquoi y a-t-il autant d'offres Java EE alors qu'il n'y a en réalité que deux versions principales de Java standard (Oracle JVM / SDK | OpenJDK JVM / JDK)?

Il existe plus que deux versions de Java SE. Il y a au moins le JDK IBM, le précédent BEA (JRocket, qui est en train de fusionner avec celui d'Oracle / Sun en raison de l'acquisition), diverses autres implémentations open source et une multitude d'implémentations pour une utilisation intégrée.

La raison pour laquelle Java SE et EE sont une spécification est que de nombreux fournisseurs et organisations peuvent la mettre en œuvre, ce qui encourage la concurrence et atténue le risque de blocage des fournisseurs.

Ce n'est vraiment pas différent avec les compilateurs C et C ++, où vous avez de nombreuses offres concurrentes et qui adhèrent toutes à la norme C ++.

Pourquoi la version de la bibliothèque Java EE n'est-elle pas synchronisée avec les versions de la bibliothèque Java standard (Java EE 6 vs Java 7)

Java EE s'appuie sur Java SE, il est donc à la traîne. Les versions correspondent cependant. Java EE 5 nécessite Java SE 5. Java EE 6 nécessite Java SE 6 et ainsi de suite. C'est juste que la plupart du temps, lorsque Java SE X est actuel, Java EE X-1 est actuel.

Arjan Tijms
la source
3
c'est une réponse vraiment bonne et concise aux questions ci-dessus. Il le décompose afin que même un développeur non java ee puisse saisir les concepts. Je vous remercie.
SnakeDoc
12

Voici quelques réponses rapidement rédigées à vos questions ...

  • Pourquoi les bibliothèques JavaEE ne peuvent-elles pas fonctionner sans serveur d'applications? Les services fournis par JavaEE (transactions gérées par conteneurs, injection de dépendances gérées par conteneurs, service de minuterie, etc.) impliquent intrinsèquement des serveurs d'applications compatibles JavaEE (par exemple: GlassFish, JBoss, WebSphere, etc.). Par conséquent, les bibliothèques JavaEE ne servent à rien sans un tel conteneur. " Pourquoi ai-je besoin de quelque chose d'aussi massif que JBoss juste pour compiler du code simple pour envoyer un e-mail? " Il existe des moyens d'envoyer un e-mail sans JavaEE ... Mais si vous voulez le faire à la manière JavaEE, vous avez besoin d'un conteneur JavaEE.

  • Pourquoi les bibliothèques JavaEE ne sont-elles pas incluses avec le téléchargement JavaSE? La même raison pour laquelle de nombreuses bibliothèques ne sont pas incluses: ce serait exagéré. Puisque vous ne pouvez même pas utiliser les bibliothèques JavaEE sans serveur d'applications, pourquoi se donner la peine de les inclure? JavaEE doit être téléchargé si et quand un développeur installe un serveur d'applications et décide d'utiliser JavaEE.

  • Pourquoi y a-t-il autant d'offres JavaEE? Y a-t-il vraiment " tellement " d'offres JavaEE? Si tel est le cas, veuillez en énumérer quelques-uns. Plus précisément, je pense qu'il existe plusieurs implémentations des mêmes API .

  • Que peut-on faire avec JavaEE qu'ils ne peuvent pas faire sans Java standard? Beaucoup. Vous ne pouvez pas compter sur un serveur d'applications pour gérer les transactions ou les contextes de persistance sans JavaEE. Vous ne pouvez pas autoriser un serveur d'applications à gérer l'injection de dépendances EJB sans JavaEE. Vous ne pouvez pas utiliser un service de minuteur géré par une application sans JavaEE. La réponse à cette question devrait rendre la réponse à la première question assez claire ... La plupart des services fournis par JavaEE nécessitent un conteneur JavaEE.

  • Que pouvez-vous faire avec JavaSE que vous ne pouvez pas faire avec JavaEE? Euh ... je ne sais pas.

  • Quand un développeur décide-t-il qu'il a besoin de JavaEE? Cette question est complètement subjective ... Mais si vous avez besoin de l'un des services fournis par JavaEE, vous commencez à y penser. Si vous ne savez pas ce qu'est JavaEE ... vous n'en avez probablement pas besoin.

  • Quand un développeur décide-t-il qu'il n'a pas besoin de JavaEE? Voir la réponse précédente.

  • Pourquoi la version de la bibliothèque JavaEE n'est-elle pas synchronisée avec la version JavaSE? Bonne question. Je ne prétendrai pas savoir comment y répondre ... Mais je suppose que la réponse est: "parce qu'ils ne sont pas synchronisés".

Jahroy
la source
Laissez-le, il n'y a pas de mal ... Je vous suggère simplement de dire que la fonctionnalité JavaEE s'applique principalement aux serveurs / conteneurs plutôt qu'elle ne les nécessite .
entonio
9

À vue d'ensemble, Java EE est une plate-forme, c'est-à-dire quelque chose sur lequel nous pouvons construire.

Dans une perspective plus technique, la norme Java Enterprise Edition définit un ensemble d'API couramment utilisées pour créer des applications d'entreprise. Ces API sont implémentées par des serveurs d'applications - et oui, différents serveurs d'applications sont libres d'utiliser différentes implémentations des API Java EE.

Cependant, la bibliothèque java ee ne fonctionnera pas, ni ne se compilera, sauf si votre code est en cours d'exécution ou a accès à un serveur d'applications Java EE (tel que JBoss, GlassFish, Tomcat, etc.).

Vous compilez avec les API Java EE, vous n'avez donc besoin que de ces API au moment de la compilation. Au moment de l'exécution, vous aurez également besoin d'une implémentation de ces API, c'est-à-dire d'un serveur d'applications.

Pourquoi ai-je besoin de quelque chose de massif comme JBoss juste pour compiler du code simple pour envoyer un e-mail?

Vous ne le faites pas. Cependant, si vous souhaitez utiliser l'API Java EE pour l'envoi de courrier, vous aurez besoin d'une implémentation de cette API au moment de l'exécution. Cela peut être fourni par un serveur d'applications ou fourni par une bibliothèque autonome que vous ajoutez à votre chemin de classe.

Pourquoi les bibliothèques Java EE ne sont-elles pas «standard» et incluses dans le téléchargement normal de la JVM et / ou le SDK?

Parce que seules les API sont standardisées, pas les implémentations.

Pourquoi y a-t-il autant d'offres Java EE

Parce que les gens ne sont pas d'accord sur la bonne façon d'implémenter certaines fonctionnalités. Parce que différents fournisseurs se disputent des parts de marché.

Que peut-on faire avec Java EE qu'ils ne peuvent pas faire avec Java standard?

Puisque les implémentations de Java EE sont construites avec "Java standard": Rien. Cependant, tirer parti des bibliothèques existantes peut vous faire économiser beaucoup d'efforts si vous résolvez des problèmes d'entreprise typiques, et l'utilisation d'une API standardisée peut empêcher le verrouillage des fournisseurs.

Que peut-on faire avec Java standard qu'ils ne peuvent pas faire avec Java EE?

Rien, puisque Java EE inclut Java SE.

Quand un développeur décide-t-il qu'il "a besoin" de Java EE? Quand un développeur décide-t-il qu'il n'a pas besoin de Java EE?

D'une manière générale, les API Java EE résolvent des problèmes typiques et récurrents dans l'informatique d'entreprise. Si vous rencontrez de tels problèmes, il est généralement logique d'utiliser les solutions standard - mais si vous avez des problèmes différents, différentes solutions peuvent être nécessaires. Par exemple, si vous avez besoin de parler à une base de données relationnelle, vous devriez envisager d'utiliser JPA. Mais si vous n'avez pas besoin d'une base de données relationnelle, JPA ne vous aidera pas.

meriton
la source
8

Qu'est-ce que Java EE?

Commençons par la définition de la canonicité sur wiki:

Java Platform, Enterprise Edition ou Java EE est la plate-forme de calcul Java d'entreprise d'Oracle. La plate-forme fournit une API et un environnement d'exécution pour développer et exécuter des logiciels d'entreprise, y compris des services réseau et Web, et d'autres applications réseau à grande échelle, à plusieurs niveaux, évolutives, fiables et sécurisées.

Le point principal ici est que Java EE est une plate-forme qui fournit une API, pas une bibliothèque concrète.

De quoi Java EE a-t-il besoin?

La principale portée de Java EE est les applications basées sur le réseau, contrairement à Java SE orienté vers le développement d'applications de bureau avec un support réseau simple. C'est la principale différence entre eux. Évolutivité, messagerie, transaction, prise en charge de la base de données pour chaque application ... le besoin dans tout cela a augmenté avec l'évolution du réseau. Bien sûr, de nombreuses solutions prêtes à l'emploi fournies par Java SE sont utiles pour le développement de réseau, c'est pourquoi Java EE étend Java SE.

Pourquoi avons-nous besoin de serveurs d'applications pour exécuter notre code?

Pourquoi avons-nous besoin de systèmes d'exploitation? Parce qu'il y a beaucoup de travail pénible avec le matériel que nous devons faire pour rendre l'application encore plus simple. Et sans OS, vous devez le faire encore et encore. Le système d'exploitation simplifié est juste un conteneur programmatique, qui nous fournit un contexte global pour exécuter nos applications.

Et c'est ce que sont les serveurs d'applications. Ils nous permettent d'exécuter nos applications dans leur contexte et nous fournissent de nombreuses fonctionnalités de haut niveau nécessaires pour les applications réseau à forte charge d'entreprise. Et nous ne voulons pas écrire nos propres vélos pour résoudre ces problèmes, nous voulons écrire du code qui satisfera nos besoins commerciaux.

Un autre exemple ici pourrait être JVM pour Java.

Pourquoi Java EE ne contient pas de serveur d'applications intégré?

Difficile à dire pour moi. Je pense que cela a été fait pour plus de flexibilité. Java EE dit ce qu'ils doivent faire, ils décident comment le faire.

Pourquoi JVM n'inclut pas Java EE?

Parce qu'ils s'adressaient à différents secteurs du marché. Java EE a un tas de fonctionnalités qui ne sont pas nécessaires pour les bureaux habituels.

Pourquoi y a-t-il autant d'offres Java EE?

Parce que Java EE décrit uniquement le comportement. Tout le monde peut le mettre en œuvre.

Que peut-on faire avec Java EE qu'ils ne peuvent pas faire avec Java SE?

Pour conquérir Internet. C'est vraiment difficile à faire avec les applets et les sockets Java SE :)

Que peut-on faire avec Java SE qu'ils ne peuvent pas faire avec Java EE?

Comme mentionné ci-dessus, Java EE étend Java SE, donc avec Java EE, vous devriez être en mesure de faire tout ce qui est disponible pour Java SE.

Quand un développeur décide-t-il qu'il "a besoin" de Java EE?

Quand ils ont besoin de la puissance de Java EE. Tout ce qui est mentionné ci-dessus.

Quand un développeur décide-t-il qu'il n'a pas besoin de Java EE?

Lorsqu'ils écrivent une console ou une application de bureau habituelle.

Pourquoi les versions de Java SE et Java EE ne sont-elles pas synchronisées?

Java a toujours eu des problèmes avec ses technologies de nommage et de gestion des versions. Cette situation n'est donc pas une exception.

Maxim Kolesnikov
la source
6

Java EE est tout au sujet du concept de conteneur.
Container est un contexte d'exécution dans lequel va exécuter votre application et qui fournit à ce dernier un ensemble de services. Chaque type de service est défini par une spécification nommée JSR. Par exemple JSR 907, JTA (java transaction Api) qui fournit un moyen standard de gérer les transactions distribuées avec différentes ressources. Donc, pour tirer parti de Java EE, vous devez exécuter votre application dans un conteneur. Les deux principaux sont l'EJB et le conteneur de servlets qui sont tous deux présents sur tout serveur d'applications certifié Java EE.
Il existe généralement de nombreuses implémentations différentes pour un JSR donné, l'implémentation que vous utiliserez dépend du fournisseur de conteneur, mais cela ne vous dérange pas vraiment car vous êtes sûr que le comportement respecte le contrat prédéfini: l'API JSR.

Le but de tout cela est de définir un environnement d'exécution standard pour permettre de packager votre application avec uniquement l'essentiel, id.est. votre entreprise. Cela évite de dépendre d'un ensemble inconnu et varié de bibliothèques tierces que vous auriez à empaqueter et à fournir avec votre application dans le cas contraire, et qui peuvent être des sources de conflit avec d'autres applications sur le serveur. Dans Java EE, vous savez que toutes les exigences non fonctionnelles standard telles que la sécurité, les transactions, l'évolutivité, l'invocation à distance et bien d'autres seront fournies par le conteneur (factorisé pour toutes les applications exécutées à l'intérieur) et il vous suffit de baser votre travail sur son.

Gab
la source
2
Vous pouvez voir un conteneur comme un grand framework, mais Sun (Oracle :() ne fournit que des spécifications et de nombreuses personnes l'implémentent. Alors qu'un framework classique est généralement fourni / implémenté par un seul acteur (springsource et spring par exemple)
Gab
il s'agit d'un doublon, voir stackoverflow.com/questions/106820/what-is-java-ee pour d'autres réponses.
Gab
cette question n'est pas seulement datée, mais fait référence à J2EE vs JEE. Cette question / fil de discussion a suscité une montagne d'informations plus actuelles et éducatives directement liées à JEE et à ce qu'il est en substance. Je dirais que ce fil est beaucoup plus informatif que ce lien daté, et que la qualité des réponses listées ici est supérieure à celles du lien.
SnakeDoc
si quelqu'un savait ce qu'est vraiment java ee, il serait capable de l'expliquer qu'un enfant de 6 ans peut comprendre. plus une «explication» est compliquée, moins ils en savent.
user2914191
@ user2914191 Certains concepts ont besoin d'un arrière-plan qu'un enfant normal de 6 ans n'a pas encore acquis, par exemple l'entropie en physique. Peut-être êtes-vous venu ici par erreur, si c'est le cas, vous pourrez revenir plus tard.
Gab