Slide 1

Slide 1 text

@2022 IBM Corporation IBM Automation Software https://openliberty.io Liberty Dojo 第⼀回 Cloud Nativeの世界でも Java EEを使える︕ OSSの実⾏環境 Open Liberty

Slide 2

Slide 2 text

@2022 IBM Corporation IBM Automation Software Liberty Dojo 1 開催⽇・時間 タイトル 担当 6/28(⽕) 17-18時 Cloud Nativeの世界でもJava EEを使える︕ OSSの実⾏環境 Open Liberty ⽥中 孝清 7/12(⽕) 17-18時 Libertyの基本的な構成⽅法 ⽥中 孝清 7/20(⽔) 13-14時 tWASからLibertyへのモダナイズ カスタマー サクセスマネージャ有志 8/2(⽕) 17-18時 MicroProfileを触ろう ⾺場 剛 申込はIBM Tech / Developer Dojoへ https://ibm-developer.connpass.com/

Slide 3

Slide 3 text

@2022 IBM Corporation IBM Automation Software ⾃⼰紹介 n ⽥中 孝清 n ⽇本アイ・ビー・エム株式会社 オートメーションソフトウェア テクニカルセールス n WebSphere Application Serverなどの テクニカルセールスを20年以上担当 n Twitter @TTakakiyo 2

Slide 4

Slide 4 text

@2022 IBM Corporation IBM Automation Software Cloud Nativeの世界 n ITシステムのアジリティを向上 させるために多くの新技術が登場 – コンテナ・Kubernetes – マイクロサービス・アーキテクチャー – Serverless, Functions – イベントストリーム etc. 3 Azureアーキテクチャーセンター「クラウドネイティブ アプリケーションを構築する」より https://docs.microsoft.com/ja-jp/azure/architecture/solution-ideas/articles/cloud-native-apps n 今まで慣れ親しんできたJava EEから 脱却しなければいけないの︖ → Cloud Nativeの世界でも Java EEを活⽤することはできます

Slide 5

Slide 5 text

@2022 IBM Corporation IBM Automation Software Java EE / Jakarta EE が Cloud Native に向かない(と思われている)理由 n アプリケーションサーバーのサイズが⼤きい・起動時間が遅い n 仕様が古くて,マイクロサービス・アーキテクチャーなどに対応しにくい n DevOps / Platform as Codeがやりにくい n コンテナへの対応が⼤変 4 Open Libertyは,これらの課題を解決できます

Slide 6

Slide 6 text

@2022 IBM Corporation IBM Automation Software Open Liberty とは n IBMはWebSphereを,完全に作り直しました –従来から提供されているWebSphere︓WebSphere Traditionalランタイム –2012年から登場した新WebSphere︓ WebSphere Libertyランタイム n WebSphere Libertyを2017年にOSS化して,Open Libertyに –EPL(Eclipse Public License)で公開・誰でも無料で利⽤できる・ビジネスで使いやすい n Jakarta EE 9.1仕様ではReference Implementation(参照実装) https://www.openliberty.io/blog/2017/09/19/open-sourcing-liberty.html

Slide 7

Slide 7 text

@2022 IBM Corporation IBM Automation Software Open Liberty と WebSphere Liberty の関係 n 新しい機能はOpen Libertyで開発され,それを取り込んでWebSphere Libertyとして製品化 n バージョンは完全に同期 – 4週間ごと,年に12回,新しいバージョンが出る(2022年は22.0.0.1〜22.0.0.12) – Open Liberty version 22.0.0.4で追加された新機能は, WebSphere Liberty version 22.0.0.4でも,すぐに利⽤可能 n 主な違いは提供されているFeature(モジュール)の差 – 古いAPIを提供するFeature,zOSと連携する機能,安定化された統合管理機能などは製品版のみで提供 – Java EE / Jakarta EEやMicroProfileなどの標準仕様は,すべてOpen Libertyでも提供 n アプリケーションや構成ファイルなどは,両者で全く同じものを使⽤できる 6 製品化

Slide 8

Slide 8 text

