UML bietet einen Erweiterungsmechanismus namens Profile, um UML-Modellen bestimmte Semantiken und zusätzliche Eigenschaften hinzuzufügen. Dieser Artikel zeigt, wie UML-Profile in Enterprise Architect eingesetzt werden können und wie profilierte Modelle anschließend mit der EA-Bridge am Beispiel der Codegenerierung weiterverarbeitet werden können. Eclipse ist 2026 keine junge Technologie mehr, aber in der Automobil- und Embedded-Industrie nach wie vor weit verbreitet — und für Teams, die bereits auf dem Eclipse-Ökosystem aufbauen, bleibt der hier beschriebene Ansatz der sauberste Weg.
UML ist eine großartige Sprache zur Beschreibung von Softwaresystemen, aber plain UML-Konzepte reichen selten aus, um domänenspezifische Aspekte auszudrücken. Ja, es gibt Tools und Frameworks, mit denen sich domänenspezifische Sprachen leicht definieren lassen – aber vielleicht ist das Tooling auf die Verwendung von Enterprise Architect festgelegt. Wir begegnen häufig Situationen, in denen Mikrocontroller-Software mit UML modelliert wird und es schlicht nicht möglich ist, einem einfachen UML-Element mitzuteilen, dass es einen OS-Task repräsentiert, der durch ein Ereignis mit einer bestimmten Zyklusperiode ausgelöst wird. Wenn wir UML-Klassen zur Darstellung von Tasks verwenden und außerdem einen Code-Generator einsetzen möchten, der Code für diese Tasks erzeugt – woher soll der Generator dann wissen, welche Klasse einen OS-Task repräsentiert und welche etwas anderes?
Glücklicherweise bietet UML einen Erweiterungsmechanismus über Profile, mit dem sich Stereotypen und sogar zusätzliche Eigenschaften definieren lassen, um Elementen eine bestimmte Semantik zuzuweisen. Das folgende Beispiel zeigt ein Modell, in dem Klassen OS-Tasks und Signale zyklische Events darstellen, die einen OS-Task auslösen. Jedes Element trägt einen angewandten Stereotyp, sodass die Bedeutung explizit ist. Zusätzliche Eigenschaften sind als Tagged Values dieser Stereotypen modelliert, z. B. eine Periode für zyklische Events oder eine Referenz auf den OS-Task, der durch das Event ausgelöst wird. Mit diesen zusätzlichen Informationen kann ein Code-Generator entscheiden, wie er Code für jedes Modellelement generiert.

UML-Profil. Der folgende Screenshot zeigt das Profil OS, das die Stereotypen Task (anwendbar auf UML-Klassen) und CyclicEvent (anwendbar auf UML-Signale) definiert. Vordefinierte Tagged Values wie period und triggers sind als Attribute oder Referenzen des Stereotyps modelliert.

Das EA-User-Guide erklärt im Detail, wie UML-Profile in EA-Modellen definiert und verwendet werden.
Profilierte UML-Modelle mit der Eclipse-basierten EA-Bridge laden
Dem Ansatz aus diesem Artikel folgend, verwenden wir die Eclipse-basierte EA-Bridge, um Code aus EA-Modellen zu generieren. Ohne UML-Profil-Unterstützung war es nur möglich, das Modell ohne Stereotypen mit der EA-Bridge zu öffnen, weil das Profil nicht verfügbar war. Das Ergebnis ist im nächsten Screenshot zu sehen. Es wurden Warnungen ausgegeben, die darauf hinwiesen, dass UML-Profile nicht gefunden wurden. Infolgedessen ist die EA-Bridge nicht in der Lage, Tagged Values mit UML-Konzepten darzustellen, weshalb stattdessen allgemeine Annotationen des zugrundeliegenden EMF-Frameworks verwendet wurden. Die Verwendung von Annotationen stellt nur sicher, dass keine Daten verloren gehen, ermöglicht aber keinem Code-Generator den Zugriff auf die Daten auf UML-konforme Weise. Insbesondere wird die Beziehung zwischen Events und Tasks (Tagged Value triggers) nur als ID geladen und löst das referenzierte Modellelement nicht auf.

Mit UML-Profil-Unterstützung ist es möglich, UML-Profile zu laden, die in den (XML-)Formaten spezifiziert sind, die Enterprise Architect verarbeitet. UML-Profile werden an den meisten Orten gesucht, die EA unterstützt, insbesondere aus dem EA-Modell selbst sowie von den Standard- und konfigurierten Speicherorten im Dateisystem. Der folgende Screenshot zeigt den Präferenz-Dialog der EA-Bridge in Eclipse mit den Optionen zu UML-Profilen. Dies deckt fast alle Speicherorte ab, die der Benutzer in EA konfigurieren kann. Es deckt jedoch z. B. keine UML-Profile ab, die von EA-Add-ins bereitgestellt werden. Um diese in der EA-Bridge zu unterstützen, können benutzerdefinierte Speicherorte angegeben werden.

