Eclipse Gyrex

Als Nächstes implementieren wir einen Job, der im Hintergrund die Grußbotschaften moderiert, das heißt verarbeitet, und falls der Inhalt angenehm ist, sie dann als geprüft markiert. Dazu nutze ich das Eclipse Jobs API. Damit ist es sehr einfach möglich, umfangreiche Hintergrundprozesse zu implementieren, denen gewisse anerkannte Regeln der Technik (Best Practices) zugrunde liegen. Beispielsweise erlaubt das Eclipse Jobs API, Regeln für die Nebenläufigkeit von Prozessen zu implementieren und dabei auch Dinge wie Priorisierung, manueller Abbruch, Fortschritt- und Ergebnismeldung zu berücksichtigen. Allerdings arbeitet das Eclipse Jobs API immer nur innerhalb einer Java Virtual Machine. Auch die Möglichkeiten zum zeitlichen Planen von Jobs sind limitiert. Genau hier setzt Gyrex an und erweitert das Eclipse Jobs API um eine Möglichkeit, Jobs durch das Implementieren eines JobProvider (Listing 3) auf anderen Maschinen instanziieren und ausführen zu lassen. Dazu kommt noch eine Planungsmöglichkeit mittels Cron Expressions [15] auf der Basis von Quartz. Somit können Jobs bequem sowohl über die OSGi-Konsole als auch grafisch über die Gyrex-Administrationsoberfläche geplant und deren Ausführung überwacht und kontrolliert werden.

Listing 3: Ein JobProvider für das verteilte Instanziieren von Eclipse-Jobs
public class JobProviderComponent extends JobProvider implements GreetingServiceProvider {
  public static final String ID = "hellocloudjob";
  private GreetingService service;

  // * Creates a new instance.
  public JobProviderComponent() {
    super(Collections.singleton(ID));
  }

  @Override
  public Job createJob(final String typeId, final IJobContext context) throws Exception {
    if (ID.equals(typeId)) {
      return new HelloCloudJob(this);
    }

    return null;
  }

  @Override
  public GreetingService getService() {
    return service;
  }

  /**
   * Sets the node environment.
   * @param environment
   *            the environment to set
   */
  public void setEnvironment(final INodeEnvironment environment) {
    service = new GreetingServiceImpl(environment.getNodeId());
  }
}

jobs.xml:
Run und Debug

Nachdem wir die ersten Zeilen implementiert haben, wollen wir uns das Ergebnis natürlich anschauen. Wer bereits OSGi-Serveranwendungen mit Eclipse entwickelt hat, dem wird vielleicht die OSGi Framework Run Configuration [16] ein Begriff sein. Damit kann ein OSGi Framework aus Eclipse heraus gestartet werden. Allerdings sind dafür viele Einstellungen notwendig. Für Gyrex-Anwendungen kann stattdessen auf eine Run Configuration vom Typ Eclipse Application zurückgegriffen werden, denn Gyrex stellt die Anwendung org.eclipse.gyrex.boot.server bereit. Dadurch ist die Konfiguration einfacher, da beispielsweise Startlevels nicht individuell und fein-granular konfiguriert werden müssen. Stattdessen kann verstärkt auf Lazy Loading zurückgegriffen werden. In Kombination mit OSGi Declarative Service und/oder Eclipse Extension Points kann somit vollständig auf manuell konfigurierte Startlevels verzichtet werden. Lediglich die Plug-ins müssen konfiguriert werden, die zur Anwendung gehören. Um hier die Übersicht zu wahren, nutzen wir Features. Zu Beginn haben wir ein Feature angelegt, das wir nun zusammen mit den Gyrex-Features in der Run Configuration selektieren. Dabei sollten die folgenden Gyrex-Features ausgewählt werden:

  • org.eclipse.gyrex.features.kernel: Kernfunktionen (Clustering, Konfiguration, Logging)
  • org.eclipse.gyrex.features.http: HTTP-Server-Funktionalität auf Basis von Jetty
  • org.eclipse.gyrex.features.admin: RAP-basierte Administrationsoberfläche
  • org.eclipse.gyrex.features.processing: Verteilte Planung und Abarbeitung von Hintergrundprozessen
  • org.eclipse.gyrex.features.server: Standard-Setup für Gyrex Server

Dazu kommen noch eine Reihe von Abhängigkeiten zu Drittbibliotheken, die bei Gyrex auch in Features zusammengefasst und nach dem Schema org.eclipse.gyrex.features.dependencies.xyz benannt sind. Dadurch sind die Drittbibliotheken nicht fest in den eigentlichen Features verdrahtet, sondern können getreu dem Plattformgedanken flexibel für die Zielumgebung angepasst werden. Sehr hilfreich in diesem Zusammenhang ist die Funktion Validate Plug-ins, die im Tab PLUG-INS zu finden ist. Dadurch lässt sich die Auswahl verifizieren. Bis auf einige plattformspezifische Fragmente, deren Plattformabhängigkeiten nicht aufgelöst werden können, sollten dort für einen erfolgreichen Start keine weiteren Fehler angezeigt werden.

Nach dem Starten kann das Servlet unter dem angegebenen Alias im Browser aufgerufen werden. Dort können dann die Grußbotschaften eingegeben werden. Damit diese auch verarbeitet werden, muss der Hintergrundprozess zum Verarbeiten der Jobs gestartet werden. Dafür wurde ein Konsolenkommando implementiert, das über die OSGi-Konsole das einmalige Starten und das regelmäßige Ausführen mittels Cron Expression erlaubt (Abb. 4).

Abb. 4: Hallo-Server-Welt-Beispiel in AktionAbb. 4: Hallo-Server-Welt-Beispiel in Aktion (Vergrößern)

Kommentare

Schreibe einen Kommentar

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