Slide 1

Slide 1 text

1 https://openliberty.io いまからでも遅くない︕ LibertyでエンタープライズJavaのモダナイズ ⽇本IBM ⽥中 孝清 (Twitter @TTakakiyo) IBM TechXchange 春のDojo祭り Liberty Dojo 2024第1回

Slide 2

Slide 2 text

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/

Slide 3

Slide 3 text

3 3 エンタープライズJavaの現状 Java EE / Jakarta EE / MicroProfile / Spring

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

6 Java EEの歴史 n Java Community Process(JCP)で仕様策定がおこなわれてきた – Java EE 6までは,Sun Microsystems社が仕様策定を主導 – Java EE 7以降は,Sunを買収したOracle社が仕様策定を主導 6

Slide 7

Slide 7 text

7 Java EEからJakarta EEへの移⾏ n 様々な紆余曲折があり,エンタープライズJavaの仕様策定は, Oracle主導のJCPから,オープンなコミュニティであるEclipse Foundationへ移⾏された n Eclipse Foundation傘下で活動するJakarta EE Working Groupが, 各種のJakarta Projectで仕様策定を⾏う

Slide 8

Slide 8 text

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/

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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での名称

Slide 11

Slide 11 text

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;

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

13 MicroProfile n マイクロサービス・アーキテクチャーで Javaアプリを実装する際に必要な機能, コンテナプラットフォームと連携する機能を標準化 – Config 分散環境で構成情報を共有 – Health Check サービスの稼働状況をチェック – Fault Tolerance エラーハンドリングやリトライを⾃動化 他Open Tracing,Metrics,OpenAPI,TypeSafe REST clientなど n 複数のベンダーによるオープンな仕様策定

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

15 Spring Framework / Spring Boot n 標準仕様ではなく,ベンダーによって提供されるOSS – 旧Pivotal社によるフレームワーク (PivotalはVMwareに買収,VMwareはBroadcomに買収) n DIなどの先進的な機能を積極的に取り⼊れ n Spring Bootの登場により,アプリケーションサーバーの導⼊が不要になり DevOpsがやりやすく急速に⼈気が⾼まっている n バージョンアップへの追随が⼤変 15

Slide 16

Slide 16 text

16 16 IBMのランタイム Open Liberty / WebSphere Liberty

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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 従来型 ランタイム 次世代 ランタイム

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

20 各社のモダナイズへの取り組み 開発者のスキルや既存アプリを活⽤したままクラウドネイティブへの対応ができるのはIBMのWebSphereだけ by Red Hat by IBM by Oracle 8FC4QIFSF-JCFSUZ 8FC4QIFSF USBEJUJPOBM 従来型ランタイム クラウドネイティブ対応・次世代ランタイム *1 *1 限定的にサポート

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

22 徹底的にモジュール化されたLiberty n 構成ファイルで指定したフィーチャー(Feature)だけがロードされ初期化 – 最少のメモリ/ディスクフットプリント – ⾼速起動(通常の環境では1〜数秒で起動) 22 jsp-2.3 jdbc-4.1 jaxrs-2.0 sessionDatabase-1.0 ssl-1.0 構成ファイル 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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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のみ対応

Slide 25

Slide 25 text

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;

Slide 26

Slide 26 text

26 26 Java EE / Jakarta EEの モダナイゼーション Application Serverから Frameworkへ

Slide 27

Slide 27 text

27 IBMの考えるモダナイゼーション クラウド ネイティブ 開発 アプリケーション アーキテクチャー オペレーション(運⽤)や プラットフォーム ランタイム モダンなランタイムへの更新 運⽤の改善・クラウドやコンテナへの移⾏ マイクロサービースアーキテクチャーへの リファクタリング アプリケーションの新規開発 運⽤品質の向上 コストの削減 ⼈⼿不⾜への 対応 変化に即応可能な ITシステム

Slide 28

Slide 28 text

28 なぜJava EEは「オペレーションのモダナイズ」が困難か n 「アプリケーション・サーバー」という実装が, 運⽤の⾃動化・効率化などのモダナイゼーションの阻害要因になっていた 28 開発環境 実働環境 コード作成 App Server導⼊ 構成 ビルド デプロイ 実⾏ n Java EEでは,開発者がコードを作成し, それをビルドするだけでは実⾏できない n あらかじめテスト環境,本番環境に アプリケーション・サーバーを導⼊し 必要な構成を済ませ その環境にアプリをデプロイして はじめて実⾏することができた n サーバーのメンテナンスが, 運⽤の⼤きな負荷に

