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!
la source
Réponses:
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:
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.
la source
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".
la source
À 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.
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.
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.
Parce que seules les API sont standardisées, pas les implémentations.
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é.
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.
Rien, puisque Java EE inclut Java SE.
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.
la source
Qu'est-ce que Java EE?
Commençons par la définition de la canonicité sur wiki:
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.
la source
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.
la source