Suche
Do more, more easily

Jooby 1.1 macht Kotlin zum Bürger erster Klasse

Edgar Espina, Dominik Mohilo

© Shutterstock.com / magic pictures

Jooby, das von express.js inspirierte Mikro-Webframework für Java, hat vor Kurzem eine Aktualisierung erhalten. Hauptfeature von Version 1.1 des Frameworks ist die native Unterstützung von Kotlin. Wir haben uns die Highlights von Jooby 1.1 angesehen.

Kotlin – Support erster Klasse

Das interessanteste und aufregendste neue Feature von Jooby 1.1 ist definitiv die Unterstützung von Kotlin. Wie bekannt ist, laufen Java-Bibliotheken problemlos mit Kotlin zusammen, sodass Entwickler von Bibliotheken oder Frameworks nichts Spezielles tun müssen. So etwa sieht eine Jooby-Anwendung in Kotlin aus:

package starter.kotlin

import org.jooby.*

class App: Jooby() {
  init {
    get("/", {req->
      "Hello " + req.param("name").value("Kotlin")
    });
  }
}

fun main(args: Array<String>) {
  Jooby.run(::App, args);
}

Das ist gar nicht schlecht, aber im Prinzip ist es einfach eine Eins-zu-eins-Übersetzung von Java nach Kotlin. Da Jooby Kotlin aber liebt, stellt es ein Kotlin-Modul zur Verfügung, mit dem es möglich ist, idiomatisches Kotlin zu schreiben. Das Ganze sieht dann so aus:

import org.jooby.*

fun main(args: Array<String>) {
  run(*args) {
    get {
      val name = param("name").value("World")
      return "Hello $name!"
    }
  }
}

Das sieht schon besser aus, nicht wahr? Die run-Funktion ist ein typsicherer Builder, der einem impliziten Zugriff auf eine Jooby-Instanz gibt. Das Gleiche gilt für die get-Funktion, die allerdings impliziten Zugriff auf das Request-Objekt ermöglicht.

Das Idiom group gruppiert eine oder mehrere Routen unter einem allgemeinen Pfad, etwa /api/pets. Hier ein Beispiel:

package starter.kotlin

import org.jooby.*

fun main(args: Array<String>) {
  run(*args) {
    route("/api/pets") {
      get({->
        // list pets
      })
      get("/:id", {req ->
        // pet by ID
        val id = req.param("id").intValue
      })
      post({req ->
        // list pets
        val pet = Petreq.body(Pet::class);
      })
    }
  }
}

Weitere Informationen zu Kotlin in Jooby gibt es auf der Projekthomepage. Ein Blick auf das Kotlin-Starter-Projekt lohnt sich ebenfalls für alle, die Kotlin nutzen möchten.

Refresh, Rocker, Requery

Endlich wird der Refresh-Button im Browser nicht mehr benötigt: Das LiveReload-Modul kann dazu eingesetzt werden, auf Dateiänderungen zu achten. Findet eine solche schließlich statt, wird der Browser automatisch aktualisiert, das Drücken von F5 oder des Refresh-Buttons entfällt dadurch.

Die Template-Engine Rocker ist schnell, speichereffizient und produziert statisch typisierte Plain-Java-Objekte:

// views/main.rocker.html

@args (String title, RockerBody content)

<html>
    <head>
        <title>@title</title>
    </head>
    <body>
    @content
    </body>
</html>

// views/index.rocker.html
@args (String message)

@views.main.template("Home") -> {
    <h1>Hello @message!</h1>
}

Diese können dann effizient aus der Anwendung selbst heraus gerendert werden:

import org.jooby.rocker.*;

{
  use(Rockerby());

  get("/", () -> views.index.template("Rocker"));
}

Jooby enthält ab Version 1.1 auch einen Starter für Requery. Der leichtgewichtige aber mächtige Object-Mapping- und SQL-Generator für Java und Kotlin kann unter anderem Datenbanken erstellen und Queries ausführen.

Weitere Informationen zu LiveReload in Jooby 1.1 gibt es hier, eine Dokumentation zu Rocker findet sich hier und die für Requery gibt es hier.

Weitere Änderungen

Neben den oben erwähnten Features hat Jooby 1.1 noch mehr im Gepäck. So werden unter anderem nun MVC Web Sockets unterstützt und die Performance wurde deutlich verbessert. Jooby läuft nun zwei- bis dreimal schneller, wie ein aktueller Benchmark-Test impliziert.

Lesen Sie auch: Jooby: Ein Mikro-Webframework für Java 8

Ebean wird außerdem in der aktuellsten Version unterstützt und Nachrichten an alle verbundenen Web Socket Clients sind möglich. Auch einige Bugs wurden für Jooby 1.1 gefixt, etwa der OAuth-Fehler beim Verwenden von MongoSessionStore oder die Probleme beim Deployen eines Jooby-Projektes auf Jetty/Tomcat.

Sämtliche Informationen zum Update gibt es auf GitHub, eine vollständige Änderungsübersicht findet sich dort ebenfalls.

Geschrieben von
Edgar Espina
Edgar Espina
Vater. Open-Source-Enthusiast. Schöpfer von Jooby & handlebars.java
Dominik Mohilo
Dominik Mohilo
Dominik Mohilo studierte Germanistik und Soziologie an der Goethe-Universität in Frankfurt. Seit 2015 ist er Redakteur bei S&S-Media.
Kommentare

Schreibe einen Kommentar

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