Slide 29

Slide 29 text

29 「モダン」なJavaフレームワークでは n コードを作成し,ビルドしたら, それがそのままサーバーで実⾏可能 n 事前のサーバー導⼊は不要 n 実⾏時の構成も,すべてコードとして記述 n CI/CDなどの⾃動化も容易 29 開発環境 実働環境 コード作成 ビルド 実⾏

Slide 30

Slide 30 text

30 Open Liberty / WebSphere Libertyは「Framework」 30

Slide 31

Slide 31 text

31 実⾏環境の全てをコードで記述し,ビルドで作成 n LibertyはMaven Centralリポジトリーから ⾃動でダウンロードされ,実⾏環境を構築 n 構成およびビルドされたアプリを追加し ビルド環境でテスト実⾏が可能 n その環境を,まるごと導⼊可能ZIP (や実⾏可能JAR)にパッケージング可能 31 サーバー構成 導⼊可能 ZIP ランタイムの指定 ビルド・ツール 実⾏可能 JAR or アプリ 開発環境 実働環境 コード作成 ビルド ZIP展開 実⾏ コード作成 ビルド 実⾏ または 開発環境 実働環境

Slide 32

Slide 32 text

32 Open Libertyのクイック・スターター 32 https://openliberty.io/start/ Mavenのプロジェクトを ダウンロードできる (64kBほどの⼩さなZIP) 展開してビルドしただけで, 完全に動作する Open Liberty環境ができあがる (数⾏書きかえれば製品版も) 開発環境にも 製品の事前セットアップは不要

Slide 33

Slide 33 text

33 Libertyは他にもモダナイズに必要な全ての性質をもつ n ランタイムのサイズ(メモリ・ディスク)の⼩ささ – 必要最⼩限のモジュール(Feature)に限定することで,ランタイムサイズの極⼩化が可能 n 短い起動時間 – 通常の環境でも数秒で起動 – Liberty InstantOnにより,数百msecでの起動も可能 n 実⾏環境の可搬性 – 実⾏OSや導⼊ディレクトリ,ネットワークアドレスに依存しない構成が可能で,環境をまるごとコピー可能 – 環境ごとの差異を環境変数で吸収可能 n インフラによるクラスタリングとの親和性 – 「⾃⾝によるクラスタリング機能」を完全に無効化し,メモリ・ディスクから取り除くことが可能 – KubernetesのIngressなど,コンテナ環境の負荷分散 AWSのALB,Azure Load Balancerなど,パブリック・クラウド環境の負荷分散との⾼い親和性 n コンテナ環境との親和性 – 様々な事前設定をおこなった公式イメージを提供 – Liberty Operatorにより,Kubernetes/OpenShift環境での管理作業の負荷の⼤幅な削減 33

Slide 34

Slide 34 text

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

Slide 35

Slide 35 text

35 Migration Toolkit for Application Binaries n コマンドラインから以下のように実⾏ java -jar binaryAppScanner.jar --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

Slide 36

Slide 36 text

36 36 最後に お知らせと宣伝

Slide 37

Slide 37 text

37 Qiitaでハンズオン記事を公開しています n JDK+VS Codeが導⼊されていれば無料で実施できるOpen Libertyのハンズオン 37 https://qiita.com/TTakakiyo/items/5f09be651bec34885c6e

Slide 38

Slide 38 text

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 オープンソースや幅広いテクノロジーに関する話題も

Slide 39

Slide 39 text

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) 参加費無料︕環 境の⽤意も必要 なし︕

Slide 40

Slide 40 text

ご質問&アンケートのご回答にご協⼒をお願いします Webexからでもリンク先からでも可能です(回答時間 約1分) https://app.sli.do/event/kwXXut7ud7ASX1ZdQk8vZr たくさんのご質問、ご意⾒を お待ちしております︕ 追加の質問やその他お問い合わせ窓⼝ ・⽥中孝清([email protected]) ・⻄尾実優⾹([email protected]