@2022 IBM Corporation IBM Automation Software Java EE / Jakarta EE が Cloud Native に向かない(と思われている)理由 n アプリケーションサーバーのサイズが⼤きい・起動時間が遅い n 仕様が古くて,マイクロサービス・アーキテクチャーなどに対応しにくい n DevOps / Platform as Codeがやりにくい n コンテナへの対応が⼤変 7 Open Libertyは,これらの課題を解決できます

Slide 9

Slide 9 text

@2022 IBM Corporation IBM Automation Software Java EE / Jakarta EE は ⼤きな仕様群 n アプリケーションサーバーが 対応しないといけない仕様が多い n これら全てに対応した実⾏環境は, 「重く」なりがち 8 https://jakarta.ee/specifications/platform/9.1/jakarta-platform-spec-9.1.html

Slide 10

Slide 10 text

@2022 IBM Corporation IBM Automation Software 完全にモジュール化されている Liberty n サーバー構成ファイル(server.xml)で使⽤する機能だけを有効化 –メモリ使⽤量の最⼩化・起動時間の短縮 n 使⽤する機能だけを選んで 本番環境にコピーしたり, コンテナに⼊れたりすることも可能 –導⼊イメージも最⼩化 n カーネル機能だけの導⼊ZIP 約11.6Mバイト n 右図のFeatureだけいれたLibertyの 展開後のサイズ 約56Mバイト 9 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

Slide 11

Slide 11 text

@2022 IBM Corporation IBM Automation Software Java EE / Jakarta EE が Cloud Native に向かない(と思われている)理由 n アプリケーションサーバーのサイズが⼤きい・起動時間が遅い n 仕様が古くて,マイクロサービス・アーキテクチャーなどに対応しにくい n DevOps / Platform as Codeがやりにくい n コンテナへの対応が⼤変 10 Open Libertyは,これらの課題を解決できます

Slide 12

Slide 12 text

@2022 IBM Corporation IBM Automation Software MicroProfile n Javaでマイクロサービスを 実装するための標準仕様群 n 世の中では,Java EEと 排他的な選択肢と思われている 例) – MicroProfileで⼗分なアプリ → MicroProfileを使う – Java EEが必要なアプリ → Java EEを使う n 実際には, Java EEで使っても 有⽤な機能が多い 11 https://microprofile.io/

Slide 13

Slide 13 text

@2022 IBM Corporation IBM Automation Software MicroProfile n Javaでマイクロサービスを 実装するための標準仕様群 n 世の中では,Java EEと 排他的な選択肢と思われている 例) – MicroProfileで⼗分なアプリ → MicroProfileを使う – Java EEが必要なアプリ → Java EEを使う n 実際には, Java EEで使っても 有⽤な機能が多い 12 https://microprofile.io/

Slide 14

Slide 14 text

