Java EE vs Spring – Gemeinsamkeiten, Unterschiede und Entscheidungskriterien

Wenn man heute eine Unternehmensanwendung mit Java umsetzen möchte, hat man die Qual der Wahl: Java EE oder Spring? Welches der beiden Frameworks ist besser geeignet? Zusammen mit meiner Kollegin Melanie Müller habe ich mir die beiden Frameworks genauer angeschaut.

Die Technologieauswahl muss erfolgen, bevor die Entwicklung beginnen kann. Um eine Entscheidung treffen zu können, ist zunächst ein Überblick notwendig, welche Funktionalitäten die Frameworks jeweils anbieten. Werfen wir also zunächst einen genaueren Blick auf die beiden Technologien.

Was ist Java EE?
Oracle Java EE Übersicht [1]
Oracle Java EE Übersicht [1]
Java Platform, Enterprise Edition (JEE) – ehemals Java 2 Platform, Enterprise Edition (J2EE) – ist eine Spezifikation einer Softwarearchitektur, die zur Unterstützung von Unternehmensanwendungen konzipiert wurde. Hierbei stehen folgende Funktionen im Fokus:

  • Webanwendungen
  • Transaktionssicherheit
  • Verwaltung von Benutzern und Daten
  • Hochverfügbarkeit
  • Lastsicherheit
  • Korruptionssicherheit
  • Skalierbarkeit
  • klardefinierte Schnittstellen
  • modulare Komponenten

Bestandteile und Erweiterungen der Spezifikation werden innerhalb des Java Community Process (JCP) von verschiedenen Unternehmen definiert. Hierbei durchläuft jede Erweiterung – Java Specification Request (JSR) genannt – einen vorgegebenen Prozess. Am Ende wird der JSR in Form eines Dokuments und einer Referenzimplementierung bereitgestellt.

 

Die API für JEE wird aktuell von Oracle in Form der javax-Packages angeboten. Die Implementierung erfolgt mittels eines JEE konformen Application Servers. Ein Application Server erfüllt diese Voraussetzung, wenn er alle Container und Dienste der JEE Spezifikation anbietet. Vorgeschriebene Container sind beispielsweise der Web Container (Laufzeitumgebung für Servlets und JSP) und der EJB Container (Laufzeitumgebung für EJBs). Der Server bringt u.a. folgende Funktionalitäten mit:

  • Security
  • Transaktionsmanagement
  • Persistenzdienste
  • Namens- und Verzeichnisdienste (JNDI)
  • Kommunikation zwischen den Komponenten
  • Instanziierung von Objekten (CDI)
  • Deploymentunterstützung

Eine Referenzimplementierung wird von Oracle bereitgestellt. Für JEE 8 ist dies beispielsweise der Application Server GlassFish in der Version 5.0.

Oracle Referenzimplementierung Application Server GlassFish [1]
Oracle Referenzimplementierung Application Server GlassFish [1]
Die Komponenten JSP (Java Server Pages), JSF (Java Server Faces), Webservices und Java Servlets regeln die Interaktion zwischen Client und Business Schicht.
Die Kernkomponente von JEE bilden die EJBs (Enterprise Java Beans), welche die Geschäftslogik abbilden.
Der Zugriff auf die Daten wird über JPA (Java Persistence API), JMS (Java Message Service) und JTA (Java Transaction API) geregelt.
Übergreifende Komponenten sind u.a. JTA (Java Transaction API) zur Transaktionsverwaltung, JNDI (Java Naming and Directory Interface) und CDI (Contexts and Dependency Injection).

JEE Komponenten/ Technologien
JEE Komponenten/ Technologien

 Was ist Spring?

Spring ist ein quelloffenes Java Framework. Die Bezeichnung ‚Spring‘ kann in unterschiedlichen Kontexten unterschiedliche Dinge bezeichnen. Entweder bezieht sie sich nur auf das Kern Framework, oder auch auf alle anderen Projekte, die damit zusammenhängen. Meist ist mit ‚Spring‘ das komplette Spring Ökosystem gemeint. [2]

Spring Komponenten/ Technologien
Spring Komponenten/ Technologien

Das Open-Source-Projekt Spring wurde 2003 mit Version 1.0 ins Leben gerufen. Hintergrund der Entstehung war die Frustration über die oft unnötige Komplexität bestehender J2EE Architekturen. Spring als leichtgewichtige Alternative für J2EE gewann 2006 in der Version 2.0 den JAX Innovation Award, ein Preis für die innovativsten Beiträge zum Java-Ökosystem.

Spring basiert auf einem POJO orientierten Programmiermodell und setzt im Kern auf Technologien wie Interfaces und Dependency Injection. Alle von Spring verwalteten Ressourcen werden als Spring Beans bezeichnet.

Spring Framework Module

Das Framework ist streng modular aufgebaut, mit möglichst wenigen Abhängigkeiten zwischen den einzelnen Modulen. Dabei beinhaltet das Kern Framework folgende Module:

Das zentrale Spring Framework Modul ist Spring Core, das einen Dependeny Injection Container mit den grundlegenden Funktionen anbietet. Das Spring Context Modul erweitert die BeanFactory u.a. um Validierung, EJB-Integration und Scheduling. Mithilfe des Spring AOP Moduls werden die Mechanismen der aspektorientierten Programmierung berücksichtigt. [3]

