先頃のOracle Live Webcastで、OracleはHelidon 2.0を正式にリリースし、OracleのインメモリデータグリッドソリューションであるCoherenceがオープンソースになることを発表した。Helidon 2.0には、次のような多くの新しい重要な機能が付属している。リアクティブメッセージングとストリームのサポート、新しいコマンドラインツール、Helidon SE用の新しいWebクライアントAPI、Helidon MP用のGraalVMサポート、および新しいリアクティブデータベースクライアントである。
ギリシャ語でツバメを意味するHelidonは、マイクロサービスベースのアプリケーションを作成するために設計されたオープンソースフレームワークおよびJavaライブラリのコレクションである。2つのバージョンがある: Helidon SEは、マイクロサービスベースのアプリケーションを構築するためのコア機能スタイルAPIを提供する。アプリケーションサーバーは必要ありません。Helidon MPは、マイクロサービスベースのアプリケーションを構築するためのMicroProfile仕様の実装である。Helidon SEおよびHelidon MPでサポートされているAPIの完全なリストが利用可能である。
元のHelidon SE APIの3つのコア (Web Server、Configuration、およびSecurity) を補完するために、新しいWeb Client APIがHelidon SEのセットを完成させる。Web Clientは、指定されたエンドポイントに関連するHTTP要求と応答を処理する。プレーンテキストのレスポンスを返すWebClient
インターフェイスのインスタンスが構築されるこの小さな例を考える:
WebClient client = WebClient.builder()
.baseUri("http://localhost")
.build();
CompletionStage<String> response = webClient.get()
.path("/endpoint")
.request(String.class);
response
インスタンス変数のタイプはCompletionStage<String>
であることに注意してください。Nettyの上に構築されたHelidonのWebサーバは非同期でリアクティブなAPIであり、新しいWeb Client APIは同じように設計されている。
設計上非リアクティブであるJDBCデータベースに接続するリアクティブアプリケーションについての課題に対処するため、Helidon 2.0は、Helidon SEアプリケーションに一貫したリアクティブデータベースアクセスとクエリを提供する新しいDB Clientを導入する。DB Clientは、JDBCおよびMongoDBのリアクティブドライバを介して接続するリレーショナルデータベースをサポートする。この新しいAPIは、データベース接続を指定し、構成ファイルにネイティブクエリコードを書き込む機能を備えているため、コードを再コンパイルしなくてもデータベース関連の変更を簡単に行うことができる:
db:
source: "jdbc"
connection:
url: "jdbc:mysql://127.0.0.1:3306/pokemon?useSSL=false"
username: "user"
password: "password"
poolName: "mysql"
statements:
ping: "DO 0"
select-all-pokemons: "SELECT id, name FROM Pokemons"
DB Clientでのメトリック、ヘルスチェック、およびトレースのサポートも含まれている。Helidonチームは、この新機能の使用方法を示すために、このサンプルアプリケーションを作成した。
Helidon 1.0.3のリリースで導入されたGraalVMのサポートは、Helidon SEアプリケーションでのみ利用可能だった。Helidon MPアプリケーションは、CDI内でリフレクションを使用しているため、GraalVMを利用できなかった。Javaコミュニティから最も要望の多かった機能の1つとして、Helidon 2.0は、Helidon MPアプリケーションをGraalVMを使用してネイティブの実行可能コードに変換することをサポートするようになった。Oracleの技術スタッフのコンサルティングメンバーであるTomas Langer氏は、この新機能の使用方法を示すために、このデモアプリケーションとこのYouTubeビデオを作成した。
開発者は、新しいHelidon CLIツールを使用して、コマンドラインからHelidonアプリケーションを作成、構築、および実行できるようになった。Quarkus (quarkus:dev
) が提供するホットリロードと同様に、devloopと呼ばれる組み込みの開発ループは、ソースコードの変更時にアプリケーションの再起動をトリガするソースファイルを監視する。このツールは別のダウンロードが必要である。インストールすると、使用可能になるコマンドラインオプションを以下に示す:
Oracleのソフトウェア開発ディレクターであるDmitry Kornilov氏は、この最新リリースについてinfoQに話した。
InfoQ: Helidon 2.0の最も重要な新機能は何でしょうか ?
Kornilov氏: Helidonには、非ブロッキングデータベースアクセス用のHelidon DB Client、リアクティブストリームオペレータとメッセージングのサポート、非ブロック方式で他のサービスを呼び出すためのHelidon WebClient、CORSサポートなどの多くの新機能が追加されました。
しかし、主たる大きな機能は、もちろん、Helidon MPでのGraalVMネイティブイメージのサポートです。これで、ユーザは、Helidon MPアプリケーションでほぼ瞬時の起動や低メモリ消費などのGraalVMネイティブイメージを利用できます。
InfoQ: Helidonチームは、元のHelidon MPアプリケーションをGraalVMでネイティブコードに変換できなかったリフレクションの問題をどのように克服したのでしょうか ?
Kornilov氏: 主な障壁は、GraalVMネイティブイメージに対応していないランタイム操作を使用するCDIでした。Weldを正常に調整して、コンパイル時にほとんどのランタイム操作を処理できるようにするために、多くの時間を費やしました。それはCDI拡張機能でも機能します。
ただし、ユーザは、サードパーティのCDI拡張機能がネイティブイメージに対応していることを確認する必要があります。そうでない場合、これらの問題が解決されるまで、アプリケーションをネイティブイメージにコンパイルできません。ネイティブイメージの互換性について、Helidonコンポーネントといくつかのサードパーティコンポーネントをテストする作業をいくつか行いました。サポートされ、完全にテストされたコンポーネントの完全なリストはこちらです。私たちはこのリストの拡大に継続的に取り組んでいます。
ユーザは、使用するコンポーネントをテストし、GraalVMネイティブイメージで機能しないかどうかを通知することで、私たちを支援することができます。それらをリストに含め、互換性を持たせるようにします。
InfoQ: HelidonとMicronautは最近、CLIなどの同様の新機能とツールを提供しているようです。Micronautは、マイクロフレームワークの分野で有望な競争相手だと思いますか。また、Helidon SEがMicronautよりもユニークである理由は何でしょうか。?
Kornilov氏: Micronautは素晴らしいフレームワークです。 現在、Helidonよりも機能が豊富で、設計によるAOTコンパイルをサポートしているため、GraalVMネイティブイメージの完璧なショーケースになっています。
一方、Helidon MPは、当社の「スタンダード」ソリューションです。MicroProfileと一部のJakartaEEコンポーネントをサポートします。Micronautは、AOTコンパイルの制限のため、これをサポートしていません。また、Helidon SEもあります。これは、別の開発エクスペリエンスを提供し、リアクティブ、ノンブロッキングサービスの高速な構築を可能にします。
Micronautを含めた両方の長所を組み合わせる予定です。
InfoQ: Helidon 2.0がリリースされた今後のHelidonの展望はどうでしょうか ?
Kornilov氏: HelidonとMicronautの統合に関する取り組みをすでに発表しました。さらに、最新のMicroProfileバージョンのサポートを追加し、MicroProfile Long-Running Actions (LRA) およびGraphQL仕様を実装し、パフォーマンスと安定性の向上に努める予定です。
詳細については、開発者はOracle Live Webcastのリプレイを視聴し、対応するSlide Deckをご覧ください。
リソース
- Helidon Supports GraalVM for Native Executable Applications、InfoQ (2019年7月19日)
- Long Running Actions for MicroProfile on Helidon - Data Integrity for Microservices、Paul Parkinson氏 (2019年9月14日)
- The New Helidon CLI、Santiago Pericas-Geertsen氏 (2020年6月24日)
- オラクル オープンソース Coherence インメモリデータグリッド、InfoQ (2020年6月30日)