Helidon 1.0の公式リリースから1年も経たないうちに、Oracleは2020年春の終わりに予定されているHelidon 2.0の公式リリースに向けて順調に進んでいる。Helidon 2.0.0-M1 は、2月上旬にリリース、Helidon 2.0.0-M2 は、3月下旬にリリースされ、次のような重要な新機能のJavaコミュニティプレビューを提供した。リアクティブメッセージングとストリームのサポート、新しいコマンドラインツール、Helidon SE用の新しいWebクライアントAPI、Helidon MP用のGraalVMサポート、および新しいリアクティブデータベースクライアントである。
Helidon 1.0.3のリリースで導入されたGraalVMのサポートは、Helidon SEアプリケーションでのみ利用可能だった。Helidon MPアプリケーションは、CDIの中でリフレクションを使用しているため、GraalVMを利用できなかった。Javaコミュニティから最も要望の多かった機能の1つとして、Helidon 2.0.0-M1は、Helidon MPアプリケーションをGraalVMを使用してネイティブの実行可能コードに変換するためのサポートを導入した。Oracleの技術スタッフのコンサルティングメンバーであるTomas Langer氏は、この新機能をプレビューするために、Javaコミュニティ向けにこのデモアプリケーションを作成した。
オリジナルの3個の中核のHelidon SE API (Web Server、Configuration、Security) を補完するために、新しいAPIであるWeb ClientがHelidon SEのセットを完成させる。Web Clientは、指定されたエンドポイントに関連するHTTP要求と応答を処理する。Web Server APIと同様に、Web Clientもapplications.yaml
ファイルを通して構成できる:
server:
port: 8080
host: 0.0.0.0
client:
connect-timeout-millis: 2000
read-timeout-millis: 2000
follow-redirects: true
max-redirects: 5
headers:
- name: "Accept"
value: ["application/json","text/plain"]
services:
exclude: ["some.webclient.service.Provider"]
config:
metrics:
- methods: ["PUT", "POST", "DELETE"]
type: COUNTER
name-format: "client.counter.%1$s.%2$s"
WebClient
インターフェイスのインスタンスが作成され、プレーンテキストを返すように応答が定義されている小さな例を考える:
WebClient client = WebClient.builder()
.baseUri("http://localhost")
.build();
CompletionStage<String> response = webClient.get()
.path("/endpoint")
.request(String.class);
JSONを返すように応答を変更するには、JsonProcessing
クラスのインスタンスを作成し、response
変数の定義を変更するだけである:
JsonProcessing jsonProcessing = JsonProcessing.create();
CompletionStage<JsonObject> response = webClient.get()
.path("/endpoint")
.register(jsonProcessing.newReader())
.request(JsonObject.class);
設計上リアクティブではないJDBCデータベースに接続するリアクティブアプリケーションに関連した課題に対応するために、Helidon 2.0.0-M1は、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チームは、この新機能をプレビューするために、Javaコミュニティ向けにこのデモアプリケーションを作成した。
Helidon 2.0.0-M2を導入した開発者は、新しいHelidon CLIツールを使用して、コマンドラインからHelidonアプリケーションを作成、構築、および実行できるようになった。Quarkus (quarkus:dev
) が提供するホットリロードと同様に、組み込みの開発ループはソースファイルを監視し、ソースコードが変更されるとアプリケーションの再起動をトリガーする。個別のダウンロードとインストールが必要である。インストールにより、使用可能なコマンドラインオプションを以下に示す:
非同期メッセージングは、マイクロサービスアプリケーションの不可欠な部分である。そのために、MicroProfileスタンドアロンAPI、Reactive MessagingおよびReactive Streams Operatorsの実装がバージョン2.0で導入される。両方のAPIは、Helidon SEおよびHelidon MPアプリケーションで使用できる。ただし、Helidon MPで使用できるのはReactive Messagingのみである。Helidon SE APIとの整合性を高めるために、同等のReactive Messaging APIが将来のリリースで計画されている。Helidonは、Kafka for Reactive Messagingもサポートし、将来のリリースで追加のコネクタが計画されている。
Javaコミュニティは、Helidon 2.0の最終リリースでいくつかの重大な変更を期待できる。特に、Java 8のサポートが終了し、JDK11がHelidonアプリケーションの構築に必要な最小のJavaバージョンになる。一部のHelidonパッケージも削除され、java.util
、java.lang
、およびjava.io
にある対応するパッケージが優先される。Helidon 2.0でのすべての変更の詳細は、変更ログに記載されている。
リソース
- Where Helidon Flies、Dmitry Kornilov氏による (February 5, 2020)
- Helidon DB Client、Tomáš Kraus氏による (February 27, 2020)
- Helidon WebClient、David Král氏による (March 23, 2020)
- Introducing the Helidon CLI、Santiago Pericas-Geertsen氏による (March 24, 2020)
- Reactive Messaging with Helidon 2.0、Daniel Kec氏による (March 25, 2020)