Spring DAO wird für den Datenbankzugriff per JDBC sowie das Transaktionsmanagement genutzt und das Spring ORM Modul dient der Integration von populären Frameworks für objektrelationales Mapping wie z.B. Hibernate. Für die Grundfunktionalitäten von Spring Webanwendungen kann Spring Web eingesetzt werden, während das Spring Web MVC Modul diese erweitert, indem es die Realisierung der Spring Model-View-Controller-Architektur und der REST-Webservices anbietet. [3]

Was gehört noch zu Spring?

Neben den Kernmodulen gehören mittlerweile viele weitere Projekte zum Spring Ökosystem, beispielsweise die in der Abbildung Module aus dem Spring Ökosystem beschriebenen Projekte. Spring Security dient zur Realisierung von Sicherheits-Aspekten und verfolgt einen Secure by Default-Ansatz. Mit Spring Data ist der Zugriff auf relationale und NoSQL-Datenbanken möglich. Microservice Infrastrukturen können mithilfe von Spring Cloud aufgebaut werden und Spring Batch erlaubt es Batch-Jobs mit XML oder Java zu konfigurieren. [4]

Module aus dem Spring Ökosystem
Module aus dem Spring Ökosystem

Spring Boot vereinfacht die Erstellung von Spring Applikationen deutlich, da Anwendungen mit Standardkonfigurationen schnell lauffähig gemacht werden können. Es wird kein Applikationsserver benötigt, stattdessen kann ein embedded Tomcat verwendet werden. Die Anwendung kann somit direkt als JAR Datei ausgeliefert werden.

Java EE vs. Spring – Technologien mit ähnlichen Funktionalitäten

 

Nach dem wir nun genauer betrachtet haben, welche konkreten Technologien JEE und Spring jeweils beinhalten, stellt sich die Frage: Macht es überhaupt Sinn von JEE versus Spring zu sprechen?

Sowohl JEE als auch Spring bieten ein großes Ökosystem, die Unterschiede verschmelzen zusehends. Fast alles, was sich mit JEE umsetzen lässt, lässt sich auch mit Spring umsetzen und umgekehrt. [5] Die Module tragen nur andere Namen, bieten jedoch im Großen und Ganzen dieselben oder zumindest ähnliche Funktionalitäten:

JEE vs Spring
JEE vs Spring

Betrachtet man die beiden Technologien mehr im Detail, zeigen sich jedoch Unterschiede. So ist für JEE beispielsweise immer ein Application Server notwendig, während Spring mit Spring Boot auch mit einem integrierten Webserver verwendet werden kann.

Vor- und Nachteile Spring vs Java EE
Vor- und Nachteile Spring vs Java EE

Insgesamt überwiegen jedoch die Gemeinsamkeiten der beiden Frameworks die Unterschiede. So sind auch die Vorurteile, die sowohl gegenüber JEE als auch gegenüber Spring bestehen, nicht mehr wirklich zeitgemäß:

Nicht mehr zeitgemäße Argumente gegenüber JEE und Spring
Nicht mehr zeitgemäße Argumente gegenüber JEE und Spring

JEE lässt sich heute nicht mehr als schwergewichtig oder übertrieben komplex bezeichnen, wie dies noch bei den J2EE Architekturen der Fall war. Dasselbe gilt für die Vorurteile aus der Spring Welt: War XML Konfiguration bei Spring zu Beginn noch der Standard, ist die Konfiguration einer Spring Anwendung mittlerweile auch direkt über Java Code oder Annotations möglich. Dass JEE oft als de Facto Standard gesehen wird, kann sowohl ein Vorteil, als auch ein Nachteil sein. Denn während JEE als standardisiert gilt, werden neue Funktionalitäten häufig schneller in das Spring Framework integriert.

 

 

Fazit – JEE und Spring verfolgen ähnliche Konzepte

Sowohl Spring als auch JEE sind für Unternehmensanwendungen gedacht und verfolgen ähnliche Konzepte. Beide Technologien basieren auf Dependency Injection als Grundkonzept, sind modular aufgebaut und für Transaktionssicherheit und Hochverfügbarkeit ausgelegt. Außerdem können Spring und JEE Komponenten voneinander verwenden.

Auch Spring selbst widerspricht der Idee, dass Spring und JEE in Konkurrenz stehen. In der Spring Dokumentation ist zu lesen, dass Java EE und Spring sich ergänzen, obwohl viele die beiden Frameworks als Konkurrenten wahrnehmen.

Damit wären wir wieder bei unserer Ausgangsfrage angelangt: Für welches der beiden Frameworks soll man sich im Projekt entscheiden? Mögliche Entscheidungskriterien bei der Wahl zwischen JEE und Spring können dabei die folgenden sein:

  • Wie groß ist das Projekt?
    • Mit Spring Boot lässt sich schnell ein Prototyp oder ein kleines Programm aufsetzen. In einer komplexeren Systemlandschaft hat hingegen JEE durchaus seine Berechtigung durch das gute Zusammenspiel mit dem Application Server.
  • Was sind die Anforderungen des Kunden?
    • Oft werden Server oder Technologien bereits vom Kunden vorgegeben. Dies sollte vorab geklärt werden, da sich hieraus bereits Einschränkungen ergeben können.

 

Mehr zu Java


Quellen:

  1. http://www.oracle.com/technetwork/java/javaee
  2. https://docs.spring.io/spring/docs/current/spring-framework-reference/overview.html
  3. https://www.itwissen.info/Spring-Spring-framework.html
  4. https://spring.io
  5. https://jaxenter.de/von-einem-spring-versus-javaee-zu-reden-ist-faktisch-eigentlich-falsch-20965

 

Zurück zur Übersicht

Kommentar verfassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

*Pflichtfelder

*