EnterpriseTales

Über den Wolken: Java EE und die Cloud

Lars Röwekamp und Matthias Weßendorf

Mittlerweile ist es fast ein Jahr her, dass auf der JavaOne in San Francisco die ersten Details über die kommende Java Enterprise Edition verkündet wurden. Nach „Ease of Development“ – Java EE 5 – und „Flexibility“ – Java EE 6 – ist „the Cloud“ das Motto der Stunde. EnterpriseTales wagt einen Blick hinter die Kulissen.

So ungewiss die angedachten Änderungen und Erweiterungen der zukünftigen Java Enterprise Edition Version 7 auch noch sein mochten, eines stand von Anfang an fest: Java EE muss in die Cloud. Dies machte Linda DeMichiel – Spec Lead von Java EE – bei der ersten offiziellen Vorstellung im Rahmen einer JavaOne Keynote im letzten Oktober mehr als deutlich. Doch was bedeutet „the Cloud“ für die Umbrella-Spezifikation JSR 342 [1] und welchen Einfluss hat das Ganze auf die involvierten Technologien, wie zum Beispiel JSF, EJB, CDI und JPA?

Platform as a Service

Während mit Java EE 5 und 6 langsam aber sicher der Service-Gedanke Einzug in die Welt der Java-EE-basierten Anwendungen gehalten hat, soll mit Java EE 7 die gesamte Plattform als Service (PaaS: Platform as a Service) verstanden werden. Dies wiederum schafft die Ausgangsbasis für Cloud-basierte Java-EE-Applikationen. Soweit zur groben Marschrichtung. Aber was bedeutet das im Detail für die Entwicklung bzw. das Deployment Java-EE-basierter Anwendungen und wie spiegelt sich das Ganze in den zugehörigen Spezifikationen wider? Einen ersten Eindruck davon, was sich die Expert Group unter dem PaaS-Modell im Detail vorstellt, liefert das Dokument „The Java EE 7 Platform and Support for the PaaS Model“ [2]. Teile davon finden sich eins zu eins in der Java-EE-7-Spezifikation wieder. Zunächst einmal fällt auf, dass mit folgenden Rollen gleich eine ganze Reihe in die Java-EE-Welt eingeführt werden sollen:

  • Cloud Provider
  • Cloud Account Manager
  • Coud Customer („Tenant“)
  • Application Submitter
  • Application Administrator und
  • End User

Folgendes Szenario aus der Spezifikation erläutert das mögliche Zusammenspiel: Ein Application Component Provider erstellt eine mandantenfähige Anwendung für die Cloud. Der Application Submitter lädt die Anwendung – im Namen eines Cloud Customers (Mandanten) – zu einem Cloud Provider hoch. Möchte nun ein weiterer Mandant die Anwendung nutzen, werden etwaige mandantenspezifische Anpassungen bzw. Konfigurationen durch den Systemadministrator vorgenommen und im Anschluss die Instanz(en) für diesen Mandanten bereitgestellt und gestartet. End User, die zu dem Mandanten gehören oder durch ihn autorisiert wurden, nutzen automatisch die richtige Instanz.

Zusammengefasst wird die Anwendung also einmalig dem Cloud Provider übergeben und kann dann pro Mandant – unter Berücksichtigung etwaiger Service Level Agreements (SLAs) – konfiguriert und als eine oder mehrere mandantenspezifische Instanzen bereitgestellt werden. Wichtig zu verstehen ist, dass zwar die Anwendung an sich mandantenfähig sein darf, eine konkrete Instanz der Anwendung aber grundsätzlich einem Mandanten zugeordnet ist und somit niemals von mehreren Mandanten parallel genutzt werden kann. Der Mandant stellt somit die „Unit of Isolation“ dar. Das entspricht sicherlich nicht jedermanns Vorstellung von einer klassischen Mandantenausprägung einer mandantenfähigen Anwendung und hat daher auch bereits zu einigen Diskussionen in der Java-EE-Welt geführt.

Die Unterscheidung der verschiedenen Mandanten erfolgt mithilfe einer eindeutigen Tenant ID, die vom Java-EE-Container zur Verfügung gestellt wird und von anderen Resource-Managern genutzt werden kann. So kann zum Beispiel ein Servlet-Container mithilfe der Tenant ID einen eingehenden Request an den richtigen Mandanten delegieren. Wird aus einer Anwendung heraus die Information benötigt, für welchen Mandanten diese deployt wurde, kann die aktuelle Tenant ID via JNDI Name java:comp/tenantId erfragt werden.

Geschrieben von
Lars Röwekamp und Matthias Weßendorf
Kommentare

Schreibe einen Kommentar

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