CMS, CoreMedia, Hardware- und Softwareentwicklung
Schreibe einen Kommentar

CoreMedia Cartridge für AndroMDA

CoreMedia MDA Ansatz

Herz eines jeden CoreMedia-CMS-Projekts ist das Dokumentenmodell. Das ist vergleichbar mit Domänenmodell einer fachlichen Anwendung. Im Unterschied dazu wird im Dokumentenmodell die Struktur des Contents beschrieben. Es wird definiert, welche Dokumenttypen es gibt (z.B. Teaser oder Bild), welche Eigenschaften diese haben (z.B. Überschrift, Text oder weitere) und welche Beziehungen es zwischen den Dokumenttypen gibt (z.B. ein Teaser hat ein Teaserbild). Neben den bereits erwähnten Beziehungen zwischen Dokumenttypen(Assoziationen), gibt es die Vererbung von Dokumenttypen (z.B. ein Teaser ist ein Untertyp von Content).

Fachliche Beschreibung des Contents am Beispiel einer Teaserseite (Landing Page)

In unserem gewählten Beispiel gibt es 3 konkrete Klassen: eine Seite, einen Teaser und ein Bild. Der Aufbau und das Layout ist in Abbildung 1 dargestellt. Die Seite, aus inhaltlicher Sicht, ist der weiße Bereich in der Mitte. Linke Spalte, Top- und Fußbereich werden hier in diesem Beispiel nicht betrachtet.

Abbildung 1 Layout Teaserseite

In Abbildung 2 ist die fachliche Struktur des Seitenaufbaus dargestellt. Wir unterschieden dabei in zwei Typen: Contenttypen und verlinkbare Typen. Wobei die Contenttypen auch eine Untergruppe der verlinkbaren Typen sind. Damit sind alle konkreten Klassen (Bild, Teaser und Seite) verlinkbar und ich kann Links darauf bauen. Die Links haben einen dargestellten Text und ggf. eine Beschreibung.

Die Seite stellt den Rahmen für die Inhalte bereit. Sie kann auf eine Elternseite verlinken. Dies wird z.B. für die Navigation verwendet. Des Weiteren werden die verschiedenen Inhalte mit der Seite verknüpft. In unserem Beispiel sind das 1 Bild (Top-Teaser oder Emotional) und 3 einspaltige Teaser. Ein Teaser kann wiederum auch auf ein Bild verlinken, das Teaserbild. Ein Teaser hat normalerweise auch noch einen „mehr“-Link zur Detailseite und ggf. Links zu verwandten Dokumenten.

Abbildung 2: fachliche Struktur des Dokumentenmodells

CoreMedia Cartridge

Die CoreMedia Cartridge basiert auf dem MDA-Framework AndroMDA und generiert aus den Modellen Komponenten für das CoreMedia CMS. Für einfache CMS-Systeme (wie im Beispiel) kann damit ein komplettes CMS aufgebaut werden, ohne eine Zeile Code zu schreiben (mit Ausnahme CSS). Für komplexere CMS-Systeme (der Normalfall)  stellt der generierte Code einen guten Rahmen für manuelle Entwicklung dar. Anhand des Teasers soll nun der Aufbau und die Funktionsweise der CoreMedia Cartridge erläutert werden.

Das fachliche Modell (siehe Abbildung 2) ist für die modellgetriebene Softwareentwicklung nicht detailliert genug. Es muss in ein technisches Dokumentenmodell überführt werden. In Abbildung 3 ist ein Auszug (der Teaser) aus dem technischen Dokumentenmodell dargestellt. Durch Stereotypen gruppiert man Komponenten, die durch ihre Aufgabe in der Architektur zusammengehören (z.B. Entity, Service, ValueObject). In unserm Fall beschreiben die Klassen des Dokumentenmodells die Struktur des Contents im CoreMedia CMS. Sie erhalten den Stereotyp «DocType». Die zugehörigen Attribute erhalten den Stereotyp «DocTypeAttribute».

Abbildung 3: Auszug aus dem technischen Dokumentenmodell

Das fertige Modell wird als XMI exportiert. Dieses wird von AndroMDA geladen und validiert. Für jedes Element aus dem Modell wird ein Metaobjekt durch das MOF[1] Repository erzeugt. Die Klassen der Objekte sind Teile des Metamodells der UML. In Abbildung 5 ist ein Auszug daraus zu sehen. Dieser Metaobjekt-Graph wird Abstract Syntax Tree (AST) genannt. In Abbildung 4 ist er am vereinfachten Beispiel des Teasers zu sehen.

Abbildung 4: Abstract Syntax Tree

Abbildung 5: Auszug aus dem Metamodell der UML

Die Anbindung der Sprache Java an die MOF-Spezifikation ist das Java Metadata Interface (JMI). Die Implementierungen werden bei der UML 1.4 dynamisch zur Laufzeit durch Netbeans MDR erzeugt (byte code generation). Eine Erweiterung des Metamodells ist somit nicht so einfach möglich. Das AndroMDA-Framework kapselt darum den Zugriff auf Metaobjekte durch eigene Facaden, sogenannte Metafacaden (siehe Abbildung 6). Für jede Metaklasse gibt es eine Metafacade. Über die Konfiguration der Cartridge wird festgelegt, über welche Facade ich im Template auf die Metaobjekte zugreife. Damit habe ich die Möglichkeit, eigene abgeleitete Facaden zu schreiben, die z.B. komplexere Logik enthalten.

Abbildung 6: Zugriff auf Metaobjekte über AndroMDA Metafacaden

Die CoreMedia Cartridge besteht aus 2 Metafacaden: die Doctype- und die View-Metafacade. Für die Generierung des Codes werden folgende Velocity-Templates verwendet:

  • Contentbeans – generiert die Interfaces für die Contentbeans
  • ContentbeansBase – generiert die abstrakten ContentbeansBase-Klassen
  • ContentbeansImpl – generiert die Implementierungsklasse für die Contentbeans
  • Dataviews – generiert die Caching-Anweisung in den dataviews.xml
  • Editor.labels – generiert die Label-Dateien für Java- und Webeditor
  • JSPTemplates – generiert aus den View-Modell die JSP-Templates zu den Dokumenten aus dem Dokumentenmodell

Der schematische Aufbau der CoreMedia Cartridge ist in Abbildung 7 dargestellt.

Abbildung 7: schematischer Aufbau der CoreMedia Cartridge

Über entsprechende Getter-Methoden der Metafacaden kann so in den Templates auf Attribute, Operationen, Stereotypen oder TaggedValues zugegriffen werden. Letzter werden verwendet, um das Model noch detaillierter zu beschreiben, was z.B. beim Caching oder bei den Views notwendig ist.

Dazu wurde ein UML-Profil im Enterprise Architect erstellt, was die Zusammenhänge von Stereotypen, TaggedValues und Wertebereiche definiert. In Abbildung 8 ist ein Auszug davon dargestellt.

Abbildung 8: UML-Profil für die CoreMedia Cartridge

In der CoreMedia Cartridge ist das Caching für Klassen vom Stereotyp «DocType» per default eingeschalten. Das Profil hat dazu im Stereotyp «DocType» ein Attribute dataview.caching hat. Dieses ist vom Typ  boolean und hat den initialen Wert true. In der TaggedValue-Ansicht der Klasse Teaser sieht das wie in Abbildung 9 aus.

Abbildung 9: TaggedValue-Ansicht des Teasers

Weiterhin sieht man darin editor.label mit dem Wert „Teaser“. Dieser Eintrag für das Editor.labels-Template verwendet. Das Caching der Attribute ist per default ausgeschalten muss (dataview.caching initial=false) und muss explizit eingeschalten werden.

Bei Verlinkung auf andere Dokumente über LinklistPropeties  kann zusätzlich der dataview.associationType angegeben werden. Dieser hat den Wertebereich {COMPOSITION, AGGREGATION, STATIC, DYNAMIC} und wird über Enumeration modelliert (siehe Abbildung 8). In der TaggedValue-Ansicht des Attributs incImage des Teasers (siehe Abbildung 10) sieht man, dass das Caching eingeschalten ist und dass der AssociationType Aggregation ist.

Abbildung 10: : TaggedValue-Ansicht der Teasers-Property: incImage

Ressourcen


[1] MOF – Meta-Object Facility, ist die Beschreibung des UML-Metamodells der OMG  (Meta-Metamodell der UML)

 

Share on FacebookShare on Google+Tweet about this on TwitterPin on Pinterest

Schreib einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *