Was ist Java EE wirklich? [geschlossen]

100

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!

SnakeDoc
quelle
5
Zu Ihrer Information, diese Art von Frage (viele offene Fragen in einem Beitrag) wird in SO nicht als konstruktiv angesehen. Bitte lesen Sie die FAQ und Fragen zum Schreiben guter Fragen.
Jim Garrison
6
und schon geschlossen ... Wäre schön, wenn all diese Antworten von Leuten, die sie benutzt haben, am selben Ort beantwortet würden, anstatt im Internet zu suchen ...
Daniel Ryan
18
SO wird immer starrer und unbrauchbarer. Es gab eine Zeit, in der alle klugen Leute hier versuchten, sich gegenseitig zu helfen. Jetzt wird jede Frage in 5 Minuten geschlossen. Es ist einfach überreguliert und unbrauchbar und frustrierend. Sind alle Administratoren, die Wikipedia löschen, hierher gekommen?
user573215
34
Ich mag Ihre Frage und habe bereits eine Antwort eingegeben, als eine Nachricht auftauchte, dass diese Frage geschlossen wurde. AFAI kann in diesem Fall sehen, dass die Regel das Problem ist. Obwohl ich den Zweck der Qualitätssicherung und der Vorschriften im Allgemeinen sehe, bezweifle ich, dass diese Art von Regeln auf einer solchen Site gut funktionieren. Als ich anfing, SO zu besuchen, habe ich nie bemerkt, dass es ohne diese Regel ein Problem gibt. Jetzt ist SO so überreguliert, hilft nicht mehr und ist nur frustrierend. Im Moment ist es eine Archivseite. Es gibt so viele kluge Leute hier. Lassen Sie uns über Technologie sprechen, bis unsere Köpfe brennen und sich nicht gegenseitig blockieren.
user573215
6
Ja, ich habe dafür gestimmt, diese Frage zu schließen (also finde einige Antworten, die ich getan habe, und stimme ab :)). Diese Frage könnte leicht von Google beantwortet werden. Java EE und warum es existiert, ist ein sehr heißes Thema . Es ist so, als würde man fragen, warum Emacs existiert oder Silverlight oder Flash oder irgendeine Softwarebibliothek / App / Framework. Die Frage ist keine gute Frage, weil es ungefähr 40 Fragen sind und weil es nicht wirklich eine Programmierfrage ist.
Adam Gent

Antworten:

39

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:

  1. 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.
  2. 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ß.
  3. 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.

Arjan Tijms
quelle
3
Dies ist eine wirklich gute und präzise Antwort auf die oben genannten Fragen. Es wird aufgeschlüsselt, sodass auch ein Nicht-Java-Entwickler die Konzepte verstehen kann. Danke dir.
SnakeDoc
12

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

jahroy
quelle
Lassen Sie es, es gibt keinen Schaden ... Ich würde nur vorschlagen , dass Sie sagen , dass JavaEE Funktionalität gilt vor allem für Server / Container anstatt es erfordert sie.
Entonio
9

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.

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.

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.

Warum brauche ich etwas Massives wie JBoss, um einfachen Code zum Senden einer E-Mail zu kompilieren?

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.

Warum sind Java EE-Bibliotheken nicht "Standard" und im regulären JVM-Download und / oder im SDK enthalten?

Weil nur die APIs standardisiert sind, nicht die Implementierungen.

Warum gibt es so viele Java EE-Angebote?

Weil die Leute sich nicht einig sind, wie bestimmte Funktionen richtig implementiert werden sollen. Weil verschiedene Anbieter um Marktanteile konkurrieren.

Was kann man mit Java EE machen, was man mit Standard-Java nicht kann?

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.

Was kann man mit Standard-Java machen, was man mit Java EE nicht kann?

Nichts, da Java EE Java SE enthält.

Wann entscheidet ein Entwickler, dass er Java EE "benötigt"? Wann entscheidet ein Entwickler, dass er kein Java EE benötigt?

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.

Meriton
quelle
8

Was ist Java EE?

Beginnen wir mit der Definition der Kanonizität im Wiki:

Java Platform, Enterprise Edition oder Java EE ist die Enterprise Java Computing-Plattform von Oracle. Die Plattform bietet eine API- und Laufzeitumgebung für die Entwicklung und Ausführung von Unternehmenssoftware, einschließlich Netzwerk- und Webdiensten sowie anderer umfangreicher, mehrschichtiger, skalierbarer, zuverlässiger und sicherer Netzwerkanwendungen.

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.

Maxim Kolesnikov
quelle
6

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.

Gab
quelle
2
Sie können einen Container als großes Framework sehen, aber Sun (Oracle :() bietet nur Spezifikationen und viele Leute implementieren diese. Während ein klassisches Framework im Allgemeinen nur von einem Akteur bereitgestellt / implementiert wird (z. B. Springsource und Spring)
Gab
dies ist ein Duplikat finden stackoverflow.com/questions/106820/what-is-java-ee für andere anwsers.
Gab
Diese Frage ist nicht nur datiert, sondern bezieht sich auf J2EE vs JEE. Diese Frage / dieser Thread hat einen Berg aktuellerer und lehrreicher Informationen ausgelöst, die sich direkt auf JEE und dessen Inhalt beziehen. Ich würde sagen, dieser Thread ist viel informativer als dieser datierte Link, und die Qualität der hier aufgeführten Antworten ist denen des Links überlegen.
SnakeDoc
Wenn jemand wüsste, was Java EE wirklich ist, könnte er es erklären, was ein 6-Jähriger verstehen kann. Je komplizierter eine "Erklärung" ist, desto weniger wissen sie darüber.
user2914191
@ user2914191 Einige Konzepte benötigen einen Hintergrund, den ein normales 6-jähriges Kind noch nicht erhalten hat, zum Beispiel Entropie in der Physik. Vielleicht sind Sie versehentlich hierher gekommen, wenn ja, kommen Sie vielleicht später wieder.
Gab