© Excellent backgrounds/Shutterstock.com
Java Magazin
Skalierbare Java-Webanwendungen in der AWS-Cloud

Mit dem Tomcat in die Wolke


Microservices, Docker und Serverless Architecture waren die dominierenden DevOps-Themen der letzten zwei Jahre. Dennoch darf nicht vergessen werden, dass ein nicht zu unterschätzender Teil der im Einsatz befindlichen Java-Webanwendungen auf einem Tomcat- und Hibernate-Stack basiert und aktuell noch in eigenen Rechenzentren läuft. Viele Entwickler fragen sich: Was muss ich an dieser Art von Anwendungen anpassen, damit sie elastisch in der Cloud betrieben werden können?

Unsere Beispielanwendung [1] ist eine Webapplikation zum Teilen von Fotos. Sie bietet neben einer grafischen Benutzeroberfläche auch ein auf Tokens basierendes REST-API. Natürlich besitzt die Anwendung eine Benutzerverwaltung, damit Nutzer untereinander Fotos teilen können. Jeder Benutzer hat eine Rolle, mit der Zugriffsberechtigungen verknüpft sind. Die einzelnen Fotos werden in Amazon S3 [2] abgelegt und in Alben gruppiert. Zu jedem Foto lassen sich beliebig viele Kommentare speichern. Diese Metadaten werden in einer MySQL-Datenbank über Hibernate-DAOs abgelegt. In der AWS-Cloud nutzen wir für das Aufsetzen und Betreiben einer MySQL-Datenbank den Service Amazon RDS für MySQL [3]. Amazon RDS hat den Vorteil, dass es Entwicklern zeitaufwendige Datenbankverwaltungsaufgaben wie Sicherungen, Software-Patching, Überwachung, Skalierung und Replikation abnimmt. So können Entwickler sich ganz auf die Anwendungsentwicklung konzentrieren. Für das Speichern der Benutzer-Sessions nutzen wir Memcached und Amazon ElastiCache. Amazon ElastiCache ist ein Web Service, mit dem sich ein In-Memory-Datenspeicher oder -Cache einfach in der Cloud bereitstellen, betreiben und skalieren lässt (Abb. 1).

Das Build-Management für das Projekt wird mithilfe von Maven implementiert. Das Build-Ziel ist eine WAR-Datei, die in einen Tomcat-Servlet-Container deployt werden kann. Für die Kommunikation mit Amazon S3 benötigt die Anwendung das AWS-SDK für Java. Das Logging innerhalb der Anwendung wird mit SLF4J implementiert, und für das User Interface (UI) wird die JSF-Implementierung PrimeFaces [4] verwendet. Zusätzlich kommen noch einige Hilfsbibliotheken wie Gson, Jasypt, Jersey und ein Memcached-Session-Manager für Tomcat zum Einsatz, der mit dem AWS-Memcached-Client für die Hochverfügbarkeit genutzt wird. Die Menge der Bibliotheken ist absichtlich überschaubar gehalten, um so wenige Abhängigkeiten wie möglich zu haben.

Alle Funktionalitäten der Anwendung werden durch das Fassaden-Entwurfsmuster gekapselt, da die Anwendun...

Java Magazin
Skalierbare Java-Webanwendungen in der AWS-Cloud

Mit dem Tomcat in die Wolke

Microservices, Docker und Serverless Architecture waren die dominierenden DevOps-Themen der letzten zwei Jahre. Dennoch darf nicht vergessen werden, dass ein nicht zu unterschätzender Teil der im Einsatz befindlichen Java-Webanwendungen auf einem Tomcat- und Hibernate-Stack basiert und aktuell noch in eigenen Rechenzentren läuft. Viele Entwickler fragen sich: Was muss ich an dieser Art von Anwendungen anpassen, damit sie elastisch in der Cloud betrieben werden können?

Dimitrij Zub, Sascha Möllering


Microservices, Docker und Serverless Architecture waren die dominierenden DevOps-Themen der letzten zwei Jahre. Dennoch darf nicht vergessen werden, dass ein nicht zu unterschätzender Teil der im Einsatz befindlichen Java-Webanwendungen auf einem Tomcat- und Hibernate-Stack basiert und aktuell noch in eigenen Rechenzentren läuft. Viele Entwickler fragen sich: Was muss ich an dieser Art von Anwendungen anpassen, damit sie elastisch in der Cloud betrieben werden können?

Unsere Beispielanwendung [1] ist eine Webapplikation zum Teilen von Fotos. Sie bietet neben einer grafischen Benutzeroberfläche auch ein auf Tokens basierendes REST-API. Natürlich besitzt die Anwendung eine Benutzerverwaltung, damit Nutzer untereinander Fotos teilen können. Jeder Benutzer hat eine Rolle, mit der Zugriffsberechtigungen verknüpft sind. Die einzelnen Fotos werden in Amazon S3 [2] abgelegt und in Alben gruppiert. Zu jedem Foto lassen sich beliebig viele Kommentare speichern. Diese Metadaten werden in einer MySQL-Datenbank über Hibernate-DAOs abgelegt. In der AWS-Cloud nutzen wir für das Aufsetzen und Betreiben einer MySQL-Datenbank den Service Amazon RDS für MySQL [3]. Amazon RDS hat den Vorteil, dass es Entwicklern zeitaufwendige Datenbankverwaltungsaufgaben wie Sicherungen, Software-Patching, Überwachung, Skalierung und Replikation abnimmt. So können Entwickler sich ganz auf die Anwendungsentwicklung konzentrieren. Für das Speichern der Benutzer-Sessions nutzen wir Memcached und Amazon ElastiCache. Amazon ElastiCache ist ein Web Service, mit dem sich ein In-Memory-Datenspeicher oder -Cache einfach in der Cloud bereitstellen, betreiben und skalieren lässt (Abb. 1).

Das Build-Management für das Projekt wird mithilfe von Maven implementiert. Das Build-Ziel ist eine WAR-Datei, die in einen Tomcat-Servlet-Container deployt werden kann. Für die Kommunikation mit Amazon S3 benötigt die Anwendung das AWS-SDK für Java. Das Logging innerhalb der Anwendung wird mit SLF4J implementiert, und für das User Interface (UI) wird die JSF-Implementierung PrimeFaces [4] verwendet. Zusätzlich kommen noch einige Hilfsbibliotheken wie Gson, Jasypt, Jersey und ein Memcached-Session-Manager für Tomcat zum Einsatz, der mit dem AWS-Memcached-Client für die Hochverfügbarkeit genutzt wird. Die Menge der Bibliotheken ist absichtlich überschaubar gehalten, um so wenige Abhängigkeiten wie möglich zu haben.

Alle Funktionalitäten der Anwendung werden durch das Fassaden-Entwurfsmuster gekapselt, da die Anwendun...

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang