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:
- 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.
- 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.
- 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.