Dynamische Serveranwendungen mit EclipseRT

Von Null auf REST mit JAX-RS

Gunnar Wagenknecht

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

Eclipse Magazin 4.2012

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.

Abb. 1: Mögliche Elemente einer Target Platform

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

Geschrieben von
Gunnar Wagenknecht
Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.