Dynamische Serveranwendungen

Persistenz und JSON APIs

Gunnar Wagenknecht

Die API-Ressource kann relativ einfach gehalten sein. Sie lässt sich in den GreetingService injizieren und gibt eine Liste aller erfassten Grußbotschaften zurück. Listing 4 zeigt die Ressource samt Modellklasse und der OSGI-DS-Komponentendefinition. Das fertige Projekt ist in Abbildung 4 dargestellt und kann auch online abgerufen werden [3].

Listing 4: JAX-RS-JSON-Greeting-Ressource und OSGi-DS-Komponente

// Greeting.java
@XmlRootElement
public class Greeting {
  private String message;
  public String getMessage() {
    return message;
  }
  public void setMessage(final String message) {
    this.message = message;
  }
}

// jaxb.properties (same package as Greeting.java)
# required by JAXB to enable EclipseLink JAXB Context Factory
javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory

// JsonGreetingResource.java 
@Path("/greetings")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public class JsonGreetingResource {
  @Context
  private GreetingService greetingService;
  @GET
  public List getGreetings() {
    Collection messages;
    try {
      messages = greetingService.getGreetings();
    } catch (final IllegalStateException e) {
      throw new WebApplicationException(e, Status.SERVICE_UNAVAILABLE);
    } catch (final Exception e) {
      throw new WebApplicationException(e);
    }
    if (messages.isEmpty()) {
      return Collections.emptyList();
    }
    final List greetings = new ArrayList(messages.size());
    for (final String message : messages) {
      final Greeting greeting = new Greeting();
      greeting.setMessage(message);
      greetings.add(greeting);
    }
    return greetings;
  }
}

OSGI-INF/jaxrs-jsonapi-application.xml:


META-INF/MANIFEST.MF:
Manifest-Version: 1.0
Bundle-SymbolicName: hello.jaxrs.json
...
Service-Component: OSGI-INF/jaxrs-jsonapi-application.xml
Bundle-ActivationPolicy: lazy

build.properties:
bin.includes = META-INF/,
               .,
               OSGI-INF/
...

Abb. 4: JAX-RS-JSON-Beispielprojekt

Das war’s schon. Als Nächstes kann der Server gestartet werden. Allerdings muss die neue JSON-API-Webanwendung noch wie in Listing 5 dargestellt konfiguriert werden. Das passiert analog zum Verfahren im ersten Teil, weil das JSON API wiederum eine eigenständige Gyrex Webanwendung ist. Wer möchte, kann das auch über die Gyrex-webbasierte Administrationsoberfläche machen. Unter dem URL http://localhost:8080/hello/api/greetings können anschließend die Grußbotschaften im JSON-Format abgerufen werden.

Listing 5: Konfiguration der JAX-RS-JSON-API-Webanwendung per Konsole

1. Definition der Anwendung "hello.jaxrs.json"
   vom Typ "hello.jaxrs.json.application.component "
   (Konfigurations-Kontext "/") 
osgi> http defineApp hello.jaxrs.json hello.jaxrs.json.application.component /
Registered application 'hello.jaxrs.json'.

2. Mounten der Anwendung "hello.jaxrs.json"
   unter der URL "http:///hello/api"
osgi> http mount hello.jaxrs.json http:///hello/api
mounted url http:///hello/api

osgi>
Fazit

Fertig ist er, der Stack für eigene, dynamische Serveranwendungen mit EclipseRT. Hinzu gekommen (im Vergleich zum ersten Teil) ist die Persistenz mit EclipseLink JPA und die Umwandlung von Objekten (über JAXB) nach JSON mit EclipseLink MOXy. Damit ist der Grundstein gelegt. Schritt für Schritt kann nun die Anwendung weiter ausgebaut werden.

Gunnar Wagenknecht ist Softwareentwickler und bei AGETO verantwortlich für alle Themen rund um Technology und Architektur. Er ist Leiter des Eclipse Technology PMC und seit über zehn Jahren in der Eclipse-Community aktiv.
Geschrieben von
Gunnar Wagenknecht
Kommentare

Schreibe einen Kommentar

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