このエントリは以下のエントリをベースにしています。
This entry is based on the following one written by Dmitry Kornilov (Eclipse EE4J PMC member, Jakarta EE contributor, JCP star spec lead, Helidon Project lead, Oracle).
https://dmitrykornilov.net/2019/09/14/microprofile-3-0-support-comes-to-helidon/
https://medium.com/oracledevs/microprofile-3-0-support-comes-to-helidon-f72ba752b42f
Helidonの新しいバージョン、1.3が出ました。このリリースの主要機能は、MicroProfile 3.0のサポートですが、その他にも機能追加や不具合の修正、パフォーマンス改善などが含まれています。詳しく見ていきましょう。
MicroProfile 3.0
約1ヵ月前にMicroProfile 2.2をサポートしたHelidon 1.2をリリースしました。その後さらに作業を進めて、Helidon 1.3でMicroProfile 3.0のサポートをするようにいたしました。
ご存じない方のために、MicroProfileとはクラウドネイティブJavaのためのAPI群です。
Eclipse MicroProfile
https://microprofile.io/
多くのモダンなJavaベンダー(Oracle、IBM、Red Hat、Payara、Tomitribeなど)がMicroProfileをサポートしており、この領域におけるデファクトスタンダードになっています。Helidon MicroProfile実装はHelidon MPと呼ばれ、リアクティブやノンブロッキングフレームワークのHelidon SEと共にHelidonのコアをなしています。
MicroProfile 3.0はメジャーリリースで、これには以下のアップデートが含まれています。
- 後方互換性を担保しない変更あり
- Metrics 2.0
- 小規模なアップデート
- HealthCheck 2.0
- Rest Client 1.3
MicroProfile 3.0はMicroProfile 2.2に対する後方互換性がありませんが、Helidonには後方非互換性を持ち込みたくありませんでした。Helidon 1.3ではMicroProfile 2.2とMicroprofile 3.0の両方をサポートします。Helidon MPアプリケーションは以下のバンドルによってMicroProfileのバージョンを選択できます。
MicroProfile 2.2互換にしたい場合
<dependency>
<groupId>io.helidon.microprofile.bundles</groupId>
<artifactId>helidon-microprofile-2.2</artifactId>
</dependency>
MicroProfile 3.0互換にしたい場合
<dependency>
<groupId>io.helidon.microprofile.bundles</groupId
<artifactId>helidon-microprofile-3.0</artifactId>
</dependency>
MicroProfile 2.2への後方互換性はhelidon-microprofile-2.2に依存する既存の全てのHelidonアプリケーションが変更せずに継続して動作することを意図しています。Helidon 1.3の最新のarchetypeを使って作成した新規アプリケーションはhelidon-microprofile-3.0に依存します。
Metrics 2.0 Support
前述の通り、MicroProfile Metrics 2.0では後方非互換の変更だけでなく、数多くの新機能も導入されています。以下はその変更をまとめたものです。
- 既存のカウンタを常にモノトニック(monotonic)なものに制限
- concurrent gaugeと呼ばれる新たなメトリックをサポート
- タグはMetadataではなくMetricIDTagsの一部になった
- Metadataはイミュータブル
- JSONフォーマットに小規模な変更
- PrometheusフォーマットはOpenMetricsフォーマットに(いくつかの小規模なアップデートを含む)
詳細は以下のURLをご覧ください。
MicroProfile Metrics 2.0.1
https://github.com/eclipse/microprofile-metrics/releases/tag/2.0.1
Note: MetricRegistryクラスには、破壊的なシグネチャの変更が入っており、getterメソッドの中には、キーがStringではなくMetricID型であるマップを返すようになったものがあります。MicroProfile Metrics 2.0の最新バージョンにアップグレードするアプリケーションは、これらの使用法を確認して正しいタイプが渡されることを確認し、メトリック検索の失敗を防ぐ必要があります。
Helidon SEアプリケーションでメトリクスを使っている場合も、Helidon 1.3の新機能を活用できます。例えば、MicroProfile 2.0で導入されたconcurrent gaugeの概念はHelidon SEでも利用できます。これらの新機能を使うためには、Helidon SEアプリケーションは以下の依存関係を設定しておく必要があります。
<dependency>
<groupId>io.helidon.metrics</groupId>
<artifactId>helidon-metrics2</artifactId>
</dependency>
既存のHelidon SEアプリケーションは引き続き旧来のhelidon-metricsを依存関係として利用できます。
HealthCheck 2.0 Support
HealthCheck 2.0には重要な変更が含まれています。Health checkレスポンスのメッセージ本体が変更され、outcomeとstateがstatusに置き換えられました。 また、readiness (/health/ready) と liveness (/health/live) の両エンドポイントがKubernetesとのスムーズな統合のために導入されました。
これまでの /health エンドポイントは削除されていませんので、既存のアプリケーションは変更しなくてもそのまま動作します。
新たな仕様により、2個の注釈(@Livenessと@Readiness)が導入されています。Helidon SEで、2個の対応するメソッド(addReadinessとaddReadiness)が導入され、これまでのメソッドaddは廃止されました。
JPA and JTA are Production Ready
Helidonの初期バージョンでJPAとJTAとの統合の早期アクセスバージョンを導入しました。ユーザーからのフィードバックを受けて、問題を修正してパフォーマンスを改善しました。Helidon 1.3ではJPAとJTAのサポートを早期アクセスからProduction Readyに移行しました。
この機能を理解するのに有用なガイドも作成しました。
Guides — Using JPA in Helidon MP
https://helidon.io/docs/latest/index.html#/guides/24_jpa
Hibernate Support
Helidon 1.3ではJPAプロバイダとしてHiberneteを利用できるようになりました。引き続きEclipseLinkを利用することもできます。どちらを選択するかはあなた次第です。依存関係の違いは以下の通りです。
EclipseLinkの場合
<dependency>
<groupId>io.helidon.integrations.cdi</groupId
<artifactId>helidon-integrations-cdi-eclipselink</artifactId
<scope>runtime</scope>
</dependency>
Hibernateの場合
<dependency>
<groupId>io.helidon.integrations.cdi</groupId
<artifactId>helidon-integrations-cdi-hibernate</artifactId
<scope>runtime</scope>
</dependency>
EclipseLinkのサポートと同様に、HelidonのHibernate JPA統合は、EJBを使わない拡張された永続コンテキスト、JTAトランザクション、Bean Validationのサポートを含む、Java EEモードとの完全な互換性を備えています。これは、慣れ親しんだアプリケーションサーバーと同じように機能しますが、Helidonの軽量なMicroProfile環境内で機能します。
GraalVM Improvements
GraalVMのサポートは目的の一つです。各リリースでHelidon SEにおけるGraalVMのサポートを継続的に改善しています。このバージョンではGraalVM 19.2.0をサポートしています。また、JerseyクライアントをHelidon SEアプリケーションで利用でき、ネイティブイメージにすることもできます。
以下はサンプルコードです。
private void outbound(ServerRequest request, ServerResponse response) {
// and reactive jersey client call
webTarget.request()
.rx()
.get(String.class)
.thenAccept(response::send)
.exceptionally(throwable -> {
// process exception
response.status(Http.Status.INTERNAL_SERVER_ERROR_500);
response.send("Failed with: " + throwable);
return null;
});
}
Helidon SE applicationからGraalVMネイティブイメージを生成する方法を説明するガイドを追加しましたので、是非チェックしてください。
Guides — GraalVM Native Images
https://helidon.io/docs/latest/#/guides/36_graalnative
New Guides
Helidonを使う上で有用な、さまざまなHelidon機能の使用方法を説明する新しいガイドを多数追加しました。
Guides — Overview
https://helidon.io/docs/latest/index.html#/guides/01_overview
Getting Started
Basics
- MP Health Check Guide
- SE Health Check Guide
- MP Metrics Guide
- SE Metrics Guide
- MP Config Guide
- SE Config Guide
Persistence
Build and Deploy
- Creating Docker Images
- Building Container Images with Jib
- Deploying to OKE
- Building Native Images with GraalVM
Tutorial
Other features
このリリースには多数の不具合修正、パフォーマンス改善やマイナーアップデートが含まれています。変更内容の詳細情報はリリースノートをご覧ください。
Release notes
https://github.com/oracle/helidon/releases/tag/1.3.0
Helidon on OOW/CodeOne 2019
来週(2019年9月16日)、Oracle Open World と CodeOne が開催されますが、Helidonもそこでご紹介します。ユーザーからHelidonの様々なユースケースを紹介してもらうだけでなく、まもなく登場するHelidon DBのような新機能をHelidonチームからご紹介するセッションがあります。以下はそのリストです。
- Non-blocking Database Access in Helidon SE [DEV5365]
Monday, September 16, 09:00 AM — 09:45 AM - Migrating a Single Monolithic Application to Microservices [DEV5112]
Thursday, September 19, 12:15 PM — 01:00 PM - Hands on Lab: Building Microservices with Helidon
Monday, September 16, 05:00 PM — 07:00 PM - Building Cloud Native Applications with Helidon [CON5124]
Wednesday, September 18, 09:00 AM — 09:45 AM - Helidon Flies Faster on GraalVM [DEV5356]
September 16, 01:30 PM — 02:15 PM - Helidon MicroProfile: Managing Persistence with JPA [DEV5376]
Thursday, September 19, 09:00 AM — 09:45 AM
CodeOneでお会いしましょう。