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

クラウドネイティブJava技術 Jakarta EE & MicroProfile ディープダイブ

クラウドネイティブJava技術 Jakarta EE & MicroProfile ディープダイブ

Kenji Kazumura

April 27, 2023
Tweet

More Decks by Kenji Kazumura

Other Decks in Programming

Transcript

  1. 自己紹介 © 2023 Fujitsu Limited Jakarta EE 仕様策定委員 MicroProfile ステコミ委員

    JCP Executive Committee メンバー Eclipse Foundation ボードディレクター EclipseCon、JakartaOne、JJUGなどで登壇 @kkzr 2
  2. 免責事項 © 2023 Fujitsu Limited 本セッションには、未確定の内容が含まれています。 Eclipse Foundation内のJakarta EE /

    MicroProfileワーキンググループや、 Jakarta EE / MicroProfile コミュニティ内で議論されている内容は、 今後、変更される可能性があります。 ー 4
  3. Java EEからJakarta EEへ © 2023 Fujitsu Limited リリース間隔 J2EE1.2 J2EE1.3

    JavaEE5 JavaEE6 JavaEE7 JavaEE8 JCP設立 Jakarta EE 8 Jakarta EE ワーキンググループ設立 (Eclipse Foundation) Java EE技術の移管 Jakarta EE 9.1 Jakarta EE 9 Jakarta EE 10 J2EE1.4 1995 2000 2015 2005 2010 2020 2019 6
  4. Jakarta CDI Lite, Jakarta EE Core Profile, セキュリティ強化 Java SE

    11, 複数実装が リリース時のCIに jakarta 名前空間, Java SE 8 deprecate仕様 javax 名前空間, 新しいプロセス、 新しいライセンス、新しいロゴ Eclipse Foundation からEclipse GlassFishのリリース JCPからのリリース Jakarta EEのリリース © 2023 Fujitsu Limited 2022年9月リリース Sources, TCKs, Docs Java SE 21 2024年1Q? Jakarta EE 9.1 Jakarta EE 11 Jakarta EE 10 Java EE 8 Java EE 8 Jakarta EE 8 Jakarta EE 9 12
  5. Debugging Support 2.0 Enterprise Beans Lite 4.0 Managed Beans 2.0

    Transactions 2.0 Bean Validation 3.0 Concurrency 3.0 CDI 4.0 Expression Language 5.0 Faces 4.0 Security 3.0 Servlet 6.0 Standard Tag Libraries 3.0 Server Pages 3.1 WebSocket 2.1 Authentication 3.0 Persistence 3.1 Jakarta EE 10 Web Profile JSON Binding 3.0 Annotations 2.1 Interceptors 2.1 Dependency Injection 2.0 CDI Lite 4.0 Authorization 3.0 Activation 2.1 Batch 2.1 Connectors 2.1 Messaging 3.1 Enterprise Beans 4.0 Mail 2.1 Restful Web Services 3.1 JSON Processing 2.1 改版 非更新 新規 Jakarta EE 10 Core Profile Jakarta EE 10 Platform © 2023 Fujitsu Limited 13
  6. 20以上のコンポーネント 仕様の更新によりクラウド ネイティブアプリケーショ ンの作成が容易に Java SE 11対応(実装に よっては、Java SE 17も

    利用可能)し、JPMS利用に よる恩恵も たくさんのアノテーション が追加され、各APIを合わ せたアプリケーション開発 が容易に JPMSにより、モジュール 化したアプリケーションの 作成が容易に セキュリティ要件を満たし、 高い互換性を提供 簡単な開発 「Core Profile」の新設 マイクロサービス開発に 適した軽量ランタイムを ターゲット 新仕様「CDI-Lite」 軽量化 軽量化 Jakarta EE 10 特徴 © 2023 Fujitsu Limited 軽量化 モダナイゼーション 14
  7. Jakarta EE 10 テーマ © 2023 Fujitsu Limited ⚫ Jakarta

    Concurrencyにおける @Asynchronous の利用 ⚫ Jakarta BatchでのCDIサポートを改善 Java SE技術への対応 ⚫ Jakarta ConcurrencyにおけるCompletionStage、 ForkJoinPoolなど並列ストリームの利用 ⚫ Jakarta RESTfull Web Services におけるBootstrap API 標準技術とのギャップ解消 ⚫ Jakarta SecurityにおけるOpenID Connect ⚫ Jakarta PersistenceにおけるUUIDサポート ⚫ Core Profile 互換技術の整理 ⚫ EJB Entity Beans、embeddable EJB Containerなど CDIへの対応 15
  8. Jakarta EE 10 の Java SE レベル © 2023 Fujitsu

    Limited Java SE 8では動かない API ソースレベル Java SE 11 API バイナリレベル Java SE 11 TCK 走行 Java SE 11+ 16
  9. 影響あるパッケージ(抜粋) © 2023 Fujitsu Limited https://gist.github.com/dblevins/9a6d4b1c90986a4116dd738c9e5ef212 完全リストはこちら javax.activation JavaBeansTM Activation

    Framework javax.annotation Common Annotations for the Java Platform javax.batch Batch Applications for the Java Platform javax.decorator Contexts and Dependency Injection for Java javax.ejb Enterprise JavaBeans javax.el Expression Language javax.enterprise Contexts and Dependency Injection for Java javax.enterprise.co ncurrent Concurrency Utilities for Java EE javax.faces JavaServer Faces javax.inject Dependency Injection for Java javax.interceptor Interceptors javax.jms Java Message Service javax.json Java API for JSON Processing javax.json.bind Java API for JSON Binding javax.jws Implementing Enterprise Web Services javax.mail JavaMail javax.persistence Java Persistence API javax.resource Java EE Connector Architecture javax.security.auth. message Java Authentication Service Provider Interface for Containers (JASPIC) javax.security.enter prise Java EE Security API javax.security.jacc Java Authorization Contract for Containers (JACC) javax.servlet Java Servlet javax.servlet.jsp JavaServer Pages javax.servlet.jsp.jstl Standard Tag Library for JavaServer Pages (JSTL) javax.transaction Java Transaction API (JTA) javax.validation Bean Validation javax.websocket Java API for WebSocket javax.ws.rs Java API for RESTful Web Services (JAX-RS) javax.xml.bind Java Architecture for XML Binding (JAXB) javax.xml.soap SOAP with Attachments API for Java (SAAJ) javax.xml.ws Java API for XML-Based Web Services (JAX- WS) 18
  10. パッケージ名変換ツール © 2023 Fujitsu Limited https://github.com/eclipse/transformer Eclipse Transformer Apache Tomcat

    migration tool for Jakarta EE https://github.com/apache/tomcat-jakartaee-migration 19
  11. デモ-Eclipse Transformer © 2023 Fujitsu Limited Jakarta EE 8アプリケーションをJakarta EE

    10コンテナで動かす •maven-pluginによるクラスファイル変換 •CLIによるソースファイル変換 Java EE 7 Jakarta EE 8 (Jakarta EE 9) Jakarta EE 10 20
  12. MicroProfileリリース © 2023 Fujitsu Limited 2017 2018 2019 2020 2021

    MicroProfile 1.0 (2016/2) Jax-RS 2.0//Java EE 7 CDI 1.2//Java EE 7 JSON-P 1.0//Java EE 7 MicroProfile 1.1 (2017/8) microProfile-1.0 Config 1.0 MicroProfile 1.2 (2017/9) MicroProfile-1.1 Config 1.1 Fault Tolerance 1.0 Health 1.0 Metrics 1.0 JWT 1.0 MicroProfile 1.3 (2017/12) MicroProfile 1.2 Config 1.2 Metrics 1.1 OpenApi 1.0 OpenTracing 1.0 RestClient 1.0 MicroProfile 1.4 (2018/6) MicroProfile 1.3 Config 1.3 Fault Tolerance 1.1 JWT 1.1 OpenTracing-1.1 Rest Client-1.1 MicroProfile 2.0.1 (2018/7) Jax-RS 2.1//Java EE 8 CDI 2.0//Java EE 8 JSON-P 1.1//Java EE 8 JSON-B 1.0//Java EE 8 MicroProfile 2.1 (2018/10) MicroProfile 2.0 OpenTracing 1.2 MicroProfile 3.0 (2019/6) MicroProfile 2.2 (2019/2) Fault Tolerance 2.0 OpenAPI 1.1 OpenTracing 1.3 Rest Client 1.2 MicroProfile 2.0 Metrics 2.0 Health Check 2.0 Rest Client 1.3 MicroProfile 3.2 (2019/11) MicroProfile 3.0 Metrics 2.2 Health Check 2.1 MicroProfile 3.3 (2020/2) MicroProfile 3.2 Config 1.4 Metrics 2.3 Fault Tolerance 2.1 Health 2.2 Rest Client 1.4 MicroProfile 4.0 (2020/12) Config 3.0 Metrics 3.0 Fault Tolerance 3.0 Health 3.0 Rest Client 2.0 OpenAPI 2.0 OpenTracing 2.0 JWT Auth 1.2 CDI 2.0.2 //Jakarta EE8 JAX-RS 2.1.6//Jakarta EE8 JSON-P 1.1.6//Jakarta EE8 JSON-B 1.0.2//Jakarta EE8 MicroProfile 5.0 (2021/12) MicroProfile 6.0 (2022) Config 3.0 Metrics 4.0 Fault Tolerance 4.0 Health 4.0 Rest Client 3.0 OpenAPI 3.0 OpenTracing 3.0 JWT Auth 2.0 Jakarta CDI 3.0 //Jakarta EE 9.1 Jakarta RESTfull Web Services //Jakarta EE 9.1 Jakarta JSON-P //Jakarta EE 9.1 Jakarta JSON-B 2.0//Jakarta EE 9.1 Jakarta Annotations 2.0 // Jakarta EE 9.1 Config 3.0 Metrics 5.0 Fault Tolerance 4.0 Health 4.0 Rest Client 3.0 OpenAPI 3.1 Telmetry 1.0 JWT Auth 2.1 Jakarta EE 10 Core Profile MicroProfile 4.1 (2021/7) MicroProfile 4.0 Health 3.1 Jakarta Annotations 1.3 2022 MicroProfile ワーキンググループ設立 (2020/10) 2023 23
  13. MicroProfile 5.0 (2021年12月リリース) © 2023 Fujitsu Limited MicroProfile 5.0 Config

    3.0 Fault Tolerance 4.0 JWT Authentication 2.0 Health 4.0 Metrics 4.0 Open Tracing 3.0 Open API 3.0 Rest Client 3.0 スタンドアロン Context Propagation 1.3 Reactive Streams Operators 2.0 アンブレラ外 Reactive Messaging 2.0 GraphQL 1.1 LRA 1.0 Jakarta Annotations 2.0 Jakarta JAX-RS 3.0 Jakarta JSON-P 2.0 Jakarta CDI 3.0 Jakarta JSON-B 2.0 Jakarta EE 24
  14. MicroProfile 6.0 リリース © 2023 Fujitsu Limited 2022年12月22日にリリース このリリースで提供されるもの 4つのMicroProfileコンポーネント仕様

    (Telemetry、 Metrics、JWT、OpenAPI)の更新と、 Jakarta EE 10 Core Profileへの対応 https://github.com/eclipse/microprofile/releases/tag/6.0 25
  15. MicroProfile 6.0 Jakarta EE スタンドアロン MicroProfile 6.0 (2022年12月リリース) © 2023

    Fujitsu Limited Jakarta EE 10 Core Profile Config 3.0 Fault Tolerance 4.0 JWT Authentication 2.1 Health 4.0 Metrics 5.0 Open Tracing 3.0 Open API 3.1 :更新 :最新リリースからの更新なし :新規 Rest Client 3.0 Context Propagation 1.3 Reactive Streams Operators 3.0 Reactive Messaging 3.0 GraphQL 2.0 LRA 2.0 Telemetry 1.0 アンブレラ外 26
  16. MicroProfile JWT Authentication 2.1 © 2023 Fujitsu Limited マイクロサービスエンドポイントのロールベースアクセス制御(RBAC)に OpenID

    Connect(OIDC) ベースの JSON Web Tokens (JWT)を使用 Jakarta EE 9 の依存関係を使用するように更新 仕様のリリース 変更点 https://github.com/eclipse/microprofile-jwt-auth/releases/tag/2.1 https://download.eclipse.org/microprofile/microprofile-jwt-auth- 2.1/microprofile-jwt-auth-spec-2.1.html#release_notes_21 30
  17. MicroProfile Metrics 5.0 © 2023 Fujitsu Limited カスタムのアプリケーションメトリクスを定義、標準フォーマットを使用した 標準エンドポイント上でプラットフォームメトリクスを公開 多次元のメトリクスをサポート

    アプリケーションメトリクスのカスタムスコープへのグループ化が 可能となり、これらのスコープによるメトリクスの問い合わせが 可能に 後方互換性のない変更 仕様の リリース 変更点 https://download.eclipse.org/microprofile/microprofile-metrics-5.0.0/microprofile- metrics-spec-5.0.0.html#_breaking_changes https://github.com/eclipse/microprofile-metrics/releases/tag/5.0.0 https://download.eclipse.org/microprofile/microprofile-metrics-5.0.0/microprofile-metrics-spec- 5.0.0.html#release_notes_5_0 31
  18. MicroProfile Telemetry 1.0 © 2023 Fujitsu Limited サービス境界間のリクエストの流れをトレース 自動トレーシング、手動トレーシング、エージェントによる 計測をサポート

    CDI との統合が提供されており、Tracer、Span、 Baggage の注入が可能 新しい仕様のリリース https://github.com/eclipse/microprofile-telemetry/releases/tag/1.0 32
  19. MicroProfile OpenAPI 3.1 © 2023 Fujitsu Limited アプリケーションから OpenAPI v3

    ドキュメントを直接生成する Java インターフェイスとプログラミングモデルを提供 仕様の リリース (変更点) https://github.com/eclipse/microprofile-open-api/releases/tag/3.1 https://download.eclipse.org/microprofile/microprofile-open-api-3.1/microprofile- openapi-spec-3.1.html#release_notes_31 33
  20. MicroProfile Rest Client 3.0 © 2023 Fujitsu Limited Java インターフェイスで定義される型安全なRESTクライアント

    潜在のCVEを修正する更新 仕様の リリース https://github.com/eclipse/microprofile-rest-client/releases/tag/3.0.1 34
  21. MicroProfile リアクティブ仕様 © 2023 Fujitsu Limited MicroProfile Reactive Streams Operators

    3.0 https://github.com/eclipse/microprofile-reactive-streams-operators/releases/tag/3.0 リアクティブストリームの生成、遷移するデータの処理、消費が簡単にできる オペレーターのセット MicroProfile Reactive Messaging 3.0 メッセージを生成・消費・処理するCDI Bean を宣言するための開発モデルを定義 Reactive Streams と CDI に依存 https://github.com/eclipse/microprofile-reactive-messaging/releases/tag/3.0 MicroProfile Context Propagation 1.3 スレッドに依存しない作業単位間でコンテキストを伝播するための API https://github.com/eclipse/microprofile-context-propagation/releases/tag/1.3 35
  22. Jakarta EE リリース ケーデンス (ステコミ案) © 2023 Fujitsu Limited 2023/9

    2025/9 2018/9 2024/3 2026/3 Jakarta EE 10 Java 11 2022/9 フィーチャーリリースからタイムボックスリリースへ Java SE リリースとのアライメント Java SE 主要リリース(※)から6か月後のリリース (*)Java SEは半年毎にメジャーアップするが、Oracle社は2年毎のバージョンをLTSと定義している。 Java 25 Jakarta EE 12 Java 21 Jakarta EE 11 37
  23. Jakarta EE 11 方向性 (ステコミ提唱) © 2023 Fujitsu Limited ターゲット

    Java SE バージョン : Java SE 21 ターゲット リリース日:GA 2024/Q1 優先事項 ⚫ 統合APIによる開発者エクスペリエンス向上 ⚫ 新しい仕様 ⚫ 最新のJavaでビルド ⚫ コミュニティからのコントリビューション 38
  24. 最新Java SE/JDKを利用 © 2023 Fujitsu Limited これまでの既存機能(リアクティブFlow API)も RecordやVirtual Threadなどの新機能の活用

    Jakarta EE APIにおける、Java拡張機能 (jlinkやGraalVMイメージ)の位置づけ明確化 Jakarta EE Platform以外でのスタンドアロン (Java SEランタイム単独)利用 41
  25. Streamlet API © 2023 Fujitsu Limited Jakarta RESTfull Web Services

    Jakarta Servlet Coreプロファイル 現状 ServletとJAX-RSの、それぞれがHTTPスタックを保持 Coreプロファイルには、JAX-RSのみ JAX-RSの実装がServletベースになっている場合あり Streamlet API (HTTPスタック) 42
  26. MicroProfileとの協調 © 2023 Fujitsu Limited 候補 JWT Authentication Context Propagation

    Jakarta Security Jakarta Concurrency MicroProfileとの協調方法については協議中 コピーするのか、参照なのか 互換性の考え方、リリース間隔など、非技術的課題も検討中 MicroProfileの仕様から、Jakarta EEへ取り込み または、参照を検討中 43
  27. Virtual Thread 対応 © 2023 Fujitsu Limited Project Loom スレッドプールは使うな

    同時処理数を制限したいなら、セマフォを使え スレッドローカルは使うな 既存のJakarta EE実装は、スレッドプールをベースに実装 対応検討はこれから 44
  28. コミュニティからのコントリビューション © 2023 Fujitsu Limited コミッター、コントリビューターの増加 プロセス(仕様・TCK・互換申請)の簡素化 ⚫ コミュニティからのフィードバックループ ⚫

    サービスリリース(仕様・TCKのアップデート)作成を加速 学習の容易化 ⚫ チュートリルの充実 ⚫ コンテンツのローカリゼーション(日本語・中国語) 45
  29. Jakarta EE 11 スケジュール (案) © 2023 Fujitsu Limited コンポーネント

    仕様プランレビュー TCK SecurityManager対応 TCK Java SE 21対応 プラットフォームリリース 2023/Q1 2023/Q2 2023/Q3 2023/Q4 2024/Q1 プラットフォーム 仕様プランレビュー マイルストーンリリース 議論 白熱中 46
  30. Jakarta EE 11 の Java SE レベル (案) © 2023

    Fujitsu Limited Java SE 11では動かない API ソースレベル Java SE 21 API バイナリレベル Java SE 21 TCK 走行 Java SE 21+ 47
  31. プロジェクトリードへのアンケート © 2023 Fujitsu Limited 仕様 Jakarta EE 11 でのリリース予定

    24/Q1に 間に合うか? ベースとする Java SEバージョン Jakarta RESTful Web Services Yes Yes Java SE 17 Jakarta MVC Yes Yes Java SE 17 Jakarta Contexts and Dependency Injection Yes Yes Java SE 17 Jakarta Servlet Yes Yes Java SE 11 Jakarta Server Pages Yes Yes Java SE 11 Jakarta WebSocket Yes Yes Java SE 11 Jakarta JSON Binding No Jakarta JSON Processing No Jakarta Activation No Jakarta Mail No Jakarta XML Binding No Jakarta XML Web Services No Jakarta Web Services Metadata No Jakarta SOAP with Attachments No Jakarta NoSQL Yes Yes Java SE 17 Jakarta Data Yes Yes Java SE 17 Jakarta Faces Yes Yes Java SE 17 Jakarta Security Yes Yes Java SE 17 Jakarta Interceptors Yes Yes Java SE 17 Jakarta Concurrency Yes No Java SE 17 48
  32. identiy store 例 © 2023 Fujitsu Limited @EmbeddedIdentityStoreDefinition({ @Credentials( callerName

    = "caller1", password = "secret1", groups = { "VIEW_USER_PAGES", "VIEW_ADMIN_PAGES" }), @Credentials( callerName = "caller2", password = "secret2", groups = { "VIEW_USER_PAGES" }) ) 50
  33. Jakarta Concurrency © 2023 Fujitsu Limited CDIフレンドリーな @Schedule、@Lock @MaxConcurrency の追加

    さらなるCDIセントリック化 (現仕様の主は、2002-2004年に作成) @Resource ManagedExecutorService executor; @Inject ManagedExecutorService executor; デフォルトリソース (java:comp/DefaultManagedExecutorService)取得 51
  34. Jakarta Messaging © 2023 Fujitsu Limited CDIフレンドリーな MDB (EJB Message

    Drive Beans) Java SEブートストラップAPI クラウドネイティブ向けJMS Lite JMS-AMQP相互接続 52
  35. Jakarta Persistence © 2023 Fujitsu Limited persistence.xmlのオプショナル化 JPQLとCriteria APIにSQL機能の追加 Record

    (Java SE) への対応 ⚫ sub-select 例 セカンドレベルキャッシュプロバイダとして JCacheのサポート 53
  36. Jakarta EE 12以降 © 2023 Fujitsu Limited Jakarta MailのCDIベース化 JSON-P、JSON-Bにおける、JSONスキーマのサポート

    ⚫ LRCO (Last Resource Commit Optimization) ⚫ 1フェーズ コミット ⚫ ローカルトランザクション Jakarta Transactionにおける ベンダー固有機能の標準化 58
  37. 2023年 テクニカルゴール (1/2) © 2023 Fujitsu Limited 新しい仕様の評価 ⚫ クラウド(BLOB)ストレージ

    ⚫ コンバーター ⚫ 分散キャッシュ ⚫ サーバーレスプログラミングモデル MicroProfile OpenTelemetryのエンハンス (Metrics/Logging) 新しい仕様の評価 Move、Fork、LTS、、、 60
  38. 2023年 テクニカルゴール (2/2) © 2023 Fujitsu Limited Springとのギャップ評価 ⚫ Javaランタイム

    (Java SE 11/17/21) ⚫ Virtual Threadの評価 ⚫ コンテナ・オーケストレーション インフラ技術の利用 61
  39. MicroProfile 6.1 (案) © 2023 Fujitsu Limited Jakrta EE 9.1対応

    Jakarta EE 9.1 または Jakarta EE 10のどちらでも動作 Open Telemetry 最新版の取り込み MP Metricsマイナーアップデート 2023年6月リリース予定 62
  40. MicroProfile 7.0 (案) © 2023 Fujitsu Limited Open Telemetry Metrics

    JWT 3 Open Telemetry Logging ⚫ MicroProfile独自のAPIを作るか議論 ⚫ MP Metricsをオプショナル化 Jakarta Securityとの関連性 2023年6月リリース予定 63
  41. MicroProfile 7 MicroProfile 6 MicroProfile リリース シナリオ (今後) © 2023

    Fujitsu Limited ユースケース 実装XYZは、 MicroProfile 7準拠と言えるか? Jakarta EE 10 Jakarta EE 11 2022/9 2022/12 2023/6 2024/3 実装XYZは、 ・ Jakarta EE 11 Core Profile のTCKをパスしたCI ・ MicroProfile 7のTCKをパス ・ Jakarta EE 10 Core Profile のTCKは未実施 Core Profile Core Profile 64
  42. MicroProfile 7 MicroProfile 6 Jakarta EE 10 Jakarta EE 11

    Core Profile Core Profile 案1:Jakarta EE複数バージョンサポート © 2023 Fujitsu Limited ユースケース メリット 2022/12 2023/6 Core Profile : MicroProfileのリリース数は少ない デメリット : ポータビリティが低い 2024/3 2022/9 実装 XYZ 65
  43. MicroProfile 7 MicroProfile 6 Jakarta EE 10 Jakarta EE 11

    Core Profile Core Profile 案3:Jakarta EE/Java SE Vup毎にリリース © 2023 Fujitsu Limited ユースケース 2022/12 Core Profile 2022/9 MicroProfile 8 2023/6 2024/3 2024/xx メリット : ポータビリティの確保が容易 デメリット ・各コミュニティ間での監視が必要 ・MicroProfileのリリースが多くなる 実装 XYZ 66
  44. © 2023 Fujitsu Limited Jakarta EE 開発者アンケート 今年は日本語でのアンケートを用意!! 今後のJakarta EE開発の議論への

    重要なインプットとなりますので、 ご協力よろしくお願いします。 5月25日まで https://www.surveymonkey.com/r/63QKBQG?lang=ja 67