OData-Implementierung für Java und JavaScript

Was ist Apache Olingo?

Stephan Klevenz
Titel

Apache Olingo

Version

1.2.0 für OData 2.0

Hersteller

Apache Software Foundation

Lizenz

Apache 2.0

Download

Apache Olingo ist ein Projekt, um den OData-Standard zu implementieren. OData ist ein http-basiertes Protokoll, das die REST-Prinzipien [1] erfüllt sowie Abfragen und die Manipulation von Daten erlaubt und diese in den Formaten AtomPub oder Json überträgt. OData ist sozusagen ein SQL für das Web, ermöglicht also den standardisierten Zugriff auf Daten in beliebigen Backends. OData wurde ursprünglich von Microsoft entwickelt (OData 2.0) und ist inzwischen zu einem offenen Standard bei OASIS [2] geworden (OData 4.0).

Apache Olingo bietet eine client- und serverseitige Java Implementierung des OData-2.0-Standards an. Aktuell wird im Projekt an einer Java- und einer JavaScript-Implementierung für die Version 4.0 des OData-Protokolls gearbeitet.

Background

OData als Protokoll-Spezifikation adressiert das Problem, dass binäre APIs wie z.B. ODBC, ADO.NET, JDBC es nicht erlauben, über das Internet auf Daten zuzugreifen.

Es sind zahlreiche OData-Implementierungen in unterschiedlichen Technologien entstanden, die als offene Sourcen zugänglich sind. Bisher war es allerdings erforderlich, sich diese mühsam auf den unterschiedlichen Code-Sharing-Plattformen (GitHub, GoogleCode …) zusammenzusuchen. Manche enthielten nur die clientseitigen Aspekte des OData-Protokolls, andere dagegen nur den serverseitigen Anteil. Oft waren Implementierungen unvollständig, zudem war es häufig nicht offensichtlich, ob den Implementierungen Anpassungen an zukünftige Protokollversionen folgen würden.

Apache Olingo wurde Mitte 2013 initiiert, um die zukünftige OASIS-Version von OData, also OData 4.0, zu unterstützen. Im Vordergrund steht der „Community Building Process“, also viele OData-Experten in einem Open-Source-Projekt zu vereinen und darin Implementierungen für unterschiedliche OData-Versionen in unterschiedlichen Technologien zu liefern. Das Projekt hat hierzu den für Apache obligatorischen Inkubationsprozess erfolgreich durchlaufen. Das Projekt ist weiterhin offen, um neue Kontributionen in unterschiedlichen Technologien aufzunehmen.

Ein Beispiel

Apache Olingo lässt sich für mobile oder Browser-basierte Anwendungen verwenden. Server können mit Apache Olingo Daten über OData exponieren, so dass diese im Internet verfügbar sind. Mobile oder Browser-basierte Clients haben von überall Zugriff. OData und die Implementierung von Apache Olingo stellen dazu Konzepte bereit, um Daten für Offline-Anwendungsfälle zu synchronisieren, die Payload für einzelne Requests per Paging zu begrenzen und per gezielter Query-Möglichkeiten die Turnaround-Zyklen auf ein Minimum zu reduzieren.

Das folgende Beispiel demonstriert, wie sich die OData-Java-Bibliothek zum Konsumieren von Daten verwenden lässt. Generell wird über einen beliebigen HTTP Client ein Request auf eine OData URL ausgeführt. Anschließend wird der im Response enthaltene Content von der Bibliothek de-serialisiert. Das Ergebnis ist eine Objektinstanz, über die sich auf die Daten zugreifen lässt.

Im Beispiel werden zwei Requests verarbeitet. Der erste Request liefert das Entity Metadata Model (EDM) des Services. Die Metadaten werden i.d.R. nur einmal erfragt und bei der De-Serialisierung der eigentlichen Daten benötigt. Der zweite Request liefert ein Feed-Objekt, dessen Daten im Atom-Format übertragen wurden. Das Feed-Objekt kann dann dazu benutzt werden, um auf die einzelnen Entries und deren Properties zuzugreifen. Im Beispielcode handelt es sich um einen Feed für einen Produktkatalog. Die im Code verwendeten Properties (readProperties) sind optional und werden als Initialwerte dem EntityProvider übergeben.

.

    URL metadataUrl = new URL("https:­­//services.odata.org/V2/OData/OData.svc/$metadata");
    InputStream metadataStream = (InputStream) metadataUrl.getContent();
    assertNotNull(metadataStream);

    Edm edm = EntityProvider.readMetadata(metadataStream, true);

    URL feedUrl = new URL("https:­­//services.odata.org/V2/OData/OData.svc/Products");

    InputStream feedStream = (InputStream) feedUrl.getContent();

    EdmEntitySet entitySet = edm.getDefaultEntityContainer().getEntitySet("Products");
    EntityProviderReadProperties properties = EntityProviderReadProperties.init().build();

    ODataFeed feed = EntityProvider.readFeed("application/atom+xml", entitySet, feedStream, properties);

Für serverseitige Anwendungsfälle stellt Apache Olingo verschiedene Techniken bereit. So lässt sich zum Beispiel eine JPA-basierte Persistenz sehr einfach durch die Konfiguration eines Servlets als OData Service bereitstellen. Hierzu ist nur eine Factory-Klasse zu implementieren, in dem die JPA-basierte Persistenz bekannt gemacht wird. Apache Olingo übersetzt automatisch die Annotationen der JPA-Bean-Klassen in OData-Metadaten und führt Abfrage- und Schreiboperationen auf den JPA-Entitäten aus. Für komplexere Szenarien lassen sich eigene Datenprozessoren und Metadatenprovider schreiben.

Ausblick

Apache Olingo hat bereits drei Java Releases gebaut, die den OData 2.0 Standard client- wie serverseitig vollständig implementieren. Die aktuelle Version ist die 1.2.0.

Das Projekt hat kürzlich weitere Code-Kontributionen für einen Java und JavaScript Client erhalten, welche den OData-3.0-Standard implementieren.

Aktuell arbeitet das Projekt an einer vollständigen Implementierung des OData-4.0-Standards. Die Arbeiten umfassen eine Java-Server-Bibliothek, eine Java-Client-Bibliothek und eine JavaScript-Bibliothek.

Das Projekt ist offen für Kontributionen in Form von weiteren Technologien oder auch für Erweiterungen, um zusätzliche Persistenzarten neben der JPA-Persistenz zu ermöglichen.

Geschrieben von
Stephan Klevenz
Stephan Klevenz
Stephan Klevenz ist seit 2010 als Committer bei Apache aktiv und Vice President von Apache Olingo. Er arbeitet als Development Architect bei SAP und beschäftigt sich dort mit offenen Standards und Kommunikationsschnittstellen.
Kommentare

Hinterlasse einen Kommentar

Hinterlasse den ersten Kommentar!

avatar
400
  Subscribe  
Benachrichtige mich zu: