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

Liberty Dojo 2024 第1回「いまからでも遅くない!LibertyでエンタープライズJavaのモダナイズ」

Liberty Dojo 2024 第1回「いまからでも遅くない!LibertyでエンタープライズJavaのモダナイズ」

2024/6/4に実施されたIBM TechXchange Dojoのオンラインセミナーのセッション資料です。

https://ibm-developer.connpass.com/event/317246/

Takakiyo Tanaka

June 05, 2024
Tweet

More Decks by Takakiyo Tanaka

Other Decks in Technology

Transcript

  1. 2 ⾃⼰紹介 2 n ⽥中 孝清 n ⽇本アイ・ビー・エム株式会社 テクノロジー事業本部 Data

    AI and Automation 事業部 Application Modernization テクニカルセールス n WebSphere Application Serverなどの テクニカルセールスを20年以上担当 n Twitter(X) @TTakakiyo n https://www.linkedin.com/in/takakiyo/
  2. 4 エンタープライズJava技術の業界動向 4 Jakarta EE Java EE J2EE 2024 2006

    2019 MicroProfile ミドルウェアによる クラスタリング 仮想マシン モノリシック オンプレミス コンテナ Kubernetes オープンソース マイクロサービス クラウドネイティブ Serverless DevOps Spring Framework . Spring Boot OpenShift インフラによる クラスタリング
  3. 5 エンタープライズJava技術の業界動向 5 Jakarta EE Java EE J2EE 2024 2006

    2019 MicroProfile ミドルウェアによる クラスタリング 仮想マシン モノリシック オンプレミス コンテナ Kubernetes オープンソース マイクロサービス クラウドネイティブ Serverless DevOps Spring Framework . Spring Boot OpenShift インフラによる クラスタリング
  4. 6 Java EEの歴史 n Java Community Process(JCP)で仕様策定がおこなわれてきた – Java EE

    6までは,Sun Microsystems社が仕様策定を主導 – Java EE 7以降は,Sunを買収したOracle社が仕様策定を主導 6
  5. 8 Jakarta EEの組織 n 4段階のメンバーシップ – Strategic Member – Enterprise

    Member – Participant Member – Guest Member n 3つのCommittee – Marketing Committee – Specification Committee – Steering Committee 8 https://jakarta.ee/membership/members/
  6. 9 Jakarta EEプロジェクトのこれまで n 2019年9⽉ Jakarta EE 8.0 – Jakarta

    EE最初のバージョン – Eclipse Foundationでのコミュニティプロセスをまわすためのバージョン – 技術的には,Java EE 8.0と全く同じ – 仕様名の名前の付け⽅がバラバラだったものが,統⼀性のある名前に変更になった (変なアクロニム多過ぎ問題が改善) n 2020年11⽉ Jakarta EE 9.0 – 名前空間(パッケージ名)をjavaxからjakartaに変更 – いくつかの仕様の削除(旧JAX-RPC, JAX-R, Java EE Management, Java EE Deploymentなど) n 2021年5⽉ Jakarta EE 9.1 – Java SE 11仕様への対応 n 2022年9⽉ Jakarta EE 10 – Core Profileの新設 – 新しい機能やAPIの追加 n 2024年7⽉ Jakarta EE 11公開予定 9
  7. 10 Jakarta EEを構成する仕様の⼀部 n Web Container – Jakarta Servlet –

    Jakarta Pages(JSP) – Jakarta Faces(JSF) n Enterprise Beans Container – Jakarta Enterprise Beans(EJB) n 各種サービス – Jakarta Contexts and Dependency Injection(CDI) – Jakarta Persistence(JPA) – Jakarta Transaction(JTA) – Jakarta Messaging(JMS) – Jakarta Connector(JCA) – Jakarta RESTful Web Services(JAX-RS) – Jakarta XML Web Services(JAX-WS) – Jakarta Concurrency (Concurrency Utility for Java EE) 10 ( )内はJava EEでの名称
  8. 11 名前空間(パッケージ名)の変更 n javaxのパッケージ名は,Oracle社の保持する商標上の制限があるため, Jakarta EEプロジェクトで拡張することは許されなかった – Java EEから拡張していないJakarta EE

    8での使⽤はできた n Jakarta EE 9.0で,全仕様が jakarta名前空間に移⾏された – Java EEからJakarta EEへの移⾏には パッケージ名の変更が必要 n javax名前空間 – Java EE 8 Servlet 4.0, JSP 2.3, JSF 2.3, JAX-RS 2.1, CDI 2.0, JPA 2.2, … n jakarta名前空間 – Jakarta EE 9 Servlet 5.0, Pages 3.0, Faces 3.0, RESTful WS 3.0, CDI 3.0, Persistence 3.0, … – Jakarta EE 10 Servlet 6.0, Pages 3.1, Faces 4.0, RESTful WS 3.1, CDI 4.0, Persistence 3.1, … 11 import javax.annotation.Resource; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.sql.DataSource; import jakarta.annotation.Resource; import jakarta.servlet.ServletException; import jakarta.servlet.annotation.WebServlet; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import javax.sql.DataSource;
  9. 12 エンタープライズJava技術の業界動向 12 Jakarta EE Java EE J2EE 2024 2006

    2019 MicroProfile ミドルウェアによる クラスタリング 仮想マシン モノリシック オンプレミス コンテナ Kubernetes オープンソース マイクロサービス クラウドネイティブ DevOps Spring Framework . Spring Boot OpenShift インフラによる クラスタリング
  10. 13 MicroProfile n マイクロサービス・アーキテクチャーで Javaアプリを実装する際に必要な機能, コンテナプラットフォームと連携する機能を標準化 – Config 分散環境で構成情報を共有 –

    Health Check サービスの稼働状況をチェック – Fault Tolerance エラーハンドリングやリトライを⾃動化 他Open Tracing,Metrics,OpenAPI,TypeSafe REST clientなど n 複数のベンダーによるオープンな仕様策定
  11. 14 エンタープライズJava技術の業界動向 14 Jakarta EE Java EE J2EE 2024 2006

    2019 MicroProfile ミドルウェアによる クラスタリング 仮想マシン モノリシック オンプレミス コンテナ Kubernetes オープンソース マイクロサービス クラウドネイティブ Serverless DevOps Spring Framework . Spring Boot OpenShift インフラによる クラスタリング
  12. 15 Spring Framework / Spring Boot n 標準仕様ではなく,ベンダーによって提供されるOSS – 旧Pivotal社によるフレームワーク

    (PivotalはVMwareに買収,VMwareはBroadcomに買収) n DIなどの先進的な機能を積極的に取り⼊れ n Spring Bootの登場により,アプリケーションサーバーの導⼊が不要になり DevOpsがやりやすく急速に⼈気が⾼まっている n バージョンアップへの追随が⼤変 15
  13. 17 IT技術の変化に対応するためのWebSphereの進化 17 2023 1998 ミドルウェアによる クラスタリング 仮想マシン OpenShift オープンソース

    マイクロサービス FaaS コンテナ クラウドネイティブ Serverless WebSphere Liberty Open Liberty Kubernetes WebSphere Application Server 2012 インフラへの要件 開発⼿法 柔軟性 アジャイル ウォターフォール 堅牢性 Native Compilation CRIU 従来型の アプリケーションサーバー モノリシック 新時代の アプリケーションサーバー インフラによる クラスタリング DevOps Platform as Code
  14. 18 WebSphereの2つのランタイム 18 バージョン 2011年7⽉ WAS V8.0 WAS Java EE6

    完全対応 WAS Libertyプロファイル Servlet/JSPなど基本機能 WAS Fullプロファイル Java EE6 完全対応 WAS Libertyプロファイル Java EE6 Web Profile対応 WAS Fullプロファイル Java EE6 完全対応 WAS Libertyプロファイル Java EE7 完全対応 WAS Fullプロファイル Java EE6 完全対応 WAS Liberty Java EE7/8 完全対応 WAS traditional Java EE7 完全対応 2012年7⽉ WAS V8.5 2013年6⽉ WAS V8.5.5 2015年6⽉ WAS V8.5.5.6 2016年6⽉ WAS V9.0 従来型 ランタイム 次世代 ランタイム
  15. 19 Libertyとtraditionalの位置づけ §WAS traditional(WebSphere traditional / tWAS) u 既存資産の活⽤を⽬的としたランタイム u

    旧WASでおこなっていた従来の運⽤を継続したいお客様 u WAS Libertyで対応していない旧API(JAX-RPCやEntity Beanなど)を利⽤したい場合 u モノリシックな実装で,実装されている機能のほとんどが常に有効に u バージョンアップで機能が追加されるたびに,ディスクメモリのフットプリントが増⼤ u 今後,新機能の実装や新しい仕様への対応は⾏われない(2030年でサポートも終了) u Java EE 7 / Java 8に対応した2016年出荷のV9.0が最後のバージョン §WAS Liberty (WebSphere Liberty) u モダンなアプリケーション開発・サーバー運⽤に対応した新時代のランタイム u 軽量さを活かしたAgile開発やCD(継続的デリバリー) u ツールによる運⽤の⾃動化・DevOps(Platform as Code / Immutable Infrastructure) u クラウドでの使⽤やコンテナ環境,リソースの限定されたIoT環境にも最適 u 完全にモジュール化された実装で,必要な機能だけを選んで有効化 u 機能が追加されても,設定で有効にしなければ,フットプリントも増加せず u 今後も継続して進化を続ける 19
  16. 20 各社のモダナイズへの取り組み 開発者のスキルや既存アプリを活⽤したままクラウドネイティブへの対応ができるのはIBMのWebSphereだけ by Red Hat by IBM by Oracle

    8FC4QIFSF-JCFSUZ 8FC4QIFSF USBEJUJPOBM 従来型ランタイム クラウドネイティブ対応・次世代ランタイム *1 *1 限定的にサポート
  17. 21 WebSphere Liberty / Open Liberty n Open Liberty –

    オープンソースとして開発 / GitHub上でソースを公開・問題管理 https://openliberty.io/ https://github.com/openliberty/ – 無償で利⽤可能 / 商業利⽤しやすいEPL(Eclipse Public License)で公開 n WebSphere Liberty(WAS Liberty) – 製品としてIBMからのサポートを提供 – Open Libertyとバージョンは完全に同期・同じバージョン番号が同じタイミングで公開される • OSS版で出た新機能は,同じタイミングで出た製品版でもサポートされる – OSS版で動いたアプリケーションや構成は,同バージョンの製品版でも全く同じように稼働 21
  18. 22 徹底的にモジュール化されたLiberty n 構成ファイルで指定したフィーチャー(Feature)だけがロードされ初期化 – 最少のメモリ/ディスクフットプリント – ⾼速起動(通常の環境では1〜数秒で起動) 22 <featureManager>

    <feature>jsp-2.3</feature> <feature>jdbc-4.1</feature> <feature>jaxrs-2.0</feature> <feature>sessionDatabase-1.0</feature> <feature>ssl-1.0</feature> </featureManager> 構成ファイル server.xml Servlet JSP JDBC SSL JAX-RS sessionDatabase 依存関係も ⾃動的に解決 JSON • 新規Featureでの新機能の提供 • 年単位の新バージョンではなく ⽉単位のFixpackレベルで機能追加 • 新仕様への迅速な対応が可能 8.5.5.8 8.5.5.9 16.0.0.2 16.0.0.3 16.0.0.4 17.0.0.1 ・・・ 8.5.5.7 apiDiscovery wsSecuritySaml samlWeb rtcommGateway rtcomm bluemixUtility logstashCollector wsAtomicTransaction scim
  19. 23 Libertyのゼロ・マイグレーション・ポリシー n Libertyでは,新仕様への対応は既存Featureの「置き換え」ではなく「追加」 – 従来のバージョンの仕様がつかえるFeatureも継続して提供 – 構成を変更しなければ,バージョンアップしても新機能は有効にならず,仕様のバージョンは変わらず n Libertyのバージョンを上げてもアプリケーションの変更(マイグレーション)は不要

    – javax名前空間の仕様(Servlet 3.1/4.0等)もjakarta名前空間の仕様(Servlet 5.0/6.0等)も両⽅使⽤可能 23 TFSWMFU TFSWMFU -JCFSUZ TFSWMFU -JCFSUZ -JCFSUZ TFSWMFU TFSWMFU -JCFSUZ -JCFSUZ ࠷৽൛Ͱ΋શ෦͔ͭ͑Δ servlet-4.0 servlet-5.0 servlet-3.1 servlet-6.0 5PNDBUY 5PNDBUY 5PNDBUY 5PNDBUY
  20. 24 Libertyは,過去の仕様も全部対応しています n 過去のJava EE/MicroProfileのFeatureを 削除する予定はありません – 「LibertyではJava EE 8の機能セットのサポート終了

    のプランはまだありません。将来のJava SEのバージョ ンでJava EE 8と互換性のない変更が導⼊された場合、 Java EE 8の機能のサポート終了について計画する必要 があります。ですが、最新バージョンのJava SE 20や 次期の21ではそのような⾮互換性はありません。」 (Ian Robinson, IBM Application Runtimes CTO) n 当分の間,Java EE仕様のアプリケーションも 最新版のLibertyで実⾏することができます n Java SEの仕様のサポートはある時点で終了します – Java SE 8/11は,26.0.0.9までサポート予定 – Java SE 17は,27.0.0.9までサポート予定 24 Java EE 6* Java EE 7 Java EE 8 Jakarta EE 9.1 Jakarta EE 10 Java SE 8 Java SE 11 Java SE 17 Java SE 21 MicroProfile 1.0 MicroProfile 1.2 ... MicroProfile 4.0 MicroProfile 4.1 MicroProfile 5.0 MicroProfile 6.0 MicroProfile 6.1 WebSphere Liberty Open Liberty * 製品版でWeb Profileのみ対応
  21. 25 Libertyを使⽤したjakarta名前空間への対応 n 移⾏できるものは,jakarta名前空間に移⾏する n 移⾏できないものは,javax名前空間のまま利⽤する 25 GFBUVSF.BOBHFS GFBUVSFTFSWMFUGFBUVSF GFBUVSFKTQGFBUVSF

    GFBUVSFKBYSTGFBUVSF GFBUVSFDEJGFBUVSF GFBUVSF.BOBHFS import javax.annotation.Resource; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.sql.DataSource; GFBUVSF.BOBHFS GFBUVSFTFSWMFUGFBUVSF GFBUVSFQBHFTGFBUVSF GFBUVSFSFTUGVM84GFBUVSF GFBUVSFDEJGFBUVSF GFBUVSF.BOBHFS import jakarta.annotation.Resource; import jakarta.servlet.ServletException; import jakarta.servlet.annotation.WebServlet; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import javax.sql.DataSource;
  22. 27 IBMの考えるモダナイゼーション クラウド ネイティブ 開発 アプリケーション アーキテクチャー オペレーション(運⽤)や プラットフォーム ランタイム

    モダンなランタイムへの更新 運⽤の改善・クラウドやコンテナへの移⾏ マイクロサービースアーキテクチャーへの リファクタリング アプリケーションの新規開発 運⽤品質の向上 コストの削減 ⼈⼿不⾜への 対応 変化に即応可能な ITシステム
  23. 28 なぜJava EEは「オペレーションのモダナイズ」が困難か n 「アプリケーション・サーバー」という実装が, 運⽤の⾃動化・効率化などのモダナイゼーションの阻害要因になっていた 28 開発環境 実働環境 コード作成

    App Server導⼊ 構成 ビルド デプロイ 実⾏ n Java EEでは,開発者がコードを作成し, それをビルドするだけでは実⾏できない n あらかじめテスト環境,本番環境に アプリケーション・サーバーを導⼊し 必要な構成を済ませ その環境にアプリをデプロイして はじめて実⾏することができた n サーバーのメンテナンスが, 運⽤の⼤きな負荷に
  24. 31 実⾏環境の全てをコードで記述し,ビルドで作成 n LibertyはMaven Centralリポジトリーから ⾃動でダウンロードされ,実⾏環境を構築 n 構成およびビルドされたアプリを追加し ビルド環境でテスト実⾏が可能 n

    その環境を,まるごと導⼊可能ZIP (や実⾏可能JAR)にパッケージング可能 31 サーバー構成 導⼊可能 ZIP ランタイムの指定 ビルド・ツール 実⾏可能 JAR or アプリ 開発環境 実働環境 コード作成 ビルド ZIP展開 実⾏ コード作成 ビルド 実⾏ または 開発環境 実働環境
  25. 33 Libertyは他にもモダナイズに必要な全ての性質をもつ n ランタイムのサイズ(メモリ・ディスク)の⼩ささ – 必要最⼩限のモジュール(Feature)に限定することで,ランタイムサイズの極⼩化が可能 n 短い起動時間 – 通常の環境でも数秒で起動

    – Liberty InstantOnにより,数百msecでの起動も可能 n 実⾏環境の可搬性 – 実⾏OSや導⼊ディレクトリ,ネットワークアドレスに依存しない構成が可能で,環境をまるごとコピー可能 – 環境ごとの差異を環境変数で吸収可能 n インフラによるクラスタリングとの親和性 – 「⾃⾝によるクラスタリング機能」を完全に無効化し,メモリ・ディスクから取り除くことが可能 – KubernetesのIngressなど,コンテナ環境の負荷分散 AWSのALB,Azure Load Balancerなど,パブリック・クラウド環境の負荷分散との⾼い親和性 n コンテナ環境との親和性 – 様々な事前設定をおこなった公式イメージを提供 – Liberty Operatorにより,Kubernetes/OpenShift環境での管理作業の負荷の⼤幅な削減 33
  26. 34 あなたのJava EEアプリを簡単にチェック n 移⾏チェックツールを無償で公開しています n Migration Toolkit for Application

    Binaries – https://www.ibm.com/support/pages/migration-toolkit-application-binaries • アプリのEAR/WARを直接分析し,使⽤されているAPIや機能を調査 • アプリケーションがWebSphere Liberty/Open Libertyで実⾏することができるか分析 • ソースやが不要で,サーバーでのツール実⾏も必要なく簡易に調査が実施できる 34
  27. 35 Migration Toolkit for Application Binaries n コマンドラインから以下のように実⾏ java -jar

    binaryAppScanner.jar <WAR/EAR> --sourceJava=[oracle5|oracle6|oracle7|oracle8|ibm5|ibm6|ibm7|ibm8] --sourceAppServer=[weblogic|jboss|tomcat|was90|was855|was80|was70] --targetJava=[ibm8|java11|java17|java21] --targetAppServer=liberty n デフォルトでは結果はHTMLファイルとして出⼒ n テクノロジー評価 – アプリケーションで使⽤されているJava EE/Jakarta EEのAPIの⼀覧 n マイグレーション分析評価 – Libertyへの移⾏に当たって修正が必要なコードや構成の⼀覧 n インベントリー – アプリケションに含まれる外部ライブラリや,定義されているServlet/EJBなどのオブジェクトの数 n Liberty構成 – アプリケーションをLibertyで稼働させるのに必要なFeatureの⼀覧 35
  28. Integration&WebSphereコミュニティ © 2024 IBM Corporation 38 https://ibm.biz/JapanIntegrationUG ↓Japan WebSphere User

    Group(JWUG)↓ https://ibm.biz/JapanWebSphereUG ↓Integration Group Japan↓ n 多数の⽇本語技術⽂書を掲載 n 各種イベント・セミナーのご案内 n IBM IDでLoginすれば質問投稿や限定記事の閲覧が可能 n オープンソースや幅広いテクノロジーに関する話題も
  29. Liberty Dojo 2024 An IBM Open Source Project ITシステムのモダナイズに 課題感のあるお客様や、AP

    サーバーについて勉強中の ビジネス・パートナー様、 IBMのイベントに初めて参 加される⽅も⼤歓迎です︕ 全4回の隔週開催オンラインセミナー 2024/6/4(⽕) 17:30~18:30, 2024/6/18(⽕), 7/2 (⽕), 7/16(⽕) 17:00~18:00 セッション概要 第1回 いまからでも遅くない︕LibertyでエンタープライズJavaのモダナイズ 第2回 Libertyの基本的な構成⽅法 第3回 Liberty 開発ツール⼊⾨ 第4回 OpenShift上でのLibertyのデプロイ ↓詳細は申し込みページをご確認ください 第2回のお申し込み >>> https://ibm.biz/LibertyDojo-0618 (※各回の参加にはそれぞれ登録が必要です。) \コミュニティ登録もお願 いします︕/ Japan WebSphere User Group (JWUG) 参加費無料︕環 境の⽤意も必要 なし︕