Java EE hat dieses "mysteriöse Leichentuch" für jüngere Java-Entwickler um sich - eines, das ich schon seit einiger Zeit mit wenig Erfolg zu heben versuche.
Verwirrung entsteht durch:
Java EE scheint sowohl eine Bibliothek als auch eine Plattform zu sein. Es gibt mehrere Möglichkeiten, die Java EE-Bibliothek zu "erhalten", normalerweise aus dem Java EE SDK-Download von Oracle. Die Java EE-Bibliothek funktioniert jedoch nur, wenn Ihr Code auf einem Java EE-Anwendungsserver (wie JBoss, GlassFish, Tomcat usw.) ausgeführt wird oder Zugriff darauf hat. Warum? Können die Bibliotheken nicht außerhalb der Anwendungsserverumgebung funktionieren? Warum brauche ich etwas Massives wie JBoss, um einfachen Code zum Senden einer E-Mail zu kompilieren?
Warum sind Java EE-Bibliotheken nicht "Standard" und im regulären JVM-Download und / oder im SDK enthalten?
Warum gibt es so viele Java EE-Angebote, wenn es wirklich nur zwei Hauptvarianten von Standard-Java gibt (Oracle JVM / SDK | OpenJDK JVM / JDK)?
Was kann man mit Java EE machen, was man mit Standard-Java nicht kann?
Was kann man mit Standard-Java machen, was man mit Java EE nicht kann?
Wann entscheidet ein Entwickler, dass er Java EE "benötigt"?
Wann entscheidet ein Entwickler, dass er kein Java EE benötigt?
Warum ist die Version der Java EE-Bibliothek nicht mit den Standardversionen der Java-Bibliothek (Java EE 6 vs. Java 7) synchronisiert?
Danke, dass du mir geholfen hast, die Peitsche zu beseitigen!
quelle
Antworten:
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:
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.
quelle
Hier sind einige schnell zusammengestellte Antworten auf Ihre Fragen ...
Warum können JavaEE-Bibliotheken ohne Anwendungsserver nicht funktionieren? Die von JavaEE bereitgestellten Dienste (Container-verwaltete Transaktionen, Container-verwaltete Abhängigkeitsinjektion, Timer-Dienst usw.) umfassen von Natur aus JavaEE-kompatible Anwendungsserver (z. B. GlassFish, JBoss, WebSphere usw.). Daher erfüllen die JavaEE-Bibliotheken ohne einen solchen Container keinen Zweck. " Warum brauche ich etwas so Massives wie JBoss, um einfachen Code zum Senden einer E-Mail zu kompilieren? " Es gibt Möglichkeiten, eine E-Mail ohne JavaEE zu senden ... Wenn Sie dies jedoch auf JavaEE-Weise tun möchten, benötigen Sie einen JavaEE-Container.
Warum sind JavaEE-Bibliotheken nicht im JavaSE-Download enthalten? Der gleiche Grund, warum viele Bibliotheken nicht enthalten sind: Es wäre übertrieben. Da Sie die JavaEE-Bibliotheken nicht einmal ohne Anwendungsserver verwenden können, sollten Sie sie einbeziehen. JavaEE sollte heruntergeladen werden, wenn ein Entwickler einen Anwendungsserver installiert und sich für die Verwendung von JavaEE entscheidet.
Warum gibt es so viele JavaEE-Angebote? Gibt es wirklich " so viele " JavaEE-Angebote? Wenn ja, listen Sie bitte einige davon auf. Genauer ich glaube , es sind mehrere Implementierungen der gleichen APIs .
Was kann man mit JavaEE machen, was ohne Standard-Java nicht geht? Viele. Sie können sich nicht auf einen Anwendungsserver verlassen, um Transaktionen oder Persistenzkontexte ohne JavaEE zu verwalten. Sie können einem Anwendungsserver nicht erlauben, die EJB-Abhängigkeitsinjektion ohne JavaEE zu verwalten. Sie können einen anwendungsverwalteten Zeitgeberdienst ohne JavaEE nicht verwenden. Die Antwort auf diese Frage sollte die Antwort auf die erste Frage ganz klar machen ... Die meisten von JavaEE bereitgestellten Dienste erfordern einen JavaEE-Container.
Was können Sie mit JavaSE tun, was Sie mit JavaEE nicht tun können? Ähm ... ich weiß es nicht.
Wann entscheidet ein Entwickler, dass er JavaEE benötigt ? Diese Frage ist völlig subjektiv ... Wenn Sie jedoch einen der von JavaEE bereitgestellten Dienste benötigen, beginnen Sie darüber nachzudenken. Wenn Sie nicht wissen, was JavaEE ist, brauchen Sie es wahrscheinlich nicht.
Wann entscheidet ein Entwickler, dass er kein JavaEE benötigt? Siehe vorherige Antwort.
Warum ist die JavaEE-Bibliotheksversion nicht mit der JavaSE-Version synchronisiert? Gute Frage. Ich werde nicht so tun, als wüsste ich, wie ich darauf antworten soll ... Aber ich würde vermuten, dass die Antwort lautet: "Weil sie nicht synchron sind".
quelle
Aus der Vogelperspektive ist Java EE eine Plattform, auf der wir aufbauen können.
Aus technischer Sicht definiert der Java Enterprise Edition-Standard eine Reihe von APIs, die üblicherweise zum Erstellen von Unternehmensanwendungen verwendet werden. Diese APIs werden von Anwendungsservern implementiert - und ja, es steht verschiedenen Anwendungsservern frei, unterschiedliche Implementierungen der Java EE-APIs zu verwenden.
Sie kompilieren mit den Java EE-APIs, sodass Sie diese APIs nur zur Kompilierungszeit benötigen. Zur Laufzeit benötigen Sie auch eine Implementierung dieser APIs, dh einen Anwendungsserver.
Das tust du nicht. Wenn Sie jedoch die Java EE-API zum Senden von E-Mails verwenden möchten, benötigen Sie zur Laufzeit eine Implementierung dieser API. Dies kann von einem Anwendungsserver oder von einer eigenständigen Bibliothek bereitgestellt werden, die Sie Ihrem Klassenpfad hinzufügen.
Weil nur die APIs standardisiert sind, nicht die Implementierungen.
Weil die Leute sich nicht einig sind, wie bestimmte Funktionen richtig implementiert werden sollen. Weil verschiedene Anbieter um Marktanteile konkurrieren.
Da Java EE-Implementierungen mit "Standard Java" erstellt werden: Nichts. Die Nutzung der vorhandenen Bibliotheken kann jedoch viel Aufwand sparen, wenn Sie typische Unternehmensprobleme lösen, und die Verwendung einer standardisierten API kann die Lieferantenbindung verhindern.
Nichts, da Java EE Java SE enthält.
Im Allgemeinen lösen die Java EE-APIs typische, wiederkehrende Probleme im Enterprise Computing. Wenn Sie solche Probleme haben, ist es normalerweise sinnvoll, die Standardlösungen zu verwenden. Wenn Sie jedoch unterschiedliche Probleme haben, sind möglicherweise unterschiedliche Lösungen erforderlich. Wenn Sie beispielsweise mit einer relationalen Datenbank kommunizieren müssen, sollten Sie die Verwendung von JPA in Betracht ziehen. Wenn Sie jedoch keine relationale Datenbank benötigen, hilft Ihnen JPA nicht weiter.
quelle
Was ist Java EE?
Beginnen wir mit der Definition der Kanonizität im Wiki:
Der Hauptpunkt hierbei ist, dass Java EE eine Plattform ist, die eine API bereitstellt, keine konkrete Bibliothek.
Was für Java EE benötigt?
Der Hauptbereich von Java EE sind die netzwerkbasierten Anwendungen, im Gegensatz zu Java SE, das auf die Entwicklung von Desktopanwendungen mit einfacher Netzwerkunterstützung ausgerichtet ist. Dies ist der Hauptunterschied zwischen ihnen. Skalierbarkeit, Messaging, Transaktionen, DB-Unterstützung für jede Anwendung ... Der Bedarf an all dem hat mit der Entwicklung des Netzwerks zugenommen. Natürlich sind viele fertige Lösungen, die Java SE bereitstellt, für die Netzwerkentwicklung nützlich, daher erweitert Java EE Java SE.
Warum benötigen wir Anwendungsserver, um unseren Code auszuführen?
Warum brauchen wir Betriebssysteme? Da die Arbeit mit Hardware sehr schmerzhaft ist, müssen wir noch einfachere Anwendungen erstellen. Und ohne Betriebssystem müssen Sie es immer wieder tun. Das stark vereinfachte Betriebssystem ist nur ein programmatischer Container, der uns einen globalen Kontext für die Ausführung unserer Anwendungen bietet.
Und genau das sind die Anwendungsserver. Sie ermöglichen es uns, unsere Anwendungen in ihrem Kontext auszuführen, und bieten uns eine Vielzahl von Funktionen auf hoher Ebene, die für hochgeladene Unternehmensnetzwerkanwendungen erforderlich sind. Und wir möchten keine eigenen Fahrräder schreiben, um diese Probleme zu lösen. Wir möchten Code schreiben, der unsere Geschäftsanforderungen erfüllt.
Ein weiteres Beispiel könnte JVM für Java sein.
Warum enthält Java EE keinen integrierten App-Server?
Schwer zu sagen für mich. Ich denke, es wurde für mehr Flexibilität gemacht. Java EE sagt, was sie tun sollen, sie entscheiden, wie sie es tun sollen.
Warum enthält JVM kein Java EE?
Weil sie sich an verschiedene Marktsektoren richteten. Java EE verfügt über eine Reihe von Funktionen, die für normale Desktops nicht benötigt werden.
Warum gibt es so viele Java EE-Angebote?
Weil Java EE nur das Verhalten beschreibt. Jeder kann es umsetzen.
Was kann man mit Java EE machen, was man mit Java SE nicht kann?
Das Internet erobern. Es ist wirklich schwer mit Java SE Applets und Sockets zu tun :)
Was kann man mit Java SE machen, was man mit Java EE nicht kann?
Wie oben erwähnt, erweitert Java EE Java SE. Mit Java EE sollten Sie also in der Lage sein, alles zu tun, was für Java SE verfügbar ist.
Wann entscheidet ein Entwickler, dass er Java EE "benötigt"?
Wenn sie die Leistung von Java EE benötigen. Alles was oben erwähnt wurde.
Wann entscheidet ein Entwickler, dass er kein Java EE benötigt?
Wenn sie eine normale Konsole oder Desktop-Anwendung schreiben.
Warum sind Versionen von Java SE und Java EE nicht synchronisiert?
Java hatte immer Probleme mit der Benennung und Versionierung seiner Technologien. Diese Situation ist also keine Ausnahme.
quelle
In Java EE dreht sich alles um das Containerkonzept.
Container ist ein Ausführungskontext, in dem Ihre Anwendung ausgeführt wird und der zuletzt eine Reihe von Diensten bereitstellt. Jede Art von Service wird durch eine Spezifikation namens JSR definiert. Zum Beispiel JSR 907, JTA (Java Transaction Api), die eine Standardmethode zum Verwalten verteilter Transaktionen für verschiedene Ressourcen bieten. Um Java EE nutzen zu können, müssen Sie Ihre Anwendung in einem Container ausführen. Die beiden wichtigsten sind EJB und Servlet-Container, die beide auf jedem Java EE-zertifizierten Anwendungsserver vorhanden sind.
Es gibt im Allgemeinen viele verschiedene Implementierungen für einen bestimmten JSR. Die Implementierung, die Sie verwenden, hängt vom Containeranbieter ab, aber das macht Ihnen nichts aus, da Sie sicher sind, dass das Verhalten den vordefinierten Vertrag respektiert: die JSR-API.
Ziel all dessen ist es, eine Standardausführungsumgebung zu definieren, die es ermöglicht, Ihre Anwendung nur mit den wesentlichen Elementen, id.est, zu verpacken. dein Geschäft. Es wird vermieden, von unbekannten und verschiedenen Bibliotheken von Drittanbietern abhängig zu sein, die Sie sonst verpacken und mit Ihrer App bereitstellen müssten und die möglicherweise zu Konflikten mit anderen Apps auf dem Server führen. In Java EE wissen Sie, dass alle nicht funktionalen Standardanforderungen wie Sicherheit, Transaktion, Skalierbarkeit, Remote-Aufruf und vieles mehr vom Container bereitgestellt werden (faktorisiert für alle darin ausgeführten Apps), und Sie müssen Ihre Arbeit nur auf dessen Basis basieren.
quelle