[Java] Helidon Takes Flight

Thanks for giving Japanese translation permission to me, Dmitry!
原文はこちら。
https://dmitrykornilov.net/2018/09/07/helidon-takes-flight/
https://medium.com/oracledevs/helidon-takes-flight-fb7e9e390e9c

今日は素晴らしい日です。本日、新しいJavaのマイクロサービス・フレームワーク、そしてMicroProfileファミリの新しいメンバーをご紹介します。Oracleの新しいJavaのオープンソース・マイクロサービス・フレームワークであるProject Helidonです。
Project Helidon - Lightweight. Fast. Crafted for Microservices.
https://helidon.io
Helidonは ギリシア語でつばめ(swallow)を意味します。Wikipediaによると、細長い、合理化されたボディーと長い尖った羽根があり、素晴らしい操縦性と非常に効率的な飛行が可能な鳥だそうです。雲(Cloud)の中を飛び回るのに最適ですね。

Overview

Helidon Projectの作業は以前からやっていました。クラウドの世界に入り、クラウドサービスの作成にあたってマイクロサービスアーキテクチャが非常に人気を博し始めたとき、私たちは開発体験(Developer Experience)も変える必要があることを認識しました。Java EEを使用してマイクロサービスを構築することもできます。ですが、マイクロサービス構築のためにはフレームワークを一から設計したほうがよい、と考えました。アプリケーションサーバを必要とせず、Java SEアプリケーションで使用できる軽量のライブラリセットを作成したかったのです。これらのライブラリはそれぞれ個別に利用することもできますが、組み合わせて利用すると、マイクロサービスを作成するために開発者が必要とする基盤(構成、セキュリティ、Webサーバ)を提供してくれます。

MicroProfileを基にした、標準的なマイクロサービスのフレームワークを構築する取り組みはすでにいくつか立ち上がっています。MicroProfileは、Java EE/Jakarta EEコミュニティで非常に人気があり、Java EEと同様の開発体験を提供します。私たちはそのアイデアを気に入っていており、このイニシアティブをサポートしています。HelidonはMicroProfile 1.1を実装していますが、引き続きMicroProfileの新しいバージョンの実装に取り組み、この分野に関連するJakarta EE標準をサポートする予定です。

HelidonはOracleが作成していますので、Oracle Cloudとの役立つ連携機能が含まれていくことに驚かないでください。こうした機能は初期バージョンには含まれていませんが、後々追加される予定です。Helidonはすでに多くのOracle社内プロジェクトで使用されており、Oracle Cloudとの連携機能によって、開発者の負担が大幅に軽減されています。Oracle Cloudをお使いであれば、皆様の負担も軽減されるでしょう。お使いにならない場合は、こうした連携機能はオプションです。

Landscape


マイクロサービスを作成するためのJavaフレームワークは、いくつかのカテゴリに分類されます。 小さいものから並べてみました。
  • Microframeworks
    シンプルで小さな機能セット。
  • [例]Spark、Javalin、Micronautなど
  • MicroProfile
    Java EE開発者にとっては優しいが、やや重い。完全機能を備えたJava EEアプリケーションサーバーの上に構築されているものもある。
    [例]Thorntail (Wildfly Swarm)、OpenLiberty、Payaraなど
  • Full Stack
    Spring Bootのようなフル機能セット
Helidonには2種類あり、それぞれMicroframeworksとMicroProfileという2つのカテゴリをカバーします。アプリケーションでどちらを使うかは開発者次第です。
  • Helidon SE — モダンなリアクティブ・スタイルで開発された、シンプル、関数型スタイルの軽量なマイクロフレームワークです。"magic"の注入(訳注:CDIのことを指しています)はありません。特別なランタイムは必要ありません。JDKをランタイムとして使用します。
  • Helidon MP — Java EE/Jakarta EE開発者に優しい開発者体験を提供する、Eclipse Microprofile実装

Architecture

以下はHelidonのハイレベルなアーキテクチャ図です。

  • 緑色の部分が、Helidon SEコンポーネント(Config、Security、RxServer)です。
  • 灰色の部分が、Helidonで使用するJava EE/Jakarta EEコンポーネント(JSON-P、JAX-RS/Jersey、CDI)です。MicroProfileの実装のためにこれらのコンポーネントが必要です。
  • Helidon MPは、Helidon SEコンポーネントの上にある薄いレイヤーです。
  • Oracle Cloudのサービスコンポーネントは赤色の部分で、Helidon SEとHelidon MPの両方で使用されます(訳注:もちろんOracle Cloudとの統合が不要であれば使う必要はありません)。

Usage and Samples

Setup

