原文はこちら。
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.Helidonは ギリシア語でつばめ(swallow)を意味します。Wikipediaによると、細長い、合理化されたボディーと長い尖った羽根があり、素晴らしい操縦性と非常に効率的な飛行が可能な鳥だそうです。雲(Cloud)の中を飛び回るのに最適ですね。
https://helidon.io
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 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の実装は以下のような感じです。このコードで、ランダムな(空き)ポートでWebサーバを起動し、/helloというエンドポイントを公開します。Routing routing = Routing.builder() .get("/hello", (req, res) -> res.send("Hello World")) .build(); WebServer.create(routing) .start();
以下をインポートします。
このサンプルを実行するために必要な依存関係は以下の通りです(bom-pomを使う場合にはバージョンは不要です)。import io.helidon.webserver.Routing; import io.helidon.webserver.WebServer;
<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"; } }
このプロジェクトでCDIインジェクションを呼び出すためsrc/main/resources/META-INF ディレクトリにbeans.xml ファイルを作成する必要があります。Server.builder() .addResourceClass(HelloWorld.class) .build() .start();
これで、デフォルトのポート(7001)でWebサーバが始動し、/helloというエンドポイントを公開します。<?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>
以下のエンドポイントが利用可能です。
- Hello worldサンプル
http://localhost:7001/hello - MicroProfile Metricsのエンドポイント
http://localhost:7001/metrics - Hello worldアプリケーションのMetricンドポイント
http://localhost:7001/metrics/application/com.oracle.tlanger.HelloWorld.hello - MicroProfile Healthエンドポイント
http://localhost:7001/health
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
- Helidon Webサイト
http://helidon.io - Twitter
@helidon_project - GitHub repository
https://github.com/oracle/helidon
You may find it interesting
- 元々のプロジェクトの名前はJ4C(Java for Cloud)でした。
- Helidonチームは2個の小さなチームから構成されており、一つはプラハ(チェコ)、もう一つはUSにあります。
- Oracle社内で、Helidonを使うプロジェクトが10個以上あります。
- Helidonのコンポーネントの中には、まだ開発中でオープンソース化されてないものがあります。
0 件のコメント:
コメントを投稿