@2022 IBM Corporation IBM Automation Software Javaアプリケーションから「構成情報」を取得する⽅法は,さまざま 13 ResourceBundle rb = ResourceBundle.getBundle("myProps"); String s = rb.getString("hoge"); Properties props = new Properties(); props.load(new FileInputStream(”/config/myProp.properties")); String s = props.getProperty("hoge"); String s = System.getProperty("hoge"); String s = System.getenv("hoge"); リソース・バンドルで取得 プロパティファイルから取得 システム・プロパティから取得 環境変数から取得

Slide 15

Slide 15 text

@2022 IBM Corporation IBM Automation Software MicroProfile︓Config APIなら 14 ResourceBundle rb = ResourceBundle.getBundle("myProps"); String s = rb.getString("hoge"); Properties props = new Properties(); props.load(new FileInputStream("/config/myProp.properties")); String s = props.getProperty("hoge"); String s = System.getProperty("hoge"); String s = System.getenv("hoge"); @Inject @ConfigProperty(name = "hoge") private String s; Config Sourceさえ切り替えれば 同じ書き⽅であらゆる場所から構成情報を取得できる

Slide 16

Slide 16 text

@2022 IBM Corporation IBM Automation Software Libertyならば,いますぐJava EEとMicroProfileを使⽤できる n Config APIは,Jakarta EE 11に含まれる予定 –けれど,Jakarta EE 9以降に移⾏するには,パッケージの変換(javax→jakarta)などが・・・ n Libertyであれば,Java EE 7/8とMicroProfileを,いますぐ組み合わせて使える –構成ファイルで両⽅のAPIの機能を提供するFeatureを有効にするだけ 15 servlet-4.0 cdi-2.0 mpConfig-2.0 Servlet CDI Config

Slide 17

Slide 17 text

@2022 IBM Corporation IBM Automation Software Java EEアプリからMicroProfileのAPIを使⽤する例 16 例) Servletの中からConfig APIを使⽤ @ApplicationScoped @WebServlet("/config") public class ConfitTestServlet extends HttpServlet { @Inject @ConfigProperty(name = "PWD") private String pwd; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/plain; charset=utf-8"); response.getWriter().append("Currend working directory: ").append(pwd); }

Slide 18

Slide 18 text

@2022 IBM Corporation IBM Automation Software Liberty の Jakarta EE 9.1 / MicroProfile 5.0 / Java 17,18 対応 n 2021年10⽉︓Java SE 17対応 n 2021年12⽉︓Jakarta EE 9.1対応 (業界最速,参照実装) n 2022年1⽉︓MicroProfile 5.0対応 n 2022年4⽉︓Java SE 18対応 17 さまざまな新仕様に 業界最速で対応

Slide 19

Slide 19 text

@2022 IBM Corporation IBM Automation Software ところで・・・ 「Open LibertyはJakarta EE 9.1の参照実装なんだよね︖」 「Jakarta EE 9.1に含まれてるのはServlet 5.0ですよね」 「どのバージョンまでがServlet 4.0で,どのバージョンから5.0なの︖」 18 servlet-4.0 cdi-2.0 mpConfig-2.0 Servlet 4.0は, Java EE 8 / Jakarta EE 8のAPI

Slide 20

Slide 20 text

@2022 IBM Corporation IBM Automation Software ゼロマイグレーション・ポリシー n 最新版のOpen Libertyは Java EE 7のServlet 3.1も Java EE 8のServlet 4.0も Jakarta EE 9のServlet 5.0も 全部対応しています n Libertyでは,基本的に ⼀度提供されたFeatureは 削除されません n 構成ファイルを書き換えれば, (Upper Compatibilityでなく) 昔のAPIがそのものが動きます 19 % ./productInfo version 製品名: Open Liberty 製品バージョン: 22.0.0.3 製品エディション: Open % ./productInfo featureInfo acmeCA-2.0 adminCenter-1.0 appClientSupport-1.0 (中略) servlet-3.1 servlet-4.0 servlet-5.0 (後略)

Slide 21

Slide 21 text

@2022 IBM Corporation IBM Automation Software Liberty では,新機能への対応は Feature の「置き換え」ではなく「追加」 20 Version 8.x Servlet-3.1 Version 9.x Servlet-4.0 Version 10.x Servlet-5.0 Version 8.5.5 Servlet-3.1 ⼀般的な アプリケーションサーバー Liberty Version 8.5.5.6 Version 21.0.0.1 Servlet-3.1 Servlet-4.0 Servlet-5.0 Servlet-3.1 Servlet-4.0

Slide 22

Slide 22 text

@2022 IBM Corporation IBM Automation Software Liberty は,アプリに合わせたランタイムを⾃由に構成できる 21 jaxrs-2.1 cdi-2.0 mpConfig-2.0 mpJwt-1.2 servlet-3.1 jsp-2.2 jdbc-4.0 jakartaee-9.1 Java EE 7時代の アプリも MicroProfileを使った アプリも 新しいJakarta EE 9.1の アプリも実⾏できる

Slide 23

Slide 23 text

@2022 IBM Corporation IBM Automation Software Java EE / Jakarta EE が Cloud Native に向かない(と思われている)理由 n アプリケーションサーバーのサイズが⼤きい・起動時間が遅い n 仕様が古くて,マイクロサービス・アーキテクチャーなどに対応しにくい n DevOps / Platform as Codeがやりにくい n コンテナへの対応が⼤変 23 Open Libertyは,これらの課題を解決できます

Slide 24

Slide 24 text

@2022 IBM Corporation IBM Automation Software 従来型の Java EE アプリケーションサーバーの運⽤ 24 24 ⼿動で 構築 設計書 サーバー 時間経過 . 修正 修正 修正忘れがあると・・・ ⼀致すると限らない 書類ベースの運⽤ ⼿動で同期 パラメーター変更・アプリ更新・パッチ適⽤ etc.

Slide 25

Slide 25 text

@2022 IBM Corporation IBM Automation Software 従来型の運⽤の問題点 25 n ⽂書と⼿作業によるシステム構築・変更管理 n Excelによる設計書 n Wordによる⼿順書 n ⽇付のついたバックアップによる変更管理 • 書類とシステムの⼆重管理 • 書類とサーバー環境の設定が⼀致しない →実際の環境をみないと正確な構成がわからない • テスト環境と本番環境の設定が異なっていることも • 属⼈化された⼤量の暗黙知 • 担当者の異動・退職でシステムがブラックボック化 • 運⽤するベンダーの変更が不可能 • 履歴の参照性が悪い • 誰が,いつ,なぜ追加した設定なのかわからない

Slide 26

Slide 26 text

@2022 IBM Corporation IBM Automation Software Platform as Code / Immutable Infrastructure 26 n サーバー環境をコード(構築スクリプト・テンプレート・レシピなど)として定義 n コードをバージョン・コントロールシステムで履歴管理 n 変更する場合は,コードを変更し,再ビルド・デプロイしてサーバー環境を作成 ビルド デプロイ コード 時間経過 . 修正 ビルド デプロイ 修正 ビルド デプロイ 修正 ビルド デプロイ 修正 ビルド デプロイ 機械的に⼀致が保証

Slide 27

Slide 27 text

@2022 IBM Corporation IBM Automation Software 従来の Java EE アプリケーションサーバーは・・・ 27 n GUIによるインストーラーでの導⼊ 導⼊メディアのサイズも⼤きく,導⼊にかかる時間も⻑い n GUI画⾯や専⽤ツールによるサーバー構成の管理 n 外部ツールによる管理を想定しておらず, ⾃動化ツールとの連携が難しい ビルド デプロイ コード 修正 ビルド デプロイ 修正 ビルド デプロイ 毎回,サーバー環境を 最初から作成するのが 現実的ではなかった

Slide 28

Slide 28 text

@2022 IBM Corporation IBM Automation Software Liberty は Platform as Code がやりやすい n アーカイブファイル(ZIP, JAR)を展開するだけの導⼊ – 導⼊メディアのサイズも数百Mバイト – 初期構成の作成もコマンド⼀⾏の実⾏で完了 n 構成は,ファイルを指定された場所に置くだけ – デフォルトから変えるものだけを記述するので簡潔に記述できる – 環境に依存しない,可搬性のあるので,あらゆる環境にコピー可能 – 環境変数や追加ファイルによる環境固有のカスタマイズも⽤意 n 既存環境を,まるごとアーカイブファイル(ZIP, JAR)にパッケージ可能 – 展開するだけで,ランタイム・構成・アプリケーション・リソースを導⼊可能 – 既存環境をコマンドでパッケージ化することができるほか, 統合開発環境Eclipseや,ビルドツールMaven/Gradleでもパッケージを作成することも可能 28

Slide 29

Slide 29 text

@2022 IBM Corporation IBM Automation Software Liberty の導⼊はアーカイブファイルを展開するだけ n ZIPファイルをダウンロードし,展開するだけで導⼊は完了 n 同梱されているFeatureの種類によって何種類かのアーカイブが提供 – カーネルのみ︓ 11M – Jakarta EE 9︓ 105M – Web Profile 9︓84M – MicroProfile 5︓48M – 全部⼊り︓ 279M n ⾜りないFeatureは あとから追加導⼊できる – featureUtilityを使⽤する 29

Slide 30

Slide 30 text

@2022 IBM Corporation IBM Automation Software 簡潔で可搬性の⾼い Liberty の構成ファイル n 全ての設定項⽬にデフォルト値が存在し,デフォルトから変更するもののみ記述 ­ デフォルト値はバージョンが上がっても変更されない(ゼロマイグレーション・ポリシー) n 絶対パスや固有IDなど,環境固有の情報を可能な限り排除 n 環境変数や内部変数を 構成ファイル内で 参照可能 n Libertyの構成はコピー可能 – 開発・テスト・本番環境で 共通のファイルを使⽤可能 – 災対環境の構築も容易 – 複数のプロジェクトで 共通の構成を利⽤することも 30 jsp-2.3 jndi-1.0 jdbc-4.1 localConnector-1.0

Slide 31

Slide 31 text

@2022 IBM Corporation IBM Automation Software 詳しくは次回で 31 開催⽇・時間 タイトル 担当 6/28(⽕) 17-18時 Cloud Nativeの世界でもJava EEを使える︕ OSSの実⾏環境 Open Liberty ⽥中 孝清 7/12(⽕) 17-18時 Libertyの基本的な構成⽅法 ⽥中 孝清 7/20(⽔) 13-14時 tWASからLibertyへのモダナイズ カスタマー サクセスマネージャ有志 8/2(⽕) 17-18時 MicroProfileを触ろう ⾺場 剛 申込はIBM Tech / Developer Dojoへ https://ibm-developer.connpass.com/

Slide 32

Slide 32 text

@2022 IBM Corporation IBM Automation Software 既存の環境を丸ごとパッケージ可能 n Liberty実⾏環境+構成+アプリを単⼀のZIP/JARファイルにパッケージ可能 – 展開するだけで,同じWAS Liberty環境が構築される – 最⼩限のFeatureだけを含めることで,展開後のランタイムのサイズも必要最⼩限に n ビルド環境で作成したパッケージをテスト環境・ステージング環境・本番環境などに – 全ての環境の同⼀性を機械的に保証 – 「アプリケーションの更新」と「WASの構成変更」「Fixpack適⽤」が同じフローに 32 変更・履歴管理 設定 ファイル アプリ ケーション 配布 テスト・本番環境 テスト・本番環境 Java SDK Liberty ランタイム サーバー構成 アプリ ①インストール ディスク ②サーバー構成 ③アプリ開発 テスト・本番環境 Java SDK Liberty ランタイム サーバー構成 アプリ ディスク ZIP/JARファイル ④パッケージ ⑤展開 サーバー構成で指定した機能だけがパッケージされるので ランタイムのサイズを最⼩限にたもつ効果もある

Slide 33

Slide 33 text

@2022 IBM Corporation IBM Automation Software アプリだけでなく,ランタイムや構成も,コードとして開発可能 アプリ サーバー構成 導⼊可能 イメージ ランタイム ビルド・ツール アプリ サーバー構成 導⼊可能 イメージ ランタイム 統合開発環境

Slide 34

Slide 34 text

@2022 IBM Corporation IBM Automation Software Maven Liberty プラグイン ├── pom.xml ├── src │ ├── main │ │ ├── java │ │ │ └── jp │ │ │ └── test │ │ │ └── HelloServlet.java │ │ ├── liberty │ │ │ └── config │ │ │ ├── jvm.options │ │ │ └── server.xml │ │ └── webapp │ │ ├── WEB-INF │ │ │ └── web.xml │ │ └── index.html │ └── test │ └── java │ └── jp │ └── test │ ├── ApplicationTest.java │ └── it │ └── EndpointIT.java └── target ├── LibertySample.war ├── LibertySample.zip プロジェクト構成ファイル アプリケーションの Javaソースファイル アプリケーションの Webコンテンツ アプリケーションを実⾏する Libertyサーバーの構成ファイル アプリケーションWARファイル アプリ+Liberty+構成ファイルのZIP ビルド io.openliberty.tools liberty-maven-plugin 3.2 guideServer アプリケーションをビルドするだけでなく WAS Liberty環境をまるごと⽣成することができる (Liberty本体もMavenがリポジトリから取得) Javaのビルドツールのデファクトスタンダード「Maven」でLiberty環境をビルド

Slide 35

Slide 35 text

@2022 IBM Corporation IBM Automation Software Java EE / Jakarta EE が Cloud Native に向かない(と思われている)理由 n アプリケーションサーバーのサイズが⼤きい・起動時間が遅い n 仕様が古くて,マイクロサービス・アーキテクチャーなどに対応しにくい n DevOps / Platform as Codeがやりにくい n コンテナへの対応が⼤変 35 Open Libertyは,これらの課題を解決できます

Slide 36

Slide 36 text

@2022 IBM Corporation IBM Automation Software Liberty は,コンテナ環境での実⾏にも最適 n 軽量・⾼速なランタイム – コンテナ環境では,メモリやディスク・フットプリントの⼩ささや,起動時間の短さが, コストや運⽤の柔軟性に直結する n 公式コンテナイメージをレジストリ上で公開 – Docker HubやRed Hatレジストリで,最新のFixpackを適⽤したイメージを毎⽉公開 – イメージを作成したDockerfileもGitHub上で公開されているため, カスタマイズや独⾃イメージの作成も容易 n コンテナ環境に対応したライセンス – OpenShiftやKubernetes環境に,IBM License Serviceを導⼊することで, コンテナライセンスを利⽤可能 – IBM License Serviceの稼働確認が取れたパブリック・クラウドをEligible Public Cloudとして公開 BYOSL(ライセンス持ち込み)によるクラウド上での利⽤が可能 36

Slide 37

Slide 37 text

@2022 IBM Corporation IBM Automation Software Liberty の利⽤⽅法を学習する n https://openliberty.io/guides/ – JDK,Git,Mavenがあれば実⾏できる チュートリアルを多数提供 n英語での提供だが ブラウザの翻訳機能で きれいに⽇本語化される 37

Slide 38

Slide 38 text

@2022 IBM Corporation IBM Automation Software 現在つかっている Java EE アプリが Liberty で動くか確認する n Migration Toolkit for Application Binaries – https://www.ibm.com/support/pages/migration-toolkit-application-binaries から無料で⼊⼿可能 n JDK上で稼働するJavaアプリケーション – EAR / WARファイルを調査して,アプリで使⽤しているAPIがLibertyで利⽤できるか,修正は必要かなどを調査 – 結果をHTMLで出⼒,ブラウザで開いて結果を確認 n コマンドラインから以下のように実⾏ $ java -jar binaryAppScanner.jar --sourceJava=[oracle5|oracle6|oracle7|oracle8|ibm7|ibm8] --sourceAppServer=[weblogic|jboss|tomcat|was90|was85|was80|was70] --targetJava=[ibm8|java11|java17] --targetAppServer=liberty 38

Slide 39

Slide 39 text

@2022 IBM Corporation IBM Automation Software まとめ n Open Libertyは,無料で利⽤できるエンタープライスJavaの実⾏環境 n ⾼速・軽量で,モダンな開発・運⽤スタイルにも対応 クラウド・ネイティブの世界でもJava EEを活⽤できる n 最新のJakarta EE仕様やMicroProfile仕様にも,いちはやく対応 n ⼀⽅で,バージョンアップしても昔のAPIが使⽤できるため, 作ったアプリケーションを,より⻑く活⽤することができる n Platform as Codeやコンテナ環境にも最適で, いままでの資産を引き継ぎつつ,エンタープライズJava環境のモダナイズが可能 39

Slide 40

Slide 40 text

@2022 IBM Corporation IBM Automation Software Liberty Dojo 40 開催⽇・時間 タイトル 担当 6/28(⽕) 17-18時 Cloud Nativeの世界でもJava EEを使える︕ OSSの実⾏環境 Open Liberty ⽥中 孝清 7/12(⽕) 17-18時 Libertyの基本的な構成⽅法 ⽥中 孝清 7/20(⽔) 13-14時 tWASからLibertyへのモダナイズ カスタマー サクセスマネージャ有志 8/2(⽕) 17-18時 MicroProfileを触ろう ⾺場 剛 申込はIBM Tech / Developer Dojoへ https://ibm-developer.connpass.com/