2010-12-29 8 views
4

Verzeihen Sie mir, wenn die folgende Frage ein wenig vage oder naiv ist. Es wurde durch einige Diskussionen in einem anderen Thread inspiriert, was mein Interesse an Java EE wiederbelebte.Welche Arten von Anwendungen werden mit Java EE im Vergleich zu Java SE besser implementiert?

Im Laufe der Jahre habe ich kleine Stücke davon gehört, und sogar einen Software-Engineering-Kurs, der einige EJB behandelt. Mir ist jedoch klar, dass ich immer noch fast nichts darüber weiß und wofür es verwendet wird.

Also habe ich wirklich zwei Fragen: Erstens, wenn ich einen Webanwendungsserver entwerfe, welche Art von Anforderungen würde mich dazu bringen, Java EE gegen Java SE zu wählen? Hängt dies weitgehend von der Anwendung ab, die ich bereitstellen möchte, oder gibt es grundlegende Aspekte von Java EE, die es für beliebige Anwendungsserver besser machen?

Meine zweite Frage: Was sind einige bekannte Java EE-Anwendungen in der Bereitstellung? Gibt es welche, die Open Source sind?

Vielen Dank.

Antwort

8

Wenn Sie Ihre App nur mit Servlets, JSPs und JDBC implementieren können, benötigen Sie nicht den vollständigen Java EE-Stack. Diese drei umfassen eine Teilmenge des vollständigen Stapels. Der vollständige Java EE-Stack enthält neben Servlets, JSPs und JDBC auch EJBs (verteilte, transaktionale, lebenszyklusverwaltete Komponenten), JPA für Persistenz, JMS für Messaging, JNDI für Namens- und Verzeichnisdienste usw. If Sie benötigen diese Elemente, verwenden Sie auf jeden Fall Java EE und einen vollwertigen App-Server.

Die App-Server-Spezifikation ist die Richtung, die Sun nahm, weil sie einen Markt schaffen wollten, in dem es mehrere Konkurrenten gab, einschließlich sich selbst. Sie sind ganz gut gelungen: Wir haben jetzt WebLogic, WebSphere, JBOSS, Glassfish, OpenEJB, Geronimo und andere App-Server verfügbar.

Aber es ist nicht 100% notwendig. Microsoft .NET beispielsweise hat nichts anderes als den IIS-Webserver und das zugrunde liegende Betriebssystem. Sie gehen davon aus, dass Sie auf Windows und .NET laufen, also versuchen sie nicht, die gleichen Dinge wie Java EE zu abstrahieren.

Wenn Sie Spring zu Java EE bevorzugen, können Sie Unternehmensanwendungen schreiben, ohne etwas anderes als Spring plus Tomcat oder eine andere Servlet/JSP-Engine zu verwenden. Ein vollständiger Java EE App-Server ist in diesem Fall nicht erforderlich.

+1

* Wenn Sie Spring zu Java EE bevorzugen, können Sie Enterprise-Apps schreiben, ohne etwas anderes als Tomcat * zu verwenden - Um dies ein wenig zu verdeutlichen, kommt Tomcat nicht mit Spring out of the box. Wenn Sie Spring bevorzugen, können Sie Enterprise-Anwendungen mit Spring plus Tomcat schreiben, nicht "ohne etwas anderes als Tomcat". Wenn Sie jedoch Java EE für Spring bevorzugen, können Sie auch Unternehmensanwendungen schreiben, ohne etwas anderes als Java EE-Teile und Tomcat zu verwenden;) –

1

Java EE baut eigentlich nur auf SE auf, also würden Sie EE wählen, wenn Sie eine Webanwendung hatten, die eine Bibliothek oder ein Feature benötigte, das in EE existiert. EE ist nur besser, wenn Sie die Extras brauchen. (EE ist eine Gitarre und ein Gehäuse. SE ist nur eine Gitarre.)

2

In der Praxis würde man fast nie eine Web-Anwendung auf reinem Java SE entwickeln. Java SE selbst eignet sich für grafische Desktop-Anwendungen oder textbasierte Befehlszeilenprogramme.

Wenn Sie eine Webanwendung wie die erstellen möchten, die Sie auch mit z. PHP oder RoR, das Wenigste, was Sie verwenden würden, ist ein sogenannter Servlet container. Diese laufen alle über Java SE und geben Ihnen die Servlets und JSP-Seiten von Java EE. Bekannte Beispiele sind Tomcat und Jetty. Die meisten Webanwendungen benötigen jedoch mehr als das, was diese Servlet containers bieten. Fast immer ist ein Web-Framework erforderlich (z.B. JSF, Struts, Wicket, Tapestry, Spring MVC), ein ORM-Framework (typischerweise Hibernate, aber es gibt einige Alternativen wie EclipseLink) und einen Transaktionsmanager (JoTM, JBossTS, Atomikos). Schließlich verwenden die meisten Leute auch gerne einen Container für die Dependency-Injection und eine höhere Ebene des Transaktionsmanagements (e.G. der Kern Spring Container, OpenEJB, Weld).

All dies erfordert jedoch Entwickler ihren eigenen Software-Stack zu erstellen und zu pflegen. All diese verschiedenen Dinge, die ich erwähnt habe, müssen separat heruntergeladen werden, und sie können miteinander kompatibel sein oder auch nicht, da die Abhängigkeiten in verschiedenen Versionen geteilt sind.

Hier kommt Java EE ins Spiel.

Java EE bietet Ihnen ein One-Stop-Framework, das Ihnen alle oben genannten in einem einzigen Paket bietet. Sie können es in einem Paket herunterladen und es in einem Paket aktualisieren. In der Regel arbeiten die Teile besser zusammen als wenn Sie selbst einen Stack bauen.

Sie können dies ein wenig vergleichen mit dem Herunterladen einer vollständigen Linux-Distribution wie Ubuntu, oder bauen Sie Ihr eigenes Linux-System von Grund auf mit nur einem Kernel zu starten.

In früheren Tagen war Java EE (damals J2EE genannt) schwer, teuer, geschlossener Quellcode und Elfenbeinturm und herstellergesteuert. Heutzutage ist Java EE sehr leicht, frei, Open Source und basiert hauptsächlich auf dem, was sich in der Praxis bewährt hat.

Obwohl es für viele Java EE-Implementierungen gilt, dass Sie für das, was Sie nicht verwenden, nicht zahlen (in Bezug auf Speicher oder Startzeit), hat die aktuelle Java EE-Spezifikation ein kleineres "Profil" von Java EE definiert mit Dingen, die die typische Webanwendung nicht benötigt. Dies wird web profile genannt. Für Endbenutzer gibt es keinen wirklich zwingenden Grund, explizit für das Webprofil zu wählen, aber für Leute, die eine Java EE-Implementierung erstellen, ist es ein großer Gewinn, da es viel einfacher zu implementieren ist.

Schließlich sind fast alle Teile von Java EE separat erhältlich, so dass Sie auch Ihren eigenen Stack erstellen können, der komplett aus Java EE Elementen besteht. Dies ist jedoch nicht so häufig, da es sehr wenig Vorteile gegenüber einer bestehenden Java EE-Implementierung gibt.