Remote Provisioning mit Eclipse RTP

Remote Provisioning

Das Remote Provisioning ist gerade während der Entwicklungsphase interessant, da es in die eigene Eclipse IDE integriert ist. Die Idee: Nach Installation der benötigten Pakete erscheint ein neuer Run Configuration Type: Cloud Applications (Abb. 2). Mit dessen Hilfe lassen sich Eclipse-Features auswählen und auf einem Remote-Server installieren als auch starten. Der Run-Befehl führt die Anwendung nicht wie oft üblich lokal aus, sondern führt lokal nur die Kompilierung und das Packaging aus. Daraufhin wird die fertige Anwendung automatisch auf den gewünschten Remote-Server geladen und gestartet. Sollte sie bereits zuvor gestartet worden sein, wird die bereits laufende Kopie ersetzt.

Abb. 2: Run-Configuration-Dialog für Cloud Applications

Dazu ein Beispiel: Listing 1 und Listing 2 enthalten eine feature.xml eines Beispielprojektes und eine OSGi-Komponente dieser Anwendung, die über deklarative Services gesteuert wird. Die Komponente verwendet den OSGi-HTTP-Service, um ein Servlet (das DemoServlet) auszuliefern. Das komplette Projekt kann unter [1] heruntergeladen werden. Legt man nun eine neue Run Configuration vom Type Cloud Application an, und wählt das gezeigte Feature einen Remote-Server mit installierter Eclipse RTP Runtime aus, kann man mit einem Klick auf RUN die Anwendung auf dem Remote-System installieren. Das Plug-in verwendet daraufhin den bereits installierten Jetty-Server als HTTP-Service und registriert das Servlet. Das erstellte Servlet ist sofort unter [server-url]/demo erreichbar. Aktualisiert man nun während der Entwicklung das Servlet und führt die Run-Configuration erneut aus, erscheint unter [server-url]/demo die neue Version des Servlets. Interessant hierbei ist, dass dieser Ansatz keinerlei Anpassungen an das eigentliche Projekt oder die Feature-Konfiguration benötigt. Die in Listing 1 und 2 gezeigten Dateien enthalten keine speziellen Anpassungen für das Remote Publishing. Somit können beispielsweise auch komplexe RAP-Anwendungen oder beliebige andere OSGi-basierte Anwendungen auf diese Weise installiert werden, ohne dass zuvor Anpassungen notwendig sind.

Listing 1
Listing 2
public class HttpComponent {

  private static final String ALIAS_SERVLET = "/demo";
  private HttpService httpService;

  public void setHttpService(HttpService httpService) {
    this.httpService = httpService;
  }

  public void unsetHttpService(HttpService httpService) {
    this.httpService = null;
  }

  protected void startService() throws NamespaceException, ServletException {
    Servlet demoServlet = new DemoServlet();
    httpService.registerServlet(ALIAS_SERVLET, demoServlet, null, null);
  }
}
Kommentare

Schreibe einen Kommentar

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