O'Reilly logo

Die OSGi Service Platform: Eine Einführung mit Eclipse Equinox by Matthias Lübken, Bernd Kolb, Nils Hartmann, Gerd Wütherich

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

19 Der Http Service330
httpService.registerServlet("/helloworld",
new HelloWorldServlet(), new Properties(), context);
httpService.registerResources("/", "/html", context);
httpService.registerResources("/images", "/resources",
context);
} catch (Exception ex) {
ex.printStackTrace();
}
}
protected void unsetHttpService(HttpService httpService) {
httpService.unregister("/helloworld");
httpService.unregister("/");
httpService.unregister("/images");
}
}
Die Komponentenbeschreibung implementieren wir in der Datei OSGI-
INF/component-description.xml (vgl. Listing 19–5).
<?xml version="1.0"?>
<component name="helloworldServletComponent">
<implementation class="org.osgibook.helloworld.servlet.
HelloWorldServletComponent"/>
<reference name="httpService"
interface="org.osgi.service.http.HttpService"
bind="setHttpService"
unbind="unsetHttpService"
cardinality="0..n"
policy="dynamic"
/>
</component>
Fügen Sie abschließend den entsprechenden Service-Component-Header
in Ihre Manifest-Datei ein:
Service-Component: OSGI-INF/component-description.xml
5. Schritt: Ausführen den Beispiels
Anlegen der
Launch-Konfiguration
Legen Sie zum Ausführen des Beispiels eine neue Launch-Konfigura-
tion mit dem Namen »Hello World Servlet Example« an, in der Sie
neben dem Bundle
org.osgibook.helloworld.servlet aus dem Work-
space auch die folgenden Bundles aus der Target Platform auswählen:
javax.servlet
org.eclipse.equinox.http
org.eclipse.equinox.ds
org.eclipse.osgi
org.eclipse.osgi.services
Listing 19–5
Die Datei component-
description.xml
33119.2 Überblick über den Http Service
Auf der Registerkarte Arguments des Launch-Configuration-Editors
fügen Sie unter VM arguments noch das System-Property
org.osgi.
service.http.port
hinzu. Damit legen Sie fest, auf welchem Port der
Http Service Verbindungen annehmen soll:
-Dorg.osgi.service.http.port=1234
Starten des Beispiels
Starten Sie nun das Beispiel mithilfe der Launch-Konfiguration. Sobald
Ihr Bundle gestartet ist, öffnen Sie in Ihrem Internet-Browser die URL
zu der index.html-Seite:
http://localhost:1234/index.html
Das Formular zur Namenseingabe erscheint (Abb. 19–3).
Lassen Sie das Eingabefeld leer und klicken Sie auf »OK«. Vom Servlet
werden Sie auf die Fehlerseite weiterleitet, da Sie keinen Namen einge-
geben haben. Klicken Sie auf »Zurück...«, so dass erneut die Startseite
aufgerufen wird. Geben Sie nun einen Namen im Eingabefeld ein und
klicken Sie erneut auf »OK«. Die »Hallo«-Seite erscheint, auf der Sie
namentlich begrüßt werden.
Ihre erste kleine OSGi-basierte Webanwendung, die sowohl mit
statischen Ressourcen als auch mit dynamischen Inhalten arbeitet, ist
damit fertig. In den folgenden Unterkapiteln werden wir Ihnen die
Konzepte des Http Service im Detail erläutern.
19.2 Überblick über den Http Service
Der Http Service
Der Http Service stellt eine einfache Schnittstelle bereit, über die Serv-
lets und statische Ressourcen (bspw. HTML-Seiten, Grafiken) an
einem Webserver registriert und deregistriert werden können. Der
Abb. 19–3
Die Startseite der
Webanwendung
19 Der Http Service332
Webserver wird dabei von der jeweiligen Implementierung des Http
Service bereitgestellt und läuft innerhalb des OSGi Frameworks ab.
Modularisierung
und Dynamik
Im Gegensatz zu klassischen JEE-Webanwendungen können Sie
dabei eine Webanwendung modular aufbauen, da der Service die
Registrierung von Servlets und Ressourcen aus allen Bundles heraus
erlaubt eine zentrale Konfiguration ist nicht erforderlich. Auch die
dynamischen Aspekte des OSGi Frameworks werden unterstützt: So
haben Sie jederzeit die Möglichkeit, Servlets zu registrieren oder zu
deregistrieren. Durch ein Versionsupdate eines Bundles können Sie zur
Laufzeit auch neue Servlet-Versionen installieren. Die Notwendigkeit,
Servlets und Ressourcen an einer zentralen Stelle zu konfigurieren, so
wie Sie es in einer JEE-Anwendung in der Datei
web.xml tun müssen,
entfällt, da jedes Bundle eigene Servlets und Ressourcen registrieren
kann.
Einschränkungen
Allerdings unterstützt der Http Service bei weitem nicht alle Features,
die Ihnen die JEE-Spezifikation bietet: So können Sie z.B. keine Servlet-
Filter verwenden, und auch JSPs sind nicht Teil der Spezifikation. In
Kapitel 24 werden wir Ihnen jedoch zeigen, wie Sie die Jasper JSP
Engine verwenden können, um über den Http Service auch JSPs auslie-
fern können.
19.3 Das Interface HttpService
Der Http Service implementiert das Interface org.osgi.service.http.
HttpService
, das in Listing 19–6 dargestellt ist.
OSGi Framework
HTTP Service
G
i Framewor
k
Webserver
H
v
e
r
HTTP Service-
Implementierung
Abb. 19–4
Überblick über den
Http Service
33319.3 Das Interface HttpService
package org.osgi.service.http;
import java.util.Dictionary;
import javax.servlet.Servlet;
import javax.servlet.ServletException;
public interface HttpService {
public void registerServlet(String alias, Servlet servlet,
Dictionary initparams, HttpContext context)
throws ServletException, NamespaceException;
public void registerResources(String alias, String name,
HttpContext context) throws NamespaceException;
public void unregister(String alias);
public HttpContext createDefaultHttpContext();
}
19.3.1 Registrieren und Deregistrieren von statischen Ressourcen
Registrieren von
Ressourcen
Statische Ressourcen sind Dateien, die bei einer entsprechenden
Anfrage eines Clients vom Webserver direkt und ohne Veränderung an
den Client zurückgeliefert werden, z.B. Grafiken oder HTML-Dateien.
Um Ressourcen aus einem Bundle am Http Service zu registrieren,
muss die Methode
registerResources() verwendet werden:
public void registerResources(String alias, String name,
HttpContext context) throws NamespaceException;
Die Methode erwartet die folgenden Parameter:
alias: Mit dem alias-Parameter geben Sie an, unter welchem Pfad
die Ressource verfügbar gemacht wird (vgl. Unterkapitel 19.3.3).
name: Der name-Parameter gibt an, welche Datei oder welches Ver-
zeichnis innerhalb eines Bundles registriert werden soll.
context: Über den context-Parameter können Sie eine HttpContext-
Instanz angeben, die vom Http Service verwendet wird, um die
angeforderten Ressourcen zu landen und um deren Mime-Type zu
bestimmen (vgl. Unterkapitel 19.4).
Um beispielsweise das Verzeichnis
/resources aus einem Bundle unter
dem Alias
/images zu registrieren, führen Sie folgenden Aufruf aus:
httpService.registerResources("/images", "/resources", context);
Deregistrieren
von Ressourcen
Ressourcen, die Sie beim Http Service registriert haben, können Sie mit
der
unregister-Methode jederzeit wieder entfernen. Die unregister-
Methode erwartet als Parameter den Namen des Aliases, unter dem Sie
die Ressource registriert hatten:
httpService.unregister("/images");
Listing 19–6
Das Interface HttpService

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

Start Free Trial

No credit card required