MicroProfile 3.0 Support Comes to Helidon

このエントリは以下のエントリをベースにしています。
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レスポンスのメッセージ本体が変更され、outcomestatestatusに置き換えられました。 また、readiness (/health/ready) と liveness (/health/live) の両エンドポイントがKubernetesとのスムーズな統合のために導入されました。

これまでの /health エンドポイントは削除されていませんので、既存のアプリケーションは変更しなくてもそのまま動作します。

新たな仕様により、2個の注釈(@Liveness@Readiness)が導入されています。Helidon SEで、2個の対応するメソッド(addReadinessaddReadiness)が導入され、これまでのメソッド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

Persistence

Build and Deploy

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でお会いしましょう。

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください