Serviceschicht
Diese Seite ist ein Teil der IsyFact-Standards. Alle Inhalte der Seite, insbesondere Texte und Grafiken, sind urheberrechtlich geschützt. Alle urheberrechtlichen Nutzungs- und Verwertungsrechte liegen beim Bundesverwaltungsamt.
Die Nutzung ist unter den Lizenzbedingungen der Creative Commons Namensnennung 4.0 International gestattet.
Die Serviceschicht stellt Services von Backends innerhalb einer Systemlandschaft zur Verfügung. Sie regelt die Autorisierung von Aufrufen, validiert die übergebenen Daten und ruft die entsprechenden fachlichen Operationen des Anwendungskerns auf. Der Aufbau der Serviceschicht sowie ihre Kommunikation mit anderen Schichten ist in folgender Grafik dargestellt.
1. Fachkomponenten
Die Fachkomponenten der Serviceschicht spiegeln die Fachkomponenten aus dem Anwendungskern wider. Sie nehmen die Daten der Anfragen von außen entgegen und stellen die Funktionalität und Daten des Anwendungskerns nach außen hin zur Verfügung.
1.1. Aufgaben einer Fachkomponente
Zu den Aufgaben der Fachkomponenten gehören maßgeblich:
- Autorisierung
-
Bei jeder Anfrage muss die Fachkomponente überprüfen, ob der Aufrufer autorisiert ist, die Service-Operation auszuführen. Hierzu verwenden Backends den Baustein Security.
- Tracing
-
Bei jeder Anfrage muss die Fachkomponente die Korrelations-ID in den Logging-Kontext einfügen. Hierzu verwenden Backends den Baustein Logging.
- Validierung
-
Bei jeder Anfrage muss die Fachkomponente die mitgelieferten Parameter und Transportobjekte auf Korrektheit prüfen. Beispiele hierfür sind das zwingende Vorhandensein bestimmter Parameter oder Transportobjekte sowie die Einhaltung von Datentypen. Hierzu verwenden Backends standardmäßig Bean Validation.
- Transformation
-
Bei jeder autorisierten und validierten Anfrage muss die Fachkomponente die Transportobjekte der Serviceschicht in Geschäftsobjekte des Anwendungskerns umwandeln und umgekehrt. Die Umwandlung kann programmatisch oder über das Produkt MapStruct erfolgen.
- Fehlerbehandlung
-
Fachliche Fehler, die bei der Verarbeitung einer Anfrage in der Serviceschicht oder im Anwendungskern auftreten, müssen von der Fachkomponente an den Aufrufer zurückgegeben werden. Hierzu verwenden Backends den Baustein Fehlerbehandlung.
Im Normalfall ist der Funktionsumfang der Fachkomponenten der Serviceschicht viel geringer als der Funktionsumfang ihrer Entsprechungen im Anwendungskern. Dies liegt darin begründet, dass die Serviceschicht die Funktionalität des Anwendungskerns nutzt, um den Service bereitzustellen, und selbst keinerlei Geschäftslogik beinhaltet.
1.2. Aufbau einer Fachkomponente
Eine Fachkomponente besteht aus einer Service-Fassade und einer Exception-Fassade.
1.2.1. Service-Fassade
Die Service-Fassade kümmert sich darum, eingehende Service-Aufrufe auf interne Aufrufe des Anwendungskerns abzubilden. Transportobjekte der Serviceschicht werden dabei in Geschäftsobjekte des Anwendungskerns umgewandelt. Für die vom Anwendungskern gelieferten Ergebnisse ist eine Transformation in umgekehrter Richtung erforderlich. Dabei führt die Service-Fassade eine Validierung der Aufrufparameter durch.
Die Service-Fassade übernimmt darüber hinaus auch die Autorisierung des Aufrufs. Dazu nutzt sie den Baustein Security.
1.2.2. Exception-Fassade
Die Exception-Fassade ist verantwortlich für die Umwandlung der durch den Anwendungskern oder die Service-Fassade geworfenen Exceptions in Exceptions der Serviceschicht. Für das Ergebnis der Umwandlung ist sicherzustellen, dass entweder Exceptions ohne Stack-Traces oder ihnen entsprechende Transportobjekte zurückgegeben werden. Für die Behandlung und Umwandlung der aufgefangenen Exceptions sollten Log-Einträge erzeugt werden. Dabei ist sicherzustellen, dass zum Zeitpunkt der Erstellung der Log-Einträge eine Korrelations-ID verfügbar ist.
2. Service-Framework
Das Service-Framework definiert die Service-Endpunkte des Backends und stellt diese zur Verfügung. Es wandelt die in der HTTP-Anfrage übertragenen Daten in Transportobjekte um und ruft die entsprechende Fachkomponente auf. Ebenso erledigt es die Umwandlung des Ergebnisses in eine HTTP-Antwort. Zur Definition der Service-Endpunkte wird Spring Web MVC verwendet. Zur Konfiguration der Serviceschicht wird das Spring-Framework genutzt.
Die weiteren Inhalte zum Aufbau, zur Realisierung und zur Nutzung der Serviceschicht befinden sich im Konzept REST sowie den Nutzungsvorgaben REST.
3. Transaktionssteuerung
In der Regel geschieht die Transaktionssteuerung im Anwendungskern. Die Ausnahme bilden Anforderungen, aus denen heraus die Service-Fassade einer Fachkomponente der Serviceschicht eine Transaktion über mehrere Aufrufe des Anwendungskerns hinweg bilden muss. In diesem Fall fällt die Steuerung der Transaktion der Service-Fassade zu, weil es wichtig ist, dass die Fehlerbehandlung in jedem Fall die Transaktion umschließt. Nur so ist gewährleistet, dass auch Fehler, die beim Commit bzw. Rollback entstehen, von der Fehlerbehandlung erfasst werden.
Die Transaktionalität einzelner Service-Operationen wird über Annotationen (@Transactional
) an den Methoden der Service-Fassade konfiguriert.
Eine Sonderstellung nehmen Services ein, die im Fehlerfall keinen Fehler zurückgeben, sondern die Fehler in der Antwortnachricht übermitteln. Der AOP-Transaktionsmanager würde kein Rollback durchführen, da alle Exceptions abgefangen werden, auf die er reagieren könnte. Um auch in diesem Fall ein Rollback der Transaktion zu erzwingen, ist folgender Aufruf durchzuführen:
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();