# MicroProfile

Der Eclipse MicroProfile Standard ist eine auf Microservices ausgerichtete Spezifikation, die – komplementär und basierend auf der JavaEE – eine Portabilität für Applikationen auf unterschiedlichen MicroProfile Laufzeitumgebungen erreichen will. Wirtschaftlicher Treiber ist die zunehmende Nutzung von Cloud-Computing-Ressourcen durch Anbieter von Services. Angekündigt sind drei Veröffentlichungen pro Jahr.

## Kernelemente

Die Spezifikation übernimmt aus der JavaEE diejenigen Einzelspezifikationen, die für REST und JSON geschrieben wurden. Hinzu kommt noch das Programmiermodell mit CDI. Während eine klassische JavaEE Laufzeitumgebung darauf ausgerichtet ist für mehrere Anwendungen die Querschnittsaufgaben (z. B. Konfiguration, Logging, Monitoring) zu übernehmen, sind bei Microservices viele kleine Laufzeitumgebungen wesentliches Merkmal der Softwarearchitektur. Hier setzen die ergänzenden Spezifikationen von MicroProfile an, um die Querschnittsaufgaben auch in einem solchen Aufbau erfüllen zu können.

## Wichtige APIs

| Name und Abkürzung | Beschreibung | v1.0 | v1.1 | v1.2 | v1.3 | v1.4 | v2.0 | v2.1 | v2.2 | v3.0 | v3.1 | v3.2 | v3.3 |
| Java Platform, Enterprise Edition (JavaEE) | Microprofile basiert auf der genannten JavaEE Version. | 7 | 7 | 7 | 7 | 7 | 8 | 8 | 8 | 8 | 8 | 8 | 8 |
| Contexts and Dependency Injection (CDI) | Java-Standard, welcher die Konfiguration von Modulen abhängig von verschiedenen Zusammenhängen durch Injektion von Abhängigkeiten erlaubt. | 1.2 | 1.2 | 1.2 | 1.2 | 1.2 | 2.0 | 2.0 | 2.0 | 2.0 | 2.0 | 2.0 | 2.0 |
| Java API for RESTful Web Services (JAX-RS) | Java API, das die Verwendung des Software-Architekturstils Representational State Transfer (REST) im Rahmen von Webservices ermöglicht und vereinheitlicht. | 2.0 | 2.0 | 2.0 | 2.0 | 2.0 | 2.1 | 2.1 | 2.1 | 2.1 | 2.1 | 2.1 | 2.1 |
| Java API for JSON Processing (JSON-P) | Java API, das JSON Nachrichten verarbeiten kann. Die Verarbeitung ist Stream basiert, das Java Objekt Modell ähnelt dem XML DOM. | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.1 | 1.1 | 1.1 | 1.1 | 1.1 | 1.1 | 1.1 |
| Java API for JSON Binding (JSON-B) | Java API, das JSON Nachrichten als Standard Schicht an Java Objekte bindet. | nein | nein | nein | nein | nein | ja (1.0.1) | ja (1.0.1) | ja (1.0.1) | ja (1.0.1) | ja (1.0.1) | ja (1.0.1) | ja (1.0.1) |
| Configuration API | Java API zur Ermittlung von Konfigurationen aus unterschiedlichen Quellen. | nein | ja (1.0) | ja (1.0) | ja (1.1) | ja (1.2) | ja (1.3) | ja (1.3) | ja (1.3) | ja (1.3) | ja (1.3) | ja (1.3) | ja (1.4) |
| Common Annotations | Java API, das Annotationen mit gleichartigen semantischen Konzepten für JavaSE und JavaEE spezifiziert. | nein | nein | ja (1.2) | ja (1.2) | ja (1.2) | ja (1.3) | ja (1.3) | ja (1.3) | ja (1.3) | ja (1.3) | ja (1.3) | ja (1.3) |
| Fault Tolerance | Java API, das unterschiedliche Strategien für ein fehlertolerantes Verhalten eines MicroService spezifiziert. | nein | nein | ja (1.0) | ja (1.0) | ja (1.1) | ja (1.1) | ja (1.1) | ja (2.0) | ja (2.0) | ja (2.0) | ja (2.0) | ja (2.1) |
| Health Check | Java API zur Ermittlung des Zustands eines Nodes von einer anderen Maschine aus. Ziel ist primär die automatische Beendigung oder Ersatz des Nodes. Sekundär kann dies auch für eine Überwachung durch menschliche Administratoren dienen. | nein | nein | ja (1.0) | ja (1.0) | ja (1.0) | ja (1.0) | ja (1.0) | ja (1.0) | ja (2.0) | ja (2.1) | ja (2.1) | ja (2.2) |
| Metrics | Java API zur Bereitstellung von Telemetriedaten der MicroProfile Laufzeitumgebung und der eigentlichen Applikation. | nein | nein | ja (1.0) | ja (1.1) | ja (1.1) | ja (1.1) | ja (1.1) | ja (1.1) | ja (2.0) | ja (2.1) | ja (2.2) | ja (2.3) |
| JWT Propagation | Java API zur standardisierten Absicherung von Microservices auf Basis von JSON Web Token(JWT). | nein | nein | ja (1.0) | ja (1.0) | ja (1.1) | ja (1.1) | ja (1.1) | ja (1.1) | ja (1.1) | ja (1.1) | ja (1.1) | ja (1.1) |
| OpenAPI | Java API zur generischen Veröffentlichung der applikationseigenen API Dokumentation. Vorläufer Spezifikation war Swagger. | nein | nein | nein | ja (1.0) | ja (1.0) | ja (1.0) | ja (1.0) | ja (1.1) | ja (1.1) | ja (1.1) | ja (1.1) | ja (1.1) |
| OpenTracing | Java API zur Nachverfolgung (tracing) einer JAX-RS Applikation. | nein | nein | nein | ja (1.0) | ja (1.1) | ja (1.1) | ja (1.2) | ja (1.3) | ja (1.3) | ja (1.3) | ja (1.3) | ja (1.3) |
| Rest Client | Java API zum typsicheren Aufruf eines RESTful Service über http. | nein | nein | nein | ja (1.0) | ja (1.1) | ja (1.1) | ja (1.1) | ja (1.2) | ja (1.3) | ja (1.3) | ja (1.3) | ja (1.4) |

## Implementierungen

| Name | MicroProfile Version | Anmerkung |
| Thorntail 2.6 | 3.2 | |
| Open Liberty 20.0.0.2 | 3.3 | Preview |
| Apache TomEE 7 | 2.0 | |
| Payara Server 5.201 | 3.2 | |
| SmallRye | 3.2 | API, kein Server |
| WildFly 19 | 3.3 | |