JSF-Implementierungen

In der Java-EE-Welt ist es üblich, dass es mehrere Implementierungen zu einem JSR gibt. Zwei gute Beispiele sind die Servlet-Spezifikation und EJB/JPA. Tomcat, Jetty und Oracle Weblogic sind nur drei der aktuell verfügbaren Servlet-Implementierungen. Im EJB/JPA-Umfeld fallen sofort Namen wie EclipseLink, Apache OpenJPA oder Hibernate. Bei der JSF-Spezifikation scheint dagegen diese Auswahl nicht vorhanden zu sein. Allerdings nur auf den ersten Blick.

JSF und die Java-EE-Welt

Die ersten JSF-Versionen 1.0 und 1.1 waren unabhängig von einer J2EE-Spezifikation. Die JARs der JSF-Implementierung mussten per Hand innerhalb eines Servlet-Containers installiert oder alternativ mit der Applikation via WEB-INF/lib bereitgestellt wer

den. Eine Änderung dieser Situation trat erst – und dies schlagartig – mit der Version 1.2 ein. JSF 1.2 ist seit Java EE 5 ein fester Bestandteil eines jeden Java-EE-Servers. Gleiches gilt für die im Jahr 2009 fertiggestellte Version 2.0 von JSF. Jeder Java-EE-6-Container muss somit eine JSF-2.0-Implementierung anbieten.

Die Verankerung von JSF innerhalb der Java-EE-Spezifikation bedeutet aber nicht im Umkehrschluss, dass JSF ohne Java EE nicht mehr funktioniert. JSF kann weiterhin mit einem (leichtgewichtigen) Servlet-Container wie Jetty oder Apache Tomcat genutzt werden. Leider benötigt JSF 1.2 zwingend die JSP-2.1-Version. Diese Verbindung bringt gewisse Restriktionen mit sich. So ist man auf dem Tomcat z. B. auf die Version 6 festgelegt. Soweit die Theorie. Apache MyFaces und auch die Sun Mojarra RI bieten allerdings einen Fallback mittels Facelets an. Dadurch kann z.B. auch mit JSF 1.2 der Tomcat 5.5 weiterhin genutzt werden.

Schaut man auf die verfügbaren Java-EE-5-Container, so ergibt sich ein klares und aus der Sicht der Apache MyFaces Community erschreckendes Bild: Fast alle verfügbaren Java-EE-Container nutzen die Sun RI. Eine Ausnahme stellt lediglich Apache Geronimo dar.

Quo vadis Apache MyFaces

Bis zum Erscheinen von JSF 1.2 war Apache MyFaces die meistgenutzte Implementierung. In zahlreichen Projekten und in verschiedenen Containern wurde die Bibliothek mit großem Erfolg eingesetzt. Wie kommt es also, dass der ehemalige Platzhirsch plötzlich durch die Sun RI abgelöst zu sein scheint? Mit dem Erscheinen von JSF 1.2 und der weiteren Verbreitung von Java-EE-5-Servern ist die Notwendigkeit, eine „geeignete“ JSF-Implementierung zu finden, für den Entwickler nicht mehr gegeben. Die JSF-Implementierung ist mittlerweile gemäß Java-EE-Spezifikation (fest) mit dem Container verdrahtet, eine wirkliche Wahlmöglichkeit somit nicht vorhanden. Einige Applikationsserver, z. B. JBoss AS, ermöglichen zwar das Austauschen der mitgelieferten JSF-Implementierung, meist setzen die Entwicklungsteams aber auf die vom Java-EE-Server vorgegebene Variante.

Es stellt sich somit die Frage, warum die meisten Java-EE-Server-Hersteller auf die Sun RI setzen. Die Antwort ist so einfach wie auch niederschmetternd: Das MyFaces-Projekt hat die JSF-Version 1.2 komplett verschlafen. Erst mit über einem Jahr Verspätung gab es eine Version 1.2 in gewohnter Qualität. Nun stellt sich natürlich die Frage, wie es mit dem kommenden JSF-2.0-Standard aussieht? Wird derzeit aktiv an einer MyFaces-2.0-Version gearbeitet und gibt es somit eine Zukunft für MyFaces? Die Antwort ist ein klares Ja. Eine Beta für MyFaces 2 ist bereits verfügbar. MyFaces ist somit wieder im Rennen, wobei die Sun RI – alleine schon durch ihre Integration in etlichen Java-EE-Containern – einen deutlichen Vorsprung haben dürfte.

Mojarra – Die offizielle Referenzimplementierung

Der JSF-1.2-Standard und seine feste Verankerung in die Java-EE-Spezifikation hat der Mojarra RI deutlich geholfen, aus dem Schatten einer „Laborimplementierung“ hervor zu treten. Es wäre aber unfair zu behaupten, dass der einzige Grund für die aktuelle Verbreitung in dem verspäteten Release des Apache-MyFaces-Konkurrenten zu sehen ist. Auch die Codequalität hat sich gegenüber ihren Vorgängern deutlich verbessert und zu einer wesentlich stabileren, produktionstauglichen Version geführt.

Weitere JSF-Implementierungen

Mojarra und MyFaces sind mit Sicherheit die bekanntesten JSF-Implementierungen. Doch es gibt noch weitere. Der WebSphere-Server beispielsweise enthält eine modifizierte Version der JSF 1.1 Sun RI. Eine weitere Implementierung ist innerhalb des Open-Source-Containers Caucho enthalten. Diese bietet ein „Fast-JSF“ an, um der üblichen JSP-Integration zu trotzen. JSF 2.0 wird auch von dem Resin-Container angeboten. Generell ist dieser Container recht interessant, da er sämtliche JSRs des Java EE, z. B. JSR-299 und dessen Wicket-Integration, implementiert.

JSF aus dem Land der aufgehenden Sonne

Eine sehr exotische JSF-Implementierung stellt OperaMasks dar. Diese Implementierung unterstützt den JSF-1.2-Standard und ist stark im asiatischen Markt vertreten. In Asien, vor allem in China, ist Open Source ein sehr angesagter Trend. Kein Wunder, dass auch diese Implementierung inklusive des OperaMasks-Containers als Open-Source-Software angeboten wird.

Ausblick

Der neue JSF-2.0-Standard verspricht nicht nur zahlreiche neue Features, die das Entwickeln mit JSF deutlich vereinfachen, sondern bringt auch wieder Leben in die JSF Community. Ein Indiz dafür stellt die aktive Entwicklung von Apache MyFaces 2.0 dar.

Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.