Der folgende Screenshot zeigt wieder das obige Beispiel, diesmal mit aktiver UML-Profil-Unterstützung. Man sieht, dass Stereotypen angewendet werden und dass Tagged Values UML-konform instanziiert werden (dargestellt in doppelten Winkelklammern wie <<Task>>). Dies ist möglich, weil das UML-Profil als Teil einer MDG-Technologie in einem Unterordner des Home-Verzeichnisses des Benutzers gefunden wurde. Bitte beachten: Der Name der MDG-Technologiedatei ist osMDGTech.xml. Die zusätzliche Dateiendung .profile.uml ist notwendig, um Eclipse UML anzuzeigen, dass die Datei ein UML-Profil enthält.
Die Tagged Values des ausgewählten Modellelements UrgentTrigger werden in der Properties-Ansicht aufgelistet, gruppiert nach dem Stereotyp Cyclic Event. Der Tagged Value Triggers löst nun wie gewünscht den Task UrgentTask auf.

Codegenerierung für profilierte UML-Modelle
Ein beliebter Anwendungsfall für die EA-Bridge ist ihre Integration mit Code-Generatoren. Wir verwenden typischerweise Xtend für die Codegenerierung, wie bereits in diesem Artikel erläutert. Der letzte Screenshot zeigt ein solches Code-Generator-Snippet, das auch mit der EA-Bridge aus dem Eclipse Marketplace verwendet werden kann. Operationen, die mit @EACodegen annotiert sind, werden für Modellelemente aufgerufen, die als Parametertypen verwendet werden, wie in unserem Fall ein Signal. Das zurückgegebene Ergebnis dieser Operation wird als Datei “<element name>.<ext>” gespeichert, wobei ext die Dateiendung ist, die in der @EACodegen-Annotation angegeben ist; im Screenshot UrgentTrigger.h.

Der Zugriff auf Stereotyp-Tagged Values in Eclipse-UML-Modellen ist recht einfach, wie im Editor hervorgehoben. Die Funktion <element>.getAppliedStereotype("OS::CyclicEvent") kann verwendet werden, um zu prüfen, ob ein bestimmter Stereotyp angewendet wird – wenn ja, können wir spezifischen Code für UML-Signale generieren, die zyklische Events darstellen. Die Funktion <element>.getValue(stereotype, "period") kann dann verwendet werden, um auf seine Tagged Values zuzugreifen. Es ist sogar möglich, Querverweise von einem stereotypisierten Element auf ein anderes aufzulösen, z. B. um den ausgelösten Task für ein Event zu ermitteln: <element>.getValue(stereotype, "triggers").base as Class (da getValue ein Object zurückgibt, muss das Ergebnis explizit gecastet werden).
Bitte denken Sie daran, dass das Projekt „EA-Bridge Live Codegen Example" wirklich nur ein Beispiel mit rudimentärer Fehlerbehandlung ist. Es ist nützlich, um schnell mit einem Code-generierenden Prototypen zu beginnen, ohne eine Runtime-Instanz zu starten. Wenn Sie ernsthaft einen Code-Generator erstellen möchten, sollten Sie das innerhalb eines separaten Eclipse-Plugins tun, einen Builder oder eine Kontextmenü-Aktion registrieren und ihn innerhalb einer Eclipse-Runtime-Instanz starten.
Einen produktiven Einsatz dieses Ansatzes zeigt das KOSTAL-Projekt: Der Automobilzulieferer modelliert seine AUTOSAR-Architektur mit einer UML-basierten Methodik in Enterprise Architect, bei der domänenspezifische Stereotypen die Semantik der Modellelemente festlegen. Die Eclipse-basierte EA-Bridge lud die profilierten Modelle, kundenspezifische Generatoren verarbeiteten die Stereotypen-Informationen. Referenz KOSTAL →
Die neue Generation: CLI-Werkzeug und VS Code Extension
Seit 2024 gibt es eine neue Generation der EA-Bridge: ein Rust-basierter Kern als CLI-Werkzeug, ergänzt um eine VS Code Extension als Oberfläche. Stereotypen und Tagged Values gehen direkt in das exportierte JSON-Modell ein und stehen für Abfragen bereit, ganz ohne Eclipse-Setup oder MDG-Konfiguration. Wer heute neu mit profilbasierter Codegenerierung aus EA-Modellen beginnt, greift besser zu diesem Ansatz. Der hier beschriebene Eclipse-Ansatz bleibt für Teams valide, die bereits auf einer Eclipse-Toolchain aufbauen.
EA Bridge →
Zusammenfassung
UML-Profile sind sehr nützlich, um benutzerdefinierte, z. B. domänenspezifische Informationen zu EA-Modellen hinzuzufügen. Die Eclipse-basierte EA-Bridge findet und verwendet UML-Profile, die für EA spezifiziert sind, beim Laden von EA-Modellen automatisch. Dies ermöglicht den Zugriff auf die zusätzlichen Informationen auf UML-konforme Weise, was die Implementierung von Code-Generatoren erheblich vereinfacht.
Custom Tools bei itemis — Maßgeschneiderte Werkzeuge für Ihre modellbasierte Entwicklung: Custom Tool Development →