Dropwizard als REST-App-Server

Weboberfläche, Monitoring

Anzeige

Um Weboberflächen mittels Dropwizard realisieren zu können, erlaubt das Framework die Nutzung der Template-Engines FreeMarker und Mustache. Für das Rendern einer Webseite mit einer der beiden Engines muss die Ressource eine Instanz einer von der Basisklasse View abgeleiteten eigenen Klasse zurückgeben, die im Konstruktor das zu rendernde Template festlegt. Dabei greift die Anwendung auf die im Template jeweils benutzten Properties entsprechend der Java-Bean-Konventionen in dem von der Ressource zurückgegebenen View-Objekt zu. Das für die Bestellübersicht genutzte FreeMarker-Template sieht wie folgt aus:

<html>
<head>
<title>Order Report</title>
</head>
<body>
<h1>Order Report</h1>
<#if orderReport.amountPerBrand?size == 0>
<p><strong>Derzeit sind keine Bestellungen vorhanden.</strong></p>
<#else>
<p>
<ul>
<#list orderReport.amountPerBrand?keys as brand>
<li>${brand} = ${orderReport.amountPerBrand[brand]} Einheiten</li>
</#list>
</ul>
</#if>
</body>
</html>

Die dazugehörige View-Klasse zeigt das folgende Beispiel:

public class OrderReportView extends View {
private final OrderReport orderReport;

public OrderReportView(OrderReport report) {
super("orderreport.ftl", Charset.forName("UTF-8"));

orderReport = report;
}

public OrderReport getOrderReport() {
return orderReport;
}
}

Auch wenn das Verwenden von Templates nicht mit MVC-Frameworks für die Oberflächenentwicklung vergleichbar ist und es einen Teil der Logik in das Template verlagert, lassen sich damit kleinere bis mittlere Webprojekte realisieren.

Das umfassende Monitoring einer Applikation ist eines der zentralen Features von Dropwizard. Daher unterstützt es nicht nur die bereits angesprochenen Metriken, sondern auch Health-Checks zur Überwachung einzelner Aspekte. Während Metriken nur Messungen darstellen, die letztlich einer Interpretation bedürfen, reduziert ein Health-Check die Zustandsbeschreibung einer Komponenten auf eine binäre Aussage (gesund [healthy] oder nicht gesund [unhealthy]), die bereits bei der Entwicklung formuliert wird und damit eindeutig ist.

Für den Online-Shop ist es beispielsweise sinnvoll, den Zustand der Bestellverwaltung zu überwachen, was mit der Klasse OrderManagementHealthCheck im unten stehenden Codeauszug exemplarisch geschieht. Die Implementierung eines Health-Checks stellt sicher, dass mögliche Ausnahmen während des eigentlichen Checks automatisch auf den Zustand unhealthy abgebildet werden.

public class OrderManagementHealthCheck extends HealthCheck {
private final OrderManagement orderManagement;

public OrderManagementHealthCheck(OrderManagement management) {
orderManagement = management;
}

@Override
protected Result check() throws Exception
{
Result result = Result.healthy("Order management is fine");

if (!orderManagement.isRunning()) {
result = Result.unhealthy("Order management has problems.");
}

return result;
}
}
Anzeige