Upgrade to Pro — share decks privately, control downloads, hide ads and more …

JJUG CCC 2024 Fall MicroProfile 7.0 最新状況ご紹介 / I...

JJUG CCC 2024 Fall MicroProfile 7.0 最新状況ご紹介 / Introduction to MicroProfile 7.0

2024/10/27に開催されたカンファレンス「JJUG CCC 2024 Fall」に登壇した際の資料です。
https://ccc2024fall.java-users.jp/

More Decks by 三菱UFJインフォメーションテクノロジー株式会社

Other Decks in Technology

Transcript

  1. Copyright(C) 2024 Mitsubishi UFJ Information Technology Ltd. All rights reserved.

    タイトル MSPゴシック 24pt Title Arial Regular 24pt 最大3行まで JJUG CCC 2024 Fall MicroProfile7.0最新状況ご紹介 三菱UFJインフォメーションテクノロジー株式会社 デジタルイノベーション本部 髙橋 博実 2024年10月27日
  2. Copyright(C) 2024 Mitsubishi UFJ Information Technology Ltd. All rights reserved.

    髙橋 博実 たかはし ひろみ これまでのお仕事 市場リスク計算に 関するアプリ開発 社内アプリケーション フレームワーク開発 スマートフォン アプリ開発(Scrum開発) 2 新技術調査、開発プロセス モダナイゼーション推進 海外Javaカンファレンス参加歴 JavaOne 2010頃から複数回, Oracle Code One 2019 SpringOne 2018 , JAX-London 2023 等 自己紹介 三菱UFJインフォメーションテクノロジー(MUIT) デジタルイノベーション本部 シニアテクニカルリード
  3. Copyright(C) 2024 Mitsubishi UFJ Information Technology Ltd. All rights reserved.

    目次 MicroProfile概要 04 MicroProfileの各種機能の紹介 13 MicroProfile 7.0について 25 まとめ 33 3
  4. Copyright(C) 2024 Mitsubishi UFJ Information Technology Ltd. All rights reserved.

    MicroProfileとは ◼ Jakarta EE をベースし、マイクロサービス構築のための エンタープライズJavaを最適化するためのコミュニティベースの標準仕様群 ◼ 仕様策定メンバーはアプリケーションサーバーやJDKディストリビューションを提供 しているベンダーおよび世界各地のJavaユーザーグループで構成される Copyright(C) 2019 Mitsubishi UFJ Information Technology Ltd. All rights reserved. Payara 富士通 Tomitribe IBM Red Hat Microsoft Oracle Garden State JUG iJUG PRIMETON普元 4 AJUG
  5. Copyright(C) 2024 Mitsubishi UFJ Information Technology Ltd. All rights reserved.

    Java EE、Jakarta EEとの機能差異 ◼ MicroProfileはJava EEのバージョンアップの進化が遅いという課題から 誕生した経緯もあり、以下の状況となっている ⚫ Jakarta EE の一部機能をサポート - Core Profile » JAX-RS » CDI » JSON-P 等 ⚫ Eclipse MicroProfile独自の機能をスピード感を持って拡充、以下は代表例 - Config - Fault Tolerance - Health(過去はHealth Checkと呼んでいたもの) - Telemetry Copyright(C) 2019 Mitsubishi UFJ Information Technology Ltd. All rights reserved. ※ https://microprofile.io/ より画像引用 5
  6. Copyright(C) 2024 Mitsubishi UFJ Information Technology Ltd. All rights reserved.

    スタンドアロン仕様 先ほどの図に記載があったもの以外にスタンドアロン仕様として以下も存在する ◼ Reactive Streams Operators ⚫ 非同期ストリーミングを提供する2つの異なるライブラリが、相互にデータをストリーミングできるようにする Reactive Streamsを3rd Party製ライブラリ依存とならないように標準仕様化したもの ◼ Reactive Messaging ⚫ Reactive Streamsに基づく非同期メッセージングに関する標準仕様 ◼ GraphQL ⚫ JavaでのGraphQLの開発において3rd Party製ライブラリ依存とならないように標準仕様化したもの ◼ Context Propagation ⚫ マネージスレッド(コンテナによって管理されるスレッド)によってサポートされるCompletableFutureを取得、 管理管理を容易化する標準仕様 ◼ 他にも、Long Running Action、Context Propagation、Metrics がある 6
  7. Copyright(C) 2024 Mitsubishi UFJ Information Technology Ltd. All rights reserved.

    これまでのリリース推移~初回リリースから4.1まで~ 2017 2018 2019 2020 MircoProfile 1.0(Fall 2016) JAX-RS2.0 CDI 1.0 JSON-P 1.0 MircoProfile 1.1 (Aug 2017) Config 1.0 MircoProfile 1.2 (Sep 2017) Config 1.1 Fault Tolerance1.0 Health1.0 Metrics1.0 JWT1.0 MircoProfile 1.3 (Dec 2017) Config 1.2 Metrics1.1 OpenApi1.0 Open Tracing1.0 Rest Client1.0 MircoProfile 1.4 (June 2018) Config 1.3 Fault Tolerance1.1 JWT1.1 Open Tracing1.1 Rest Client1.1 MircoProfile 2.0 (July 2018) JAX-RS2.1 (Java EE8) CDI2.0(Java EE8) JSON-P1.1(Java EE8) JSON-B1.0(Java EE8) MircoProfile 2.1 (Oct 2018) Open Tracing1.2 MircoProfile 2.2 (Feb 2019) Fault Toleraance2.0 OpenAPI1.1 Open Tracing1.3 Rest Client1.2 MircoProfile 3.0 (June 2019) Metrics2.0 Health Check2.0 Rest Client1.3 MircoProfile 3.2 (Nov 2019) Metrics2.2 Health Check2.1 MircoProfile 3.1 (Oct 2019) Metrics2.1 Health Check2.1 MircoProfile 3.3 (Feb 2020) Config1.4 Metrics2.3 Fault Tolerance2.1 Rest Client1.4 Health Check 2.2 MircoProfile 4.0 (Nov 2020) Config2.0 Metrics3.0 Fault Tolerance3.0 Rest Client2.0 Health Check 3.0 JWT RBAC1.2 OpenAPI2.0 Open Tracing2.0 高頻度のリリースが継続されている Java EEのバージョンアップ追随 などもされている 7 MircoProfile 4.1 (July 2021) Health Check 3.1 2021
  8. Copyright(C) 2024 Mitsubishi UFJ Information Technology Ltd. All rights reserved.

    これまでのリリース推移~5.0以降~ 2022 2023 2024 MircoProfile 5.0(Nov 2021) Jakarta EE 9.1 Config 3.0 Fault Tolerance 4.0 JWT RBAC 2.0 MircoProfile 6.0 (Dec 2022) Jakarta EE 10 Core Profile JWT RBAC 2.1 Metrics 5.0 OpenAPI 3.1 Telemetry 1.0 MircoProfile 6.1 (Oct 2023) Config 3.1 Metrics 5.1 Telemetry 1.1 JWT Authentication 2.1 MircoProfile 7.0 (Aug 2024) Fault Tolerance 4.1 Health Check4.0 Telemetry 2.0 OpenAPI 4.0 JWT Authentication 2.1 Rest Client 4.0 頻度は多少下がっているが 着実にリリース継続されている 頻度低下理由 ・2020に設立されたMicroProfile ワーキンググループ設立により、 リリースプロセスが整備された ・JakartaEE10対応とリソースの競合 Jakarta EEのjavax移行も 2021リリースの5.0版から 対応されている 8 Metrics 4.0 Config 3.0 OpenAPI 3.0 OpenTracing 3.0 Rest Client 3.0
  9. Copyright(C) 2024 Mitsubishi UFJ Information Technology Ltd. All rights reserved.

    MicroProfileの実装製品 9 MicroProfile 7.0 Presentation資料より抜粋 https://docs.google.com/presentation/d/1gg67Gv38B8QJ9o0u_pwoiQf3NvigB_MgL7ZgabL_I2U/edit?usp=sharing
  10. Copyright(C) 2024 Mitsubishi UFJ Information Technology Ltd. All rights reserved.

    標準仕様を採用するということについて ◼ MicroProfileは仕様群であり、実装は持たない (一つのOSSであるSpringとは異なる) ◼ 仕様に則ってライブラリを実装する製品提供者と、仕様に則ってライブラリを実装する アプリ開発者双方にとってメリットのある形となっている MicroProfileなどの 標準仕様 MicroProfileの仕様に 則った製品・OSS アプリケーション実装部分 アプリ開発者 実装する 仕様を 理解する 製品、 ライブラリを 用意する 標準仕様を使うことのメリット アプリ開発者は標準仕様を理解する ことで、どの製品であっても スキルやソースの流用が可能 例1:AプロジェクトではPayaraを 使っているがBではLibertyを使う 開発者のキャッチアップがしやすい 例2:Aプロジェクトは製品EOLの タイミングでLibertyに乗り換える その際の影響が限定的になる 10
  11. Copyright(C) 2024 Mitsubishi UFJ Information Technology Ltd. All rights reserved.

    UberJar ◼ MicroProfile自体の仕様に入っているわけではないが、 MicroProfile実装はUberJar機能を 保有していることが多い ◼ UberJarとは、一つのJarファイルの中に依存ライブラリを含む全てのライブラリを含んで アーカイブする形式を示す ◼ Jakarta EEでのアプリケーションの場合、①アプリケーションサーバの起動、②業務アプリ ケーションのデプロイという2段階であったがUberJar形式の場合はアプリケーションサーバ 関連ライブラリも含めて一つのJarファイルとなるため取り扱いが楽になる アプリケーションWar or Ear Jakarta EEアプリケーションサーバ Jakarta EE サーバのアプリ実行 ②アプリのデプロイ ①アプリケーション サーバの起動 UberJar アプリケーション実装部分 アプリケーションサーバ 関連も含む依存ライブラリ UberJar形式でのアプリ実行 ①アプリの 実行のみ 11
  12. Copyright(C) 2024 Mitsubishi UFJ Information Technology Ltd. All rights reserved.

    簡単に試すには ◼ MicroProfile Starterが便利 ⚫ 見た目どおり、Spring Initializrに提供機能も似ている ⚫ テンプレートソースプロジェクトのダウンロードが可能 MicroProfileの バージョンを 選定(現状は5.0 までしかない) 実装サーバーを選定 (TomEE、Payara Micro、Open Liberty など) MicroProfile 各機能の利用 有無を選定 Java SEの バージョンを選定 Copyright(C) 2019 Mitsubishi UFJ Information Technology Ltd. All rights reserved. プロジェクトの ソース一式の ダウンロード 12 MicroProfile Starterより抜粋 https://start.microprofile.io/
  13. Copyright(C) 2024 Mitsubishi UFJ Information Technology Ltd. All rights reserved.

    目次 MicroProfile概要 04 MicroProfileの各種機能の紹介 13 MicroProfile 7.0について 25 まとめ 33 13
  14. Copyright(C) 2024 Mitsubishi UFJ Information Technology Ltd. All rights reserved.

    Jakarta RESTful Web Services(Jakarta EE) ◼ RESTサービスを作成する仕様 サービスA or 各種クライアント サービスB ここ 14 実行結果サンプル
  15. Copyright(C) 2024 Mitsubishi UFJ Information Technology Ltd. All rights reserved.

    Jakarta Contexts and Dependency Injection(Jakarta EE) ◼ Dependency Injectionに関する仕様 ◼ レイヤ-ドアーキテクチャやクリーンアーキテクチャの際にクラス間依存を疎結合にしたり、 依存性逆転させるために利用 依存性注入 ここ 15
  16. Copyright(C) 2024 Mitsubishi UFJ Information Technology Ltd. All rights reserved.

    Jakarta JSON Binding、Jakarta JSON Processing (Jakarta EE) ◼ JSONを扱う仕様 ◼ JSONをやりとりするだけであれば、SpringのRestControllerと類似 サービスA or 各種クライアント サービスB ここ 16 実行結果サンプル
  17. Copyright(C) 2024 Mitsubishi UFJ Information Technology Ltd. All rights reserved.

    Rest Client ◼ RESTクライアントに関する仕様 ◼ タイプセーフである サービスB ここ サービスA 17
  18. Copyright(C) 2024 Mitsubishi UFJ Information Technology Ltd. All rights reserved.

    Fault Tolerance ◼ マイクロサービスとしてアプリケーションを作る際に別のサービスとの関連と、 自サービス内のビジネスロジックを分離することを目的とした機能 ◼ 右記の例には記載は無いが、 サーキットブレイカーの機能も仕様化 されている ⚫ 別サービスとの連携状況に応じて、自動でClosed、 Open、Half-openの状態を遷移しサービス同士の 障害影響を局所化される サービスB ここ サービスA 18
  19. Copyright(C) 2024 Mitsubishi UFJ Information Technology Ltd. All rights reserved.

    Config ◼ 各種環境毎の設定の切り替えを容易にする機能 ◼ Jakarta EE側にも取り込まれ Jakarta Configとして広く 使えないか、検討中 サービス ここ ソースコード内のデフォルト値 設定が有効となる優先度 設定ファイルで指定した値 環境変数 実行時引数などの システム変数 19 設定した内容の取り方に関する実装例
  20. Copyright(C) 2024 Mitsubishi UFJ Information Technology Ltd. All rights reserved.

    Health ◼ サービスのヘルスチェック(生死監視)応答に関する機能 ◼ Kubernatesで使われるLivenessチェックとReadinessチェック、Startupチェックを簡単に 実現できる サービス ここ 生死確認通信 20
  21. Copyright(C) 2024 Mitsubishi UFJ Information Technology Ltd. All rights reserved.

    JWT Authentication ◼ OpenID Connect (OIDC) と JSON Web Tokens (JWT)を使って認証機能 ◼ role based access control (RBAC)で作られるマイクロサービスとして 提供されることを前提としている サービス ここ 21
  22. Copyright(C) 2024 Mitsubishi UFJ Information Technology Ltd. All rights reserved.

    OpenAPI ◼ OpenAPI v3 specificationに沿ったAPI仕様を提供する機能 ◼ 設定なしで出力可能 サービス ここ 22
  23. Copyright(C) 2024 Mitsubishi UFJ Information Technology Ltd. All rights reserved.

    各種機能のキャッチアップ方法 ◼ Open Libertyのガイドが各種機能やユースケースごとの試すコードとガイディングが 丁寧にされているので、読みながら手を動かして理解することができる ◼ JavaやMavenのみの事前準備であとは手順どおりにgit clone、コード生成、コマンド実行す るだけで動くものベースで確認することができる ◼ UberJar形式なので アプリケーションサーバ の準備不要 ◼ クラウド版もあり、その 利用であれば、ブラウザ のみで試すことができる (利用者登録が必要) Open Libertyのガイドより抜粋 https://openliberty.io/guides/
  24. Copyright(C) 2024 Mitsubishi UFJ Information Technology Ltd. All rights reserved.

    目次 MicroProfile概要 04 MicroProfileの各種機能の紹介 13 MicroProfile 7.0について 25 まとめ 33 24
  25. Copyright(C) 2024 Mitsubishi UFJ Information Technology Ltd. All rights reserved.

    MicroProfile 7.0 Update内容 MicroProfile 7.0 Presentation資料より抜粋 https://docs.google.com/presentation/d/1gg67Gv38B8QJ9o0u_pwoiQf3NvigB_MgL7ZgabL_I2U/edit?usp=sharing
  26. Copyright(C) 2024 Mitsubishi UFJ Information Technology Ltd. All rights reserved.

    MicroProfile Telemetry 2.0 ◼ MicroProfile Telemetry経由でOpenTelemetry APIを実行できるように変更された ⚫ OpenTelemetryとは、CNCF(Cloud Native Computing Foundation)で採り上げられている 分散トレーシング、メトリクス、ログの収集とエクスポートを統一的に行うためのオープンソースのフレームワーク ⚫ 異なるプラットフォームや言語に対応しており、既存の監視ツールやダッシュボードと統合することができるので これにより、開発者は一貫した方法でテレメトリーデータを収集し、分析することが可能になる ⚫ 実際の仕様としてのリポジトリでも OpenTelemetryへの依存がpom.xmlに追加されていた ⚫ OpenTelemetry LoggingをMicroProfile経由で容易に 使えるようになった - API利用や @InjectでのLoggerProviderの インジェクション 本仕様の管理リポジトリより抜粋 https://github.com/eclipse/microprofile-telemetry/ blob/2.0/pom.xml
  27. Copyright(C) 2024 Mitsubishi UFJ Information Technology Ltd. All rights reserved.

    MicroProfile OpenAPI 4.0 ◼ 自動で作成されるOpenAPI Specificationがv3.0系から、最新であるv3.1系にUpdateされた ⚫ OpenAPI Specificationのv3.0からv3.1への変更内容は主に以下のもの - JSON Schema 2020-12と完全な互換性の担保 - nullableが廃止され、JSON Schemaのtypeにnullを含める方法が推奨される 例 type: ["string", "null"] - Webhookのサポートが追加され、APIがイベント駆動の通信を行う場合の仕様定義が可能になった ⚫ 利用する際にはOpenAPI Specificationを利用している各種サービス、ツールへの影響確認が必要 - 利用しているクラウドサービスなどの対応状況 - Visual Studio Codeの拡張機能の対応状況 ⚫ なお、 OpenAPI Specificationのv3.2系の仕様策定が 進んでいる状況 OpenAPI Specificationの管理リポジトリより抜粋 https://github.com/OAI/OpenAPI-Specification/milestones
  28. Copyright(C) 2024 Mitsubishi UFJ Information Technology Ltd. All rights reserved.

    MicroProfile Rest Client 4.0 ◼ Jakarta EE 10 Coreプロファイルに対応された ◼ RestClientBuilderにてオブジェクトを作成する際にヘッダーを追加できるようになった ⚫ APIの設計、管理、ドキュメント化を支援するオープンソースのツールであるApicurioの開発者が本変更のニーズを 仕様策定者に提出していた 本仕様の公開サイトより抜粋 https://download.eclipse.org/microprofile/microprofile-rest-client-4.0/ microprofile-rest-client-spec-4.0.html#_sample_builder_usage
  29. Copyright(C) 2024 Mitsubishi UFJ Information Technology Ltd. All rights reserved.

    MicroProfile Fault Tolerance 4.1 ◼ MicroProfile Telemetry にて、本仕様メトリクス指標が取れるように機能追加された ⚫ @Retry、@Timeout、@CircuitBreaker、@Bulkhead、@Fallbackアノテーションが付けられた各メソッドに対して、 自動的にメトリクスが追加されるようになった 本仕様の公開サイトより抜粋 https://download.eclipse.org/microprofile/microprofile-fault-tolerance-4.1.1/ microprofile-fault-tolerance-spec-4.1.1.html#_relationship_to_microprofile_telemetry
  30. Copyright(C) 2024 Mitsubishi UFJ Information Technology Ltd. All rights reserved.

    その他、MicroProfileの対応計画について ◼ 直近の議論の内容を見ると、来年度計画、目標について以下のような議論が始まっている ⚫ MicroProfileの次期バージョンをリリース(7.1 or 8.0) ⚫ MicroProfile AIについて検討を進める - LangChain4Jの代わりを目指しているものではなく、MicroProfile Rest Clientから容易に使えるよう にという用途で検討中 » 参考:LangChainとはLLM(大規模言語モデル)を用いた開発を効率的に行うライブラリ https://www.langchain.com/ - 直近注力しており週次で検討ミーティングを開いている ⚫ CN4J Allianceを活用し、Jakarta EEとMicroProfileの連携、調整について進めていく - ConfigやJWT Bridgeなどがモデルとなる ⚫ 対象とするJava SE については、Java SE 17 / 21 / 25+ を検討 ⚫ Springフレームワークとの差異を明確にしながらアピールポイントを打ち出していく
  31. Copyright(C) 2024 Mitsubishi UFJ Information Technology Ltd. All rights reserved.

    MicroProfileの活用方法について ◼ Jakarta EE準拠のアプリケーションサーバーの直近のバージョンでMicroProfile機能が利用で きる、というケースが出てきている ⚫ Open Liberty、WebSphere Application Server Liberty、WildFly、JBoss EAP 等 ◼ 既存のSpring Boot以外のJavaアプリケーションをアプリケーションサーバー上で 動いているものについてはこれらを活用していくことが有用 ◼ また、プロダクション環境ではJakarta EE準拠のアプリケーションサーバーを利用するが ローカル環境では、 Open LibertyやWildFlyかつUberJarにて開発をすることで 開発生産性を向上させる、ということも狙うことが有効と考える(コンテナも併せて活用) 31 UberJar アプリケーション実装部分 アプリケーションサーバ 関連も含む依存ライブラリ UberJar形式でのアプリ実行 ローカル開発 アプリケーションwarファイル Jakarta EEアプリケーションサーバ リグレッション環境/プロダクション環境では Jakarta EE サーバのアプリ実行
  32. Copyright(C) 2024 Mitsubishi UFJ Information Technology Ltd. All rights reserved.

    目次 MicroProfile概要 04 MicroProfileの各種機能の紹介 13 MicroProfile 7.0について 25 まとめ 33 32
  33. Copyright(C) 2024 Mitsubishi UFJ Information Technology Ltd. All rights reserved.

    MicroProfileの活用方法について ◼ Jakarta EE準拠のアプリケーションサーバーの直近のバージョンでMicroProfile機能が利用で きる、というケースが出てきている ⚫ Open Liberty、WebSphere Application Server Liberty、WildFly、JBoss EAP 等 ◼ 既存のSpring Boot以外のJavaアプリケーションをアプリケーションサーバー上で 動いているものについてはこれらを活用していくことが有用 ◼ また、プロダクション環境ではJakarta EE準拠のアプリケーションサーバーを利用するが ローカル環境では、 Open LibertyやWildFlyかつUberJarにて開発をすることで 開発生産性を向上させる、ということも狙うことが有効と考える(コンテナも併せて活用) 33 UberJar アプリケーション実装部分 アプリケーションサーバ 関連も含む依存ライブラリ UberJar形式でのアプリ実行 ローカル開発 アプリケーションwarファイル Jakarta EEアプリケーションサーバ リグレッション環境/プロダクション環境では Jakarta EE サーバのアプリ実行
  34. Copyright(C) 2024 Mitsubishi UFJ Information Technology Ltd. All rights reserved.

    まとめ ◼ MicroProfileは2016年の登場以降、順調に進化を遂げており、各種外部仕様への追従や 世の中の注目を集めているAI関連の取り込みなど対応を続けている ◼ Java EE/Jakarta EE関連でこれまで機能具備が追いついていなかったCloud Nativeなアプリ ケーションで必要な機能拡充が中心である ◼ MicroProfile StarterやOpen Libertyのガイド等もあり、手軽に始めやすい状況なので ローカル環境利用や、技術検証などの用途から触ってみて、 要望の意見出しなどコントリビュート活動を一緒にしていきましょう ◼ Jakarta EEとの統合については、期待を持ちながら待ちたいと思います 34
  35. Copyright(C) 2024 Mitsubishi UFJ Information Technology Ltd. All rights reserved.

    本プレゼンテーションにより、視聴者と三菱UFJインフォメーションテクノロジー株式会社の間には何ら委任その他の契約関係が発生するものではなく、当社 が一切法的な義務・責任を負うものではありません。 本資料は信頼できると考えられる各種データに基づいて作成されていますが、当社はその正確性、完全性を保証するものではありません。ここに示した全 ての内容は、当社の現時点での判断を示しているに過ぎません。 また、本資料に関連して生じた一切の損害については、当社は責任を負いません。その他専門的知識に係る問題については、必ず貴社の弁護士、税理士、 公認会計士等の専門家にご相談のうえでご確認ください。 35 免責事項 35
  36. Copyright(C) 2024 Mitsubishi UFJ Information Technology Ltd. All rights reserved.

    三菱UFJインフォメーションテクノロジー株式会社 デジタルイノベーション本部 髙橋 博実 〒164-0001 東京都中野区中野4-10-2 中野セントラルパークサウス https://www.it.mufg.jp/ ご清聴ありがとうございました