conference logo

Playlist "Metaebene - Fabric als Code Generation Framework für Java, C und C++"

Metaebene - Fabric als Code Generation Framework für Java, C und C++

Sascha Seidel (-)

Das Fabric Framework wurde mit dem Ziel ins Leben gerufen, wiederkehrende Prozesse bei der Entwicklung von Software zu automatisieren. Aus dem akademischen Kontext erwachsen, war das Projekt zunächst zur Generierung von Code für ressourcenbeschränkte Sensornetzwerke gedacht. Heute ist Fabric ein universelles Code Generation Framework für Java, C und C++. Der Vortrag gibt praktische Einblicke in die Architektur des Systems und zeigt im Anschluss, wie Fabric im Rahmen einer Fallstudie zur Entwicklung eines Bean-Generators mit effizienter XML-Serialisierung verwendet wurde. Die Präsentation richtet sich an Programmierer, Software-Architekten und Technikinteressierte. Erfahrungen mit Java, C/C++ und XML Schema sind von Vorteil, aber nicht zwingend erforderlich. Den Kern von Fabric bildet eine Bibliothek, mit der sich virtueller Code innerhalb eines sogennanten Workspace erzeugen lässt. Die API des Code Generation Framework bietet einen objektorientierten Zugang zu den Programmiersprachen Java, C und C++ sowie der Graphen-Visualisierungssprache GraphViz. Der erstellte Quelltext wird nicht sofort herausgeschrieben, sondern zunächst in Objekten gekapselt und im Speicher gehalten. Dadurch kann ein Entwickler, und darin unterscheidet Fabric sich von bisherigen Lösungen, dem Quelltext zu jeder Zeit und in nahezu beliebiger Reihenfolge auch nachträglich noch neuen Code hinzufügen. Ein weiterer Bestandteil des Systems ist ein Treewalker, der die ereignisorientierte Verarbeitung von XML Schemata und WSDL-Dateien gestattet. Möchte ein Anwendungsentwickler etwa Klassen zur Netzwerk-Kommunikation generieren lassen, so kann er die zu übertragenden Datentypen zunächst in einem XML Schema-Dokument definieren. Im Anschluss kann das Fabric Framework die Datei einlesen und mit geeigneten Modulen verarbeiten. Erst zu diesem Zeitpunkt erfolgt die Umsetzung auf eine konkrete Programmiersprache und Zielplattform (z.B. Desktop PC oder Sensorknoten). Durch eine Modul API ist es ferner möglich, auf der selben Datenbasis in nur einem Programmaufruf automatisch Code für verschiedene Zwecke generieren zu lassen. So können zum Beispiel zunächst Container-Klassen für die definierten Datentypen, dann Stubs für die Netzwerk-Kommunikation sowie anschließend Code für die Kompression und Verschlüsselung erzeugt werden. Das Konzept eines gemeinsamen Workspace ermöglicht es sogar, dass unterschiedliche Module auf den selben virtuellen Code zugreifen und diesen mit zusätzlicher Logik anreichern. So können von Modul A erzeugte Java-Methoden zum Beispiel durch Modul B nachträglich mit Annotationen versehen werden.

Über den Autor Sascha Seidel: Sascha Seidel ist studierter Informatiker und arbeitet als selbstständiger Entwickler in Norddeutschland. Seine Forschungsinteressen liegen in den Bereichen Software Engineering, verteilte Systeme, Web-Entwicklung und Datenbank-Technologien.