Von Null auf REST mit JAX-RS
EclipseRT ist das Top-Level-Projekt bei Eclipse für sämtliche Runtime-relevanten Technologien und Aktivitäten. Damit sind neben dem bekannten Einsatz von Equinox in der Eclipse IDE vor allem die klassischen OSGi-Laufzeitumgebungen (Mobile & Embedded) und auch Serverumgebungen gemeint. Eine Vielzahl an Projekten ist dort zu finden. Im Folgenden werden die bekanntesten Projekte (u. a. Jetty und EclipseLink) genutzt, um damit die Grundlage für einen eigenen Equinox-basierten Stack zu legen.
Eclipse Magazin
Der Artikel „Von Null auf REST mit JAX-RS“ von Gunnar Wagenknecht ist erstmalig erschienen im
Während OSGi mittlerweile in vielen Applikationsservern als „Kernel“ gesetzt ist, tun sich einige der Hersteller immer noch schwer damit, die volle Flexibilität und Dynamik von OSGi den darin laufenden Anwendungen zur Verfügung zu stellen. Allerdings muss man nicht so lange warten. Im Artikel wird anhand von Beispielen gezeigt, wie einfach man seinen eigenen OSGi Runtime Stack kreieren und damit modulare Anwendungen entwickeln kann. Der erste Teil beschäftigt sich zunächst mit dem Einrichten der Entwicklungsumgebung. Im Anschluss wird ein einfacher OSGi Service und dann ein Bundle mit JAX-RS-Ressourcen entwickelt, der als REST Services verfügbar gemacht werden. Der gesamte Quellcode der Beispiele ist online abrufbar [1].
EclipseRT
EclipseRT (kurz: „RT“) ist ein Top-Level-Projekt bei Eclipse. Das RT steht für Runtime. Im RT-Projekt selbst wird kein Code entwickelt, sondern ausschließlich in den Unterprojekten. Die Vielfältigkeit innerhalb von RT ist sehr hoch, allen Projekten gemeinsam ist aber, dass sie als Basis Equinox einsetzen bzw. den modularen Entwicklungsansatz von OSGi unterstützen.
Apricot
Im Apricot-Projekt wird eine Referenzimplementierung für ein Content Repository, wie es bspw. in einem Dokumenten- oder Content-Management-System zum Einsatz kommt, entwickelt. Ein aktuelles Release steht noch nicht zur Verfügung (Stand: Ende April, Anm. der Red.).
ECF
Das Eclipse Communications Framework vereinfacht die Kommunikation durch ein generisches API, das mit spezifischen Implementierungen realisiert werden kann. Anwendungen können so unabhängig von der benutzten Technologie entwickelt werden.
EclipseLink
EclipseLink ist aus Oracle TopLink hervorgegangen und als Referenzimplementierung für JPA 2.0 und 2.1 weit verbreitet. Darüber hinaus bietet es eine Reihe weiterer interessanter Implementierungen wie bspw. MOXy (JAXB-Alternative) und SDO.
Equinox
Equinox ist die Referenzimplementierung für OSGi R4 und R5 (in Entwicklung). Neben dem OSGi-Framework selbst gehören noch weitere Komponenten zu Equinox wie bspw. p2 und der native Launcher.
eRCP
Die Embedded Rich Client Platform widmet sich dem Portieren von SWT- und Eclipse-RCP-Konzepten und APIs auf mobile Geräte.
Gemini
Im Gemini-Enterprise-Modules-Projekt werden die von der OSGi Enterprise Expert Group erarbeiteten Spezifikationen zur Integration von JavaEE-Technologien (u. a. JDBC, JPA, JNDI und JMX) implementiert.
Gyrex
Das Eclipse-Gyrex-Projekt ist mit Version 1.0 nun auch im Runtime-Projekt angekommen. Neben der Out-of-the-Box-Integration von verschiedenen RT-Projekten miteinander ermöglicht das Projekt den Aufbau skalierender OSGi-Cluster-Umgebungen mithilfe von Apache ZooKeeper.
Jetty
Als skalierender und performanter Web/HTTP-Server und Servlet Container erfreut sich Jetty einer stetig wachsenden Beliebtheit. Jetty kann sowohl selbständig als auch eingebettet betrieben werden. Es ist bspw. Bestandteil der Google App Engine.
RAP
Anfangs gestartet mit dem Ziel, das Web für Eclipse-RCP-Entwickler nutzbar zu machen, hat sich RAP längst darüber hinaus weiterentwickelt. Neben komplexen RCP-Oberflächen im Browser lassen sich mit RAP aber auch leichtgewichtige JavaScript UIs einfach in Java realisieren.
Riena
Das Riena-Projekt adaptiert Eclipse RCP für eine Reihe von Businessanwendungen. Für solche Anwendungen, wo typische Geschäftsprozesse und fachliche Vorgaben die Oberfläche bestimmen, hat Riena passende Lösungen parat.
SMILA
Bei SMILA handelt es sich um ein Framework für den Aufbau von Enterpise-Search-Lösungen.
Virgo
Hervorgegangen aus dem Spring DM Server wird im Virgo-Projekt ein OSGi-Applikationsserver für JavaEE- und Spring-Anwendungen entwickelt. Als Web-Container kann sowohl Tomcat als auch Jetty genutzt werden. Auch spezielle Unterstützung von Nicht-OSGi-Bibliotheken ist in Virgo enthalten, um die Migration von monolithischen Anwendungen in die OSGi-Welt zu ermöglichen.
Die Entwicklungsumgebung
Um OSGi Bundles unter Eclipse entwickeln zu können, benötigt man eine Erweiterung, die das vereinfacht. Eclipse bringt von Haus aus das Plug-in Development Environment (PDE) mit. Eine Alternative ist die Bndtools-Erweiterung von Neil Bartlett [2]. Auch ein Maven-basierter Ansatz ist denkbar, bei dem die OSGi Bundle Manifests aus der Maven POM XML generiert werden. Im Folgenden wird PDE genutzt. Es wird in vielen RCP-Projekten erfolgreich eingesetzt und eignet sich auch hervorragend für Serveranwendungen. Wer bereits Eclipse Plug-ins entwickelt, dem sollte PDE nicht unbekannt sein. Es ist bspw. im Paket für RCP- und RAP-Entwickler [3] enthalten.
Für den Artikel wird ein frischer Workspace angelegt, für den dann die Target Platform konfiguriert wird. Sie ist in PDE – vereinfacht ausgedrückt – der Class Path für alle OSGi Bundles in einem Workspace. Daher kann auch immer nur eine Target Platform pro Workspace genutzt werden.
Es gibt zwei grundlegende Arten, wie eine Target Platform konfiguriert werden kann. Eine Möglichkeit ist lokal in den Workspace Preferences (WINDOW | PREFERENCES | PLUG-IN DEVELOPMENT | TARGET PLATFORM) und die zweite in einem Projekt im Workspace (FILE | NEW | OTHER. | PLUG-IN DEVELOPMENT | TARGET DEFINITION). Der Weg über das Projekt ist zwar etwas aufwändiger, hat aber den entscheidenden Vorteil, dass die Target Platform dann mit anderen (z.B. in einem Team) geteilt werden kann.

Eine Target Platform selbst kann aus vielen verschiedenen Elementen zusammengestellt werden (Abb. 1).
Hinterlasse einen Kommentar