JavaのマイクロサービスフレームワークHelidonを試す

HelidonはMicroProfileに対応したフレームワークです。
Helidon


このあたりで紹介されていますね。
Oracle、Java用のマイクロサービスフレームワーク「Helidon」を発表 - Computerworldニュース:Computerworld


HelidonにはシンプルなSEとMicroProfile対応のMPがあります。Maven Archetypeが用意されているので、こちらを使うと楽です。

SEだと関数を登録する感じで、MPだとJAX-RSCDIを使ったアノテーションベースのコードになります。
ちょっと試すにはSE、大きめのプロジェクトを作る場合はMPがよさげ。


面白いのは、Dockerfileが用意されているので、ビルドしてそのままDockerイメージが作れるところです。

FROM openjdk:8-jre-alpine

RUN mkdir /app
COPY libs /app/libs
COPY HelloHelidonSe.jar /app

CMD ["java", "-jar", "/app/HelloHelidonSe.jar"]


Archetypeを使えばなんも考えずに始めれますが、それだけでは面白くないので、ここでは最低限のプロジェクトを作ってみます。
まずMavenのpomにdependencyとしてhelidon-webserver-bundleを追加します。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>kis</groupId>
    <artifactId>SimpleHelidon</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>
    <dependencies>
        <dependency>
            <groupId>io.helidon.webserver</groupId>
            <artifactId>helidon-webserver-bundle</artifactId>
            <version>0.10.5</version>
        </dependency>
    </dependencies>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>
</project>


あとはこんな感じでWebServerにServerConfigurationとRoutingを指定してstartするコードを書きます。

package kis.simplehelidon;

import io.helidon.webserver.Routing;
import io.helidon.webserver.ServerConfiguration;
import io.helidon.webserver.WebServer;

public class Main {
    public static void main(String[] args) {
        WebServer server = WebServer.create(
                ServerConfiguration.builder()
                                   .port(8080)
                                   .build(),
                Routing.builder()
                       .get("/", (req, res) -> res.send("Hello Helidon"))
                       .build());
        server.start();
    }
}


実行すると、サーバーが起動しました。


よさげ。