Open4

Helidonをなんとなくやってみるスレ

Yoshi YamaguchiYoshi Yamaguchi

OpenTelemetryはJava SDKの実装が一番進んでるのと、Go SDKの実装が停滞していて、Javaでサンプルを作らないといよいよやっていけない気持ちが湧いてきたので、どうせならJavaでマイクロサービスを作るときにこれから使われていきそうなMicroProfileを触っておこうかと思ったのでやってみる。

以前 @ryushi にMicroProfileの実装ならHelidonがいいと聞いたので、とりあえずHelidonを初めて見ることにする。

ぱっと検索してざっくり概要がまとまっているので @shibukawa の記事を読む。

https://future-architect.github.io/articles/20230308a/

Yoshi YamaguchiYoshi Yamaguchi

記事に書いてあるとおり helidon コマンドをインストールして超雑に始めてみる。

$ brew install helidon
$ helidon --version
build.date               2023-11-08 22:15:54 GMT
build.version            3.0.6
build.revision           ${buildNumber}
project.helidon.version  4.0.3
project.flavor           MP
latest.helidon.version   4.0.3
default.helidon.version  4.0.3

無事インストールできたので記事にあったGetting Startedをしてみる

$ helidon init
$ helidon dev

他のターミナルから localhost:8080 にHTTP GETを送信

$ curl http://localhost:8080/greet

{"message":"Hello World!"}
Yoshi YamaguchiYoshi Yamaguchi

コードを見ると、 GreetResource.javaSimpleGreetResource.java の各クラスに @Path アノテーションとかついてて、さらにその中のメソッドにも @Path アノテーションがついているのをみて、サブディレクトリのエントリーポイントになっているのがわかる。また @Path("/{name}")@PathParam("name") などとしているので、パラメーターの扱いもとりあえずわかった。

ところで、 src/main/java/io/helidon/examples/quickstart/mp には Main.java がないが、普通にウェブサーバーが起動している上に、 xxxResource.java にリクエストがディスパッチされている。これらのJAX-RS Resourceが呼ばれる工程が分からないのが気持ち悪いので、公式ドキュメントをちゃんと読むことにした。

https://helidon.io/docs/v4/mp/guides/overview

Yoshi YamaguchiYoshi Yamaguchi

MP Quickstart を読んだら、いきなり helidon init を使わずに mvn を起動してるので「違うじゃん」って思ったけど、生成されたコードをとかを見たら一緒だった。 helidon init は次のコマンドのショートカットだったんだな。

mvn -U archetype:generate -DinteractiveMode=false \
    -DarchetypeGroupId=io.helidon.archetypes \
    -DarchetypeArtifactId=helidon-quickstart-mp \
    -DarchetypeVersion=4.0.3 \
    -DgroupId=io.helidon.examples \
    -DartifactId=helidon-quickstart-mp \
    -Dpackage=io.helidon.examples.quickstart.mp

で、続きの helidon dev もなく、同様にこれも次のコマンドのショートカットだったんだな。

mvn package
java -jar target/helidon-quickstart-mp.jar

先にやってみたような /greet へのリクエストやヘルスチェックはうまくいったので大丈夫。DockerやKubernetesへのデプロイは一旦パス。