Warum können die Bibliotheken außerhalb der Anwendungsserverumgebung nicht funktionieren?
Eigentlich können sie. Die meisten Bibliotheken können direkt eigenständig (in Java SE) oder in einer .war-Datei (praktisch das ist fast immer Tomcat) verwendet werden. Einige Teile von Java EE, wie JPA, enthalten in ihren jeweiligen Spezifikationen explizite Abschnitte, in denen angegeben ist, wie sie in Java SE funktionieren und verwendet werden sollen.
Wenn überhaupt, geht es hier nicht so sehr um eine Anwendungsserverumgebung an sich, sondern um das Vorhandensein aller anderen Bibliotheken und den Integrationscode, der sie vereint.
Aus diesem Grund werden Anmerkungen nur einmal für alle Ihre Klassen gescannt, anstatt für jede Bibliothek (EJB, JPA usw.), die dieses Scannen immer wieder selbst durchführt. Aus diesem Grund können CDI-Annotationen auf EJB-Beans angewendet und JPA-Entitätsmanager in diese eingefügt werden.
Warum brauche ich etwas Massives wie JBoss, um einfachen Code zum Senden einer E-Mail zu kompilieren?
Mit dieser Frage sind einige Dinge falsch:
- Zum Kompilieren benötigen Sie nur die API-JAR, die für das Webprofil unter 1 MB und für das vollständige Profil etwas über 1 MB liegt.
- Zum Ausführen benötigen Sie natürlich eine Implementierung, aber "massiv" übertreibt die Dinge. Das OpenJDK umfasst beispielsweise etwa 75 MB und TomEE (eine Webprofilimplementierung mit E-Mail-Unterstützung) nur 25 MB. Selbst GlassFish (eine vollständige Profilimplementierung) ist nur 53 MB groß.
- Mail funktioniert auch mit Java SE (und damit mit Tomcat) einwandfrei, wenn die eigenständige Datei mail.jar und activity.jar verwendet wird .
Warum sind Java EE-Bibliotheken nicht "Standard" und im regulären JVM-Download und / oder im SDK enthalten?
In gewisser Weise war Java EE einer der ersten Versuche, das bereits massive JDK in Blöcke aufzuteilen, die einfacher zu verwalten und herunterzuladen sind. Die Leute beschweren sich bereits, dass sich die grafischen Klassen (AWT, Swing) und Applets in der JRE befinden, wenn sie nur einige Befehle auf einem Headless-Server ausführen. Und dann möchten Sie auch alle Java EE-Bibliotheken in das Standard-JDK aufnehmen?
Mit der eventuellen Veröffentlichung der Modularitätsunterstützung haben wir nur eine kleine Basis-JRE mit vielen Dingen, die separat als Pakete installiert werden können. Vielleicht werden eines Tages auch viele oder sogar alle Klassen, aus denen Java EE besteht, ein solches Paket sein. Wir werden sehen.
Warum gibt es so viele Java EE-Angebote, wenn es wirklich nur zwei Hauptvarianten von Standard-Java gibt (Oracle JVM / SDK | OpenJDK JVM / JDK)?
Es gibt mehr als nur zwei Varianten von Java SE. Es gibt mindestens das IBM JDK, das vorherige BEA (JRocket, das aufgrund der Übernahme mit Oracle / Sun zusammengeführt wird), verschiedene andere Open Source-Implementierungen und eine Reihe von Implementierungen für die eingebettete Verwendung.
Der Grund dafür, dass Java SE und EE eine Spezifikation sind, besteht darin, dass viele Anbieter und Organisationen sie implementieren können. Dies fördert den Wettbewerb und verringert das Risiko einer Lieferantenbindung.
Bei C- und C ++ - Compilern, bei denen es viele konkurrierende Angebote gibt, die sich alle an den C ++ - Standard halten, ist das wirklich nicht anders.
Warum ist die Version der Java EE-Bibliothek nicht mit den Standardversionen der Java-Bibliothek synchronisiert (Java EE 6 vs. Java 7)?
Java EE baut auf Java SE auf und bleibt daher zurück. Die Versionen stimmen jedoch überein. Java EE 5 erfordert Java SE 5. Java EE 6 erfordert Java SE 6 und so weiter. Es ist nur so, dass Java EE X-1 meistens aktuell ist, wenn Java SE X aktuell ist.