Helidonを使い始めるなら、MavenプロジェクトをJava 8(もしくはそれ以上のバージョン)で利用し、Helidonのbom-pomを構成するのが最も簡単です。
<dependencyManagement>
   <dependencies>
       <dependency>
           <groupId>io.helidon</groupId>
           <artifactId>helidon-bom</artifactId>
           <version>${helidon-version}</version>
           <type>pom</type>
           <scope>import</scope>
       </dependency>
   </dependencies>
</dependencyManagement>

Helidon SE

Helidon SEは軽量なリアクティブ・マイクロサービスを構築するための基礎となるものです。Hello worldの実装は以下のような感じです。
Routing routing = Routing.builder()
       .get("/hello", (req, res) -> res.send("Hello World"))
       .build();

WebServer.create(routing)
       .start();
このコードで、ランダムな(空き)ポートでWebサーバを起動し、/helloというエンドポイントを公開します。

以下をインポートします。
import io.helidon.webserver.Routing;
import io.helidon.webserver.WebServer;
このサンプルを実行するために必要な依存関係は以下の通りです(bom-pomを使う場合にはバージョンは不要です)。
<dependency>
   <groupId>io.helidon.webserver</groupId>
   <artifactId>helidon-webserver-netty</artifactId>
</dependency>

Adding metrics to SE

Helidon SE用にも、MicroProfile Metricsインタフェースの実装を提供しています(SEにはinjectionが含まれていないため、injectionのサポートはありません)。
// create metric registry
MetricsSupport metricsSupport = MetricsSupport.create();

// get the registry
MetricRegistry registry = RegistryFactory
       .getRegistryFactory()
       .get()
       .getRegistry(MetricRegistry.Type.APPLICATION);

// create a counter
Counter helloCounter = registry.counter("helloCounter");

Routing routing = Routing.builder()
       // register metric support with web server
       .register(metricsSupport)
       .get("/hello", (req, res) -> {
           // increase counter
           helloCounter.inc();
           res.send("Hello World");
       })
       .build();

WebServer.create(routing)
       .start();
ここで、新たな依存関係が必要です。
<dependency>
   <groupId>io.helidon.microprofile.metrics</groupId>
   <artifactId>helidon-metrics-se</artifactId>
</dependency>
新たなエンドポイントが利用可能になっています。
  • /metrics
    全てのメトリック(base、vendor、application)
  • /metrics/application/helloCounter
    hello worldアプリケーションで生成されたメトリック

Helidon MP

Helidon MPは Eclipse Microprofileの実装で、マイクロサービスのランタイムです。

Hello worldでは、呼び出しを計測するためにメトリックを使います。

リクエストを処理するために、JAX-RSリソースクラスを作成する必要があります。
@Path("hello")
@RequestScoped //allows us to use CDI injection
public class HelloWorld {
   @GET
   @Metered
   public String hello() {
       return "Hello World";
   }
}
続いて、このリソースをもつサーバを起動します。
Server.builder()
       .addResourceClass(HelloWorld.class)
       .build()
       .start();
このプロジェクトでCDIインジェクションを呼び出すためsrc/main/resources/META-INF ディレクトリにbeans.xml ファイルを作成する必要があります。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns="http://xmlns.jcp.org/xml/ns/javaee"
       xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee                         
                           http://xmlns.jcp.org/xml/ns/javaee/beans_2_0.xsd"
       bean-discovery-mode="annotated">
</beans>
これで、デフォルトのポート(7001)でWebサーバが始動し、/helloというエンドポイントを公開します。

以下のエンドポイントが利用可能です。

Plans

多くの計画があるので、それについては別途記事にできると思っています。

短期的な目標は、HelidonをJavaコミュニティに広めることで、Helidonについて種々のカンファレンスでお話する予定です。Oracle Code One 2018では4つのHelidon関連のセッションを予定しています。また、EclipseCon Europe 2018にもCfPを提出していますし、現地でのJakarta EE/MicroProfile Community Dayにも参加する予定です。スクリーンキャストやYouTube動画といった学習教材も現在進行中です。

技術的観点から、MicroProfileの次期バージョンをすみやかに実装しようと取り組んでいます。また、Oracle GraalVMのサポートに取り組んでいます。これはHelidon SEユーザーのための素晴らしい機能となるでしょう。

いくつかの素敵な機能に取り組んでいますが、今すべてをご覧頂くことはできませんので、しばしお待ちください。準備でき次第、すみやか新しい機能を発表してまいります。

Useful Links

You may find it interesting

  • 元々のプロジェクトの名前はJ4C(Java for Cloud)でした。
  • Helidonチームは2個の小さなチームから構成されており、一つはプラハ(チェコ)、もう一つはUSにあります。
  • Oracle社内で、Helidonを使うプロジェクトが10個以上あります。
  • Helidonのコンポーネントの中には、まだ開発中でオープンソース化されてないものがあります。

0 件のコメント:

コメントを投稿