AUTOSAR_AP_EXP_SWArchitecture
FIG-0dff9b7a0cecaed9
522 × 266 px
1 Release(s)
Figure 8.10: Variants of the Offer/StopOffer Pattern
SHA-256 Inhalts-Fingerabdruck:
0dff9b7a0cecaed971b234f53589d2575dee57ac0267c85d5a53b2c56b3c1628
✦
KI-generierte Bildanalyse & technische Beschreibung
Modell: gemini-3.8-flash (via agy) · Rezept figure-series@1 · erstellt am 2026-10-08
1. Diagrammtyp & Architektur-Kontext
- Klassifikation: UML-Klassendiagramm (Entwurfsmuster- und Strukturgegenüberstellung).
- Architektur-Kontext: AUTOSAR Adaptive Platform (AP), Teilsystem Communication Management (
ara::com) im Rahmen der serviceorientierten Architektur (SOA). - Technischer Zweck: Gegenüberstellung zweier grundlegender Entwurfsmuster für die Bereitstellung (Offer/StopOffer) und Methoden-Implementierung serverseitiger Service-Instanzen (Service Provider):
- Variante 1 (Skeleton-Pattern): Vererbungsbasierte Bindung über eine abstrakte Middleware-Basisklasse (
ServiceSkeleton). - Variante 2 (Callback-Pattern): Delegations- und funktionsbasierte Bindung über Callback-Registrierung an einer konkreten Service-Entität (
Service).
- Variante 1 (Skeleton-Pattern): Vererbungsbasierte Bindung über eine abstrakte Middleware-Basisklasse (
2. Komponenten, Entitäten & Schnittstellen
Variante 1: Skeleton (Vererbung / Subclassing)
ServiceSkeleton(Abstrakte Klasse / kursiv):- Vom AUTOSAR-Generator aus dem formalen Schnittstellenmodell (ARXML / Service Interface) erzeugte Basisklasse.
- Schnittstellen:
+ Offer(): Result– Veröffentlicht die Service-Instanz über das jeweilige Transport-Binding (z. B. SOME/IP SD, IPC). Liefert typischerweise einara::core::Result<void>.+ ServiceOperation(): void(rein virtuell) – Signatur der im ServiceInterface definierten Methode; erzwingt Override in der abgeleiteten Klasse.+ StopOffer(): void– Zieht die Verfügbarkeit der Service-Instanz im Service Discovery zurück.
ServiceImpl(Konkrete Applikationsklasse):- Realisiert die eigentliche Applikationslogik.
- Beziehung: Generalisierung/Spezialisierung (
ServiceImplerbt vonServiceSkeleton). - Schnittstellen:
+ ServiceOperation(): void– Konkrete Implementierung des Methodenaufrufs.
Variante 2: Callback (Komposition / Delegation)
Service(Konkrete Middleware-Klasse):- Vollständig instanziierbarer Service-Container ohne zwingende Subklassierung.
- Schnittstellen & interne Methoden:
- executeCallback(): T– Private Dispatching-Methode, die bei eintreffenden Client-Aufrufen den hinterlegten Callback ausführt und dessen RückgabetypThandhabt.+ Offer(): Result– Startet das Service Discovery Angebot.+ RegisterCallback(function): void– Injektion des aufzurufenden Handlers (Funktionszeiger, Funktor oderstd::function).+ StopOffer(): void– Beendet das Service-Angebot.
3. Dynamisches Verhalten & Sequenzablauf
- Initialisierung & Verdrahtung:
- Variante 1: Instanziierung des
ServiceImpl-Objekts. Die Methodenzuordnung ist zur Compile-Zeit via VTable fest gebunden. - Variante 2: Instanziierung des
Service-Objekts gefolgt vonRegisterCallback(function)zur Laufzeit, bevor Anfragen verarbeitet werden können.
- Variante 1: Instanziierung des
- Service Announcement (
Offer):- Aufruf von
Offer()signalisiert der Kommunikationslaufzeit (Daemon / Binding) die Betriebsbereitschaft. - Trigger für das Service Discovery (Versand von SOME/IP SD Offer Messages bzw. IPC-Registry-Eintrag).
- Rückmeldung über
Result: Synchroner Erfolg oder Fehlercode (z. B. Service Instance ID bereits vergeben, Network Binding nicht bereit).
- Aufruf von
- Request Dispatching (Eingehende
ServiceOperation):- Eingehender RPC-Request über das Netzwerk/IPC.
- Variante 1: Laufzeitumgebung ruft
ServiceOperation()polymorph direkt auf derServiceImpl-Instanz auf. - Variante 2: Middleware ruft intern
executeCallback()auf, welche die registrierte Callback-Funktion ausführt und das Ergebnis serialisiert zurücksendet.
- Terminierung (
StopOffer):- Aufruf von
StopOffer()initiiert das Senden von StopOffer-Nachrichten im Netzwerk. - Laufende Aufrufe werden geordnet beendet; nachfolgende Client-Requests werden abgewiesen.
- Aufruf von
4. Normative Relevanz & Entwickler-Hinweise
- AUTOSAR AP Standard-Paradigma: In der normativen
ara::com-Spezifikation (SWS Communication Management) ist Variante 1 (Skeleton) das primäre Architekturmuster (class <Service>Skeleton). Die Methodenimplementierung erfolgt über rein virtuelle Methoden (häufig asynchron überara::core::Future). - Verwendung von Variante 2: Findet Einsatz in generischen Adaptern, dynamischen Gateway-Komponenten, Test-Stubs oder Middleware-Abstraktionsschichten, bei denen Vererbungshierarchien vermieden oder Callbacks dynamisch zur Laufzeit ausgetauscht werden sollen.
- Speicher- und Laufzeitimplikationen (Embedded C++):
- Variante 1: VTable-Overhead (ein Pointer pro Instanz), deterministisches Dispatching, minimale Laufzeitkosten, keine dynamischen Speicherallokationen für Funktions-Wrapper.
- Variante 2: Bei Verwendung von
std::functionfürRegisterCallbackdrohen je nach Closure-Größe dynamische Heap-Allokationen (Verletzung von MISRA C++ / AUTOSAR C++14 Richtlinien bezüglich dynamischem Speichermanagement nach der Startphase).
- Nebenläufigkeit & Thread-Safety:
- Bei beiden Varianten erfolgt der Aufruf von
ServiceOperation()bzw. des registrierten Callbacks im Kontext des Worker-Thread-Pools derara::com-Laufzeit. - Entwickler müssen Reentrancy und Thread-Sicherheit bei parallelen Client-Anfragen garantieren.
- Bei beiden Varianten erfolgt der Aufruf von
- Lebenszyklus-Restriktionen:
- Ein Aufruf von
RegisterCallback()(Variante 2) darf nicht nach oder parallel zuOffer()erfolgen, um Race Conditions mit eingehenden Requests zu verhindern. - Zerstörung von
ServiceImplbzw.Serviceerzwingt zwingend den vorherigen Aufruf vonStopOffer(), um Deadlocks oder Use-After-Free-Zustände im Dispatcher zu vermeiden.
- Ein Aufruf von
Zugeordnete Anforderungen
Diese Angaben zeigt der Versions-Explorer.