Christian Kaltepoth ingenit GmbH & Co. KG

„Nachdem die MVC-1.0-Spezifikation bedingt durch ihre turbulente Geschichte länger gebraucht hat als zunächst geplant, steht sie endlich kurz vor ihrer Fertigstellung. Inzwischen sind alle durch den JCP vorgeschriebenen Meilensteine erreicht, sodass in den nächsten Wochen mit der Veröffentlichung der finalen Version gerechnet werden kann. Aber auch die nächsten Schritte sind bereits geplant.“

Die MVC-1.0-Spezifikation hat eine turbulente Geschichte. Die ursprünglich für Java EE 8 geplante Spezifikation wurde Anfang 2017 von Oracle der Community übergeben und seitdem aktiv weiterentwickelt. Inzwischen steht sie kurz vor dem finalen Release. Grund genug, sich die Geschichte von MVC 1.0 und den aktuellen Stand des API einmal genauer anzuschauen.

Die Idee von aktionsbasierten Web-Frameworks ist nicht neu. Schon seit vielen Jahren scheinen besonders die beliebtesten serverbasierten Frameworks diesem Modell zu folgen. Spring MVC, Grails, Struts, Rails und Express basieren auf der einfachen, aber effektiven Idee, den Request/Response-Lebenszyklus ins Zentrum zu rücken und auf unnötige Abstraktionen zu verzichten.

Umso mehr verwunderte es, dass Java EE in diesem Bereich bisher nichts vorzuweisen hatte. Mit JavaServer Faces (JSF) bietet Java EE zwar ein mächtiges und flexibles Web-Framework, mit dem besonders formularbasierte Anwendungen sehr effektiv entwickelt werden können, jedoch ist JSF ein klassischer Vertreter der komponentenorientierten Frameworks, wie Wicket, GWT und Vaadin. An JSF ist sicherlich nichts falsch. Sowohl aktionsbasierte als auch komponentenorientierte Frameworks haben ihre Existenzberechtigung, abhängig von den individuellen Anforderungen des Projekts. Frameworks wie JSF versuchen, möglichst viele technische Details vor dem Entwickler zu verbergen und erlauben ihm, mit Hilfe vorgefertigter Komponenten viele Standardfälle sehr einfach umzusetzen. Obwohl man mit solchen Komponenten schnell zu vorzeigbaren Ergebnissen kommt, schwächeln sie oft bei der Möglichkeit, in Details einzugreifen und speziellere Anwendungsfälle umzusetzen. Im Gegensatz dazu verzichten aktionsbasierte Frameworks auf Abstraktionsschichten und rücken den http-Request/Response-Lebenszyklus in den Vordergrund.

JSR 371

Die Geschichte der MVC-1.0-Spezifikation beginnt mit dem Java EE Community Survey, den Oracle Ende 2015 veröffentlichte, um Feedback für die Roadmap von Java EE 8 einzuholen. Dort fand sich auch die Frage, ob sich die Community zusätzlich zu JSF ein aktionsbasiertes Web-Framework wünschte. Über 60 Prozent der knapp 4 500 Teilnehmer sprachen sich für ein solches leichtgewichtigeres Web-Framework für die nächste Java-EE-Version aus.

Kurz darauf wurde mit JSR 371 ein entsprechender Java Specification Request ins Leben gerufen. Die Expert Group nahm schnell die Arbeit auf und stand direkt zu Beginn vor einer zentralen und wegweisenden Entscheidung. Sollte MVC 1.0 als Bestandteil von Java EE auf anderen Technologien der Plattform, wie JAX-RS und CDI, aufsetzen oder stattdessen ein von Java EE unabhängiges und dadurch potenziell leichtgewichtigeres API definieren? Nach langen, intensiven Diskussionen einigte man sich auf die enge Integration in Java EE. Warum auch sollte MVC 1.0 das Rad neu erfinden, wenn Aspekte wie das Routing, das Binden von Parametern und ein mächtiges Komponentenmodell schon von JAX-RS und CDI bereitgestellt werden?

Die große Enttäuschung kam dann zur JavaOne 2016. Nachdem Oracle die Entwicklung von Java EE 8 fast ein Jahr komplett hat schleifen lassen, wurde auf der Konferenz die aktualisierte Roadmap für Java EE 8 veröffentlicht. Der Plan enthielt einige neue Funktionen, die aus Oracles Sicht wesentlich dafür waren, Java EE für die Cloud fit zu machen. Allerdings wurden auch einige Themen von der Roadmap gestrichen, so auch leider die MVC-1.0-Spezifikation.

Den vollständigen Artikel lesen Sie in der Ausgabe:

Java Magazin 8.19 - "Service Mesh"

Alle Infos zum Heft
579897961MVC 1.0 – das aktionsbasierte Web-Framework für Java EE
X
- Gib Deinen Standort ein -
- or -