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

Java EE/Jakarta EEの現状と将来 ―クラウドネイティブ時代にJava EEは対...

Java EE/Jakarta EEの現状と将来 ―クラウドネイティブ時代にJava EEは対応できるのか?―

2024年4月のJJUGナイトセミナー「Jakarta EE特集」で発表したセッションの資料です。

Takakiyo Tanaka

April 18, 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は「仕様」があって「実装」がある 仕様︓ “The Java® Virtual Machine Specification” 実装 実装

    実装 HotSpot VM Sun/Oracleの実装をベースに BEA Sys.のJRockitの機能を追加し OSS化されたJVM実装 最も広く使われている IBMの実装をベースにした OSS JVM Oracleが新たに始めた OSS JVMプロジェクト 「仕様」があるから,Javaのプログラムは, どのVMのうえでも(基本的に)同じように動作する
  3. 5 Java SE(Java Standard Edition) 5 Java VM Reflection Math

    Logging Versioning Collections Management Preference API Ref Objects Instrumentation Regular Expression Concurrency Utility JNI Zip lang and utils Beans JMX Date and Time Security XML JAXP Input / Output Serialization Networking Internationalization Extension Mechanism Override Mechanism IDL JDBC JNDI RMI / RMI-IIOP Scripting JAR GUI toolkit /User Interface Tools & Tool APIs Java SE APIs Java SE Runtime Environment (JRE) Java SE Development Kit (JDK) Java の実⾏・開発環境の 基本をさだめた仕様群
  4. 6 Java SEを構成する仕様(例 Java SE 21) https://docs.oracle.com/en/java/javase/21/docs/specs/ n ⾔語仕様 –

    The Java Language Specification, Java SE 21 Edition n JVM(Java仮想マシン)仕様 – The Java Virtual Machine Specification, Java SE 21 Edition n 標準API仕様 – Java® Platform, Standard Edition & Java Development Kit Version 21 API Specification n 関連ツール – Java® Development Kit Version 21 Tool Specifications n その他 – JAR File Specification – Java AWT Native Interface Specification and Guide – Java Debug Wire Protocol – Java Native Interface (JNI) Specification – Java Object Serialization Specification – ・・・ 6
  5. 7 Jakarta EE / Java EE(Java Enterprise Edition)とは n エンタープライズ・ITシステムを

    Javaで構築するための追加APIの標準仕様群 7 Java SE Runtime RESTful Web Services Servlet Messaging Pages Batch JSON Binding Faces XML Web Services Enterprise Beans XML Binding JSON Processing Concurrency Security Authentication Jakarta EE APIs Authorization
  6. 8 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) 8 ( )内はJava EEでの名称
  7. 10 Spring Framework/Spring Bootも内部で使⽤ n Spring Bootの成果物であるJARファイルは, 内部に格納されたEmbedded Tomcat(やJetty, Undertow)で,

    Jakarta EE/Java EEのServlet実⾏環境上で,実⾏されている n そのため,Spring Bootの成果物を他のJakarta EE実装で実⾏したり, Jakarta EEアプリケーションの中から Spring Frameworkの機能を使⽤することも可能 – Spring Bootの成果物をOpen Libertyのうえで実⾏すると, ピーク時のスループレットが倍増する 10 https://openliberty.io/blog/2022/10/17/memory-footprint-throughput-update.html
  8. 11 Java EEの歴史 n Java Community Process(JCP)で仕様策定がおこなわれてきた – Java EE

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

    Member – Participant Member – Guest Member n 3つのCommittee – Marketing Committee – Specification Committee – Steering Committee 13 https://jakarta.ee/membership/members/
  10. 14 Jakarta EEプロジェクトの役割 n 仕様を策定する – ドキュメントならびにJavadoc – こちらから参照できる https://jakarta.ee/specifications/

    n 実装が互換性があると認定されるのに必要なテストをおこなう TCK(Technology Compatibility Kit)を開発する – 実装ならびにドキュメント n 少なくとも⼀つの,TCKを通過した実装(Compatible Implementation) – Java EE時代はGlassFishだけだったが,Jakarta EEでは複数の実装が利⽤される 14
  11. 15 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公開予定 15
  12. 16 Java EEからJakarta EEでの仕様名の変更(1) n Jakarta Pages︓JSP(Java Server Pages) n

    Jakarta Faces︓JSF(Java Server Faces) n Jakarta Persistence︓JPA(Java Persistence API) n Jakarta Messaging︓ JMS(Java Message Service) n Jakarta Connector︓JCA(Java Connector Architecture) n Jakarta Transaction︓JTA (Java Transaction API) n Jakarta Concurrency︓Concurrency Utility for Java EE n Jakarta Validation︓Bean Validation n Jakarta RESTful Web Services︓JAX-RS(Java API for RESTful Web Services) n Jakarta JSON Binding︓JSONB n Jakarta JSON Processing︓JSONP 16
  13. 17 Java EEからJakarta EEでの仕様名の変更(2) n Jakarta XML Web Services︓JAX-WS(Java API

    for XML-based Web Services) n Jakarta XML Binding︓JAXB(Java Architecture for XML Binding) n Jakarta Web Services Metadata︓JWS(Java Web Services Metadata) n Jakarta SOAP with Attachments︓SAAJ(SOAP with Attachments API for Java) n Jakarta Security︓Java EE Security API n Jakarta Authentication︓ JASPIC(Java Authentication Service Provider Interface for Containers) n Jakarta Authorization︓JACC(Java Authorization Contract for Containers) 17
  14. 18 Jakarta EE 10仕様の全体像とProfile Batch 2.1 Connectors 2.1 Messaging 3.1

    Authorization 2.1 Activation 2.1 Mail 2.1 Enterprise Beans 4.0 RESTful Web Services 3.1 JSON Processing 2.1 JSON Binding 3.0 CDI Lite 4.0 Annotations 2.1 Interceptors 2.1 Dependency Injection 2.0 Server Pages 3.1 Expression Language 5.0 Standard Tag Libraries 3.0 Servlet 6.0 Faces 4.0 WebSocket 2.1 Enterprise Beans Lite 4.0 Managed Beans 2.0 CDI 4.0 Concurrency 3.0 Debugging Support 2.0 Authentication 3.0 Security 3.0 Persistence 3.1 Transactions 2.0 Bean Validation 3.0 Jakarta EE 10 Core Profile Jakarta EE 10 Web Profile Jakarta EE 10 Platform サブセット サブセット 新規 更新なし 更新 XML Web Services 4.0 XML Binding 3.0 SOAP w/Attachments 3.0 Enterprise Web Services 2.0 オプション
  15. 19 Web Profile n Java EE 6で導⼊された,Webアプリ⽤途に限定したJava EE / Jakarta

    EEのサブセット n Webアプリケーションで広く使われている技術に限定し,実装を公開しやすくするために設定 – が,Web Profileでも実装は⼤変で,最近ではTomEEがJakarta EE 9.1 Web Profileの認定を受けただけ・・・ 19 RESTful Web Services 3.1 JSON Processing 2.1 JSON Binding 3.0 CDI Lite 4.0 Annotations 2.1 Interceptors 2.1 Dependency Injection 2.0 Server Pages 3.1 Expression Language 5.0 Standard Tag Libraries 3.0 Servlet 6.0 Faces 4.0 WebSocket 2.1 Enterprise Beans Lite 4.0 Managed Beans 2.0 CDI 4.0 Concurrency 3.0 Debugging Support 2.0 Authentication 3.0 Security 3.0 Persistence 3.1 Transactions 2.0 Bean Validation 3.0 Jakarta EE 10 Core Profile Jakarta EE 10 Web Profile サブセット サブセット
  16. 20 Core Profile n MicroProfileは,複数のベンダーやコミュニティが共同で策定している, Javaでマイクロサービース・アーキテクチャーのアプリを実装するための仕様群 n Java EE/Jakarta EEアプリケーションの仕様の⼀部にくわえ

    REST呼び出しや,Kubernetes環境との連携などに関連した機能を追加で定義 n Jakarta EEで,MicroProfileと共通の部分をCore Profileとして定義 RESTful Web Services 3.1 JSON Processing 2.1 JSON Binding 3.0 CDI Lite 4.0 Annotations 2.1 Interceptors 2.1 Dependency Injection 2.0 Jakarta EE 10 Core Profile サブセット MicroProfile 6.0 Telemetry 1.0 Open API 3.1 Rest Client 3.0 Config 3.0 Fault Golerance 4.0 Metrics 5.0 JWT Authentication 2.1 Health 4.0
  17. 22 Jakarta EE 11 n Java SE 17が仕様の前提,TCKはJava SE 21でも動作するように実装予定

    n 2024年1⽉から,Wave 1から8に分割して各仕様のFinalize作業を実⾏中 – Wave 1: Annotation, JSON Processing – Wave 2: Expression Language, Interceptors, Lang Model – Wave 3: Activation, Context and Dependency Injection – Wave 4: JSON Binding, Mail, SORP with Attachments, XML Binding – Wave 5: Authorization, Batch, Persistence, RESTful Web Services, Server Pages, Servlet, Validation, WebSocket, XML Web Services, Standard Tag Library – Wave 6: Authentication, Concurrency, Faces, Messaging – Wave 7: Security, Data – Wave 8: Platform, Web Profile, Core Profile n 2024年6〜7⽉に公開予定(現在は7⽉中旬を予定) n Compatible Implementation – Eclipse Glassfish – 他の実装を間に合わせるため,スケジュールを調整中 22
  18. 23 Jakarta EE 11の更新内容(現在の予定) n 新規仕様の追加 – Jakarta Data 1.0

    n メジャー更新 – Annotation 2.0 → 3.0 – Authorization 2.1 → 3.0 – Expression Language 5.0 → 6.0 – RESTful Web Services 3.1 → 4.0 – Security 3.0 → 4.0 – Server Pages 3.1 → Pages 4.0 23 n マイナー更新 – Activation 2.1 → 2.1.3 – Authentication 3.0 → 3.1 – CDI 4.0 → 4.1 – Concurrency 3.0 → 3.1 – Faces 4.0 → 4.1 – Interceptors 2.1 → 2.2 – JSON Binding 3.0 → 3.0.1 – JSON Processing 2.1 → 2.1.3 – Mail 2.1 → 2.1.3 – Persistence 3.1 → 3.2 – Servlet 6.0 → 6.1 – Standard Tag Library 3.0 → 3.0.1 – Bean Validation 3.0 → Validation 3.1 – WebSocket 2.1 → 2.2 – XML Binding 4.0 → 4.0.2
  19. 24 Jakarta Data 1.0 リレーショナルデータベースなどにたいして, より簡単な操作⼿段を提供する n リポジトリ抽象化 – データアクセスのためのリポジトリインターフェースを定義し、具体的なデータベース操作を抽象化

    – データベースアクセスを簡単にし、開発者がデータ操作に集中できるように n クエリの容易化 – メソッド名に基づくクエリ⽣成や、カスタマイズされたクエリの定義をサポート – 複雑なクエリも簡潔に記述できるように n ポータビリティと統合性 – 他のJakarta EE仕様と密接に統合され、アプリケーションの他の部分とシームレスに連携 – ⼀貫したアーキテクチャが保たれ、ポータビリティが向上 24
  20. 25 Jakarta Dataのコードの例 25 @Entity public class User { @Id

    public Long id; public String name; public String email; } import jakarta.data.repository.CrudRepository; public interface UserRepository extends CrudRepository<User, Long> { // 例えば、名前によるユーザー検索: List<User> findByName(String name); } public class UserService { @Inject private UserRepository userRepository; public List<User> findUsersByName(String name) { return userRepository.findByName(name); } } リポジトリを定義 サービスクラスに Injectして利⽤ 対象のエンティティを定義
  21. 26 同じようなコードをJakarta Persistenceで書くと・・・ 26 @Entity public class User { @Id

    public Long id; public String name; public String email; } public class UserService { @PersistenceContext private EntityManager entityManager; @Transactional public List<User> findUsersByName(String name) { return entityManager .createQuery("SELECT u FROM User u WHERE u.name = :name", User.class) .setParameter("name", name) .getResultList(); // 名前に基づいてユーザーを検索する } } 対象のエンティティを定義 検索の疑似SQLを⾃分で記述する必要がある
  22. 28 Jakarta RESTful Web Services 4.0 n JAX-RSの後継仕様 n Version

    4.0での更新 – カンマ(,)で区切られたヘッダーを処理する機能を追加 – TCKに機能を追加 – ドキュメントの修正 – JAXBやManaged Beanへの依存を削除 28
  23. 29 Jakarta Pages 4.0 n JSP(Java Server Pages)の後継仕様 n Version

    4.0での更新 – ErrorDataで新しい属性jakarta.servlet.error.query_stringの追加 – 3.1で⾮推奨になった機能の削除 29 機能の削除など破壊的な変更があると メジャー更新となっている マイナー更新より新機能が多いわけではない
  24. 31 Jakarta Concurrency 3.1 n Concurrency Utilities for Java EEの後継仕様

    n Version 3.1での更新 – Java 21 Virtual Threadの統合(Java 21以降で実⾏されたときにのみ利⽤される) – Java 11で追加されたjava.util.concurrent.FlowおよびReactive Streamのサポート – EJB,JNDI,リソース参照などへの依存を仕様から削除 – 注⼊において,古い@Resourceでなく,CDIの@Injectをメインにすることを明⽂化 – ドキュメントの修正 – TCKの問題の修正 31
  25. 32 Jakarta Servlet 6.1 n 新機能 – リダイレクト後にもステータスコードとレスポンスボディの制御を可能に – エラー画⾯から,Query⽂字列の参照が可能に

    – 新しく定義されたHTTPステータスコードへの対応 – ⽂字コードをStringではなくCharSetで指定するメソッドの追加 – ServletInputStreamとServetOutputStreamでByteBufferのサポートを追加 – 仕様の曖昧だった様々な部分を明確化 – SecurityManagerへの参照の削除 32
  26. 33 Jakarta Persistence 3.2 n JPA(Java Persistence API)の後継仕様 n 今回⼀番変更点が多い

    – Recordのサポート – JDBCの基本型とjava.time.Instant,java.time.Yearのマッピングをサポート – Persistence QLでunion, intersect, except, cast, left, right, replaceのサポートを追加 – Persistence QLの演算⼦に||を追加 – EntityResultのlockMode()のデフォルトをOPTIMISTICに – Query, TypedQuery, StoredProcedureQueryにgetSingleResultOrNull()を追加 – 仕様⽂章の曖昧だった点の明確化 – javadocの修正 – ⽇付に関わる型はjava.time APIを基本とし,Calender,Data, Time, Timestamp等は⾮推奨に – いくつかの機能を⾮推奨,削除を⽬的とした⾮推奨に などなど,ほか数⼗件の機能追加・修正 33
  27. 35 名前空間(パッケージ名)の変更 n javaxのパッケージ名は,Oracle社の保持する商標上の制限があるため, Jakarta EEプロジェクトで拡張することは許されなかった – Java EEから拡張していないJakarta EE

    8での使⽤はできた n ⼀気に移⾏(ビッグバン)と 段階的な移⾏が検討されたが, 前者が選択された – Jakarta EE 9.0で,全仕様が jakarta名前空間に移⾏された n Java EEからJakarta EEへの移⾏には パッケージ名の変更が必要 35 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;
  28. 36 名前空間の移⾏に使えるツール(専⽤ツール) n Apache Tomcat migration tool for Jakarta EE

    – Apache Tomcat⽤に開発されている変換ツール(Apache License 2.0) – ソースコード,設定ファイルを変換するツール n Eclipse Transformer – Eclipse Foundationで開発されている変換ツール(EPL 2.0/Apache License 2.0) – ソースコード,設定ファイル,クラスファイルを変換するツール – コンパイル済みのバイトコードも変換できる – 使⽤例︓ 36 java -jar org.eclipse.transformer.cli-0.5.0.jar ¥ ~/opt/struts-1.3.10/lib/struts-core-1.3.10.jar ¥ ~/opt/struts-1.3.10/lib.tmp/struts-core-1.3.10.jar -v
  29. 37 名前空間の移⾏に使える各種ツール n OpenRewrite – Moderneが開発しているソースコードの⾃動リファクタリングを⾏うためのOSS (Apache License 2.0) –

    Javaのソースコード,構成ファイル等を「レシピ」にしたがって⾃動修正する – Java EEからJakarta EEへ移⾏するレシピも公開されている – レシピは⾃作することも容易で,⾃動変換に失敗した場合も,⾃作レシピで対応することが可能 n The Konveyor Tool Kit – Red Hatが開発している,既存のアプリケーションをクラウドネイティブな アーキテクチャに移⾏するための⼀連のツールキット(Apache License 2.0) – これに含まれているMigration Toolkit for Applications(旧名MTA/WindUp)が, Javaアプリケーションのソースコードを分析し、移⾏に関連する問題を特定し、 対応策を提供するためのレポートを⽣成 n 各種IDE上の移⾏ツール – IntelliJ IDEAのマイグーレション・ツールなどでも移⾏は可能 37
  30. 38 名前空間の移⾏に使えないツール n IBM Transformation Advisor – 従来型のWebSphereや,WebLogic/JBoss/Tomcatなどで稼働している Java EEアプリケーションを,WebSphere

    Liberty / Open Libertyに移⾏するためのツール – コンパイル済みのアプリケーションのバイナリを分析し,移⾏に必要な修正点などをレポート – Liberty向けのアプリケーションプロジェクトやLibertyの構成ファイル, コンテナ移⾏に必要なファイルなどを⾃動⽣成 – Libertyでは,Java EEアプリケーションも実⾏可能なので(詳しくは後述) 名前空間の変換機能は実装されていない n Oracle WebLogic Kubernetes Toolkit – Oracle WebLogic ServerをKubernetes環境にデプロイし,管理するためのツール – WebLogicドメインの管理,モニタリング,スケーリングを Kubernetesエコシステム内で実現することをサポート – WebLogicでは,Jakarta EEのアプリケーションは稼働しないので 名前空間の変更機能は実装されていない 38
  31. 39 アプリから使⽤されているライブラリの名前空間移⾏ 1. jakarta名前空間に移⾏されたバージョンを使⽤する – ライブラリの提供元からjakarta名前空間に移⾏されたバージョンが提供されていれば, 可能な限りそれを利⽤することが望ましい – ライブラリによっては,バージョンアップで⼤きな変更負荷がかかる可能性がある 2.

    javax名前空間のライブラリを変換して使⽤する – jakarta名前空間に対応したライブラリが提供されていない場合, ⾃⾝でソースコードあるいはバイトコードを変換して利⽤する – 変換後にトラブルが起こったときの対応が極めて困難 3. javax名前空間のままで利⽤する – 今後もjavax名前空間が利⽤可能な実⾏環境へ移⾏する – Open Liberty / WebSphere Libertyであれば,javax名前空間のままでも クラウドネイティブ化などのモダナイズが可能 39
  32. 41 Jakarta EE 開発者アンケート 2024 41 n 現在Jakarta EE Working

    Groupでは, 開発者向けのアンケートを実施しています n ⽇本語で回答できるページが⽤意されています n ⽇本の開発者の声を届けるため 是⾮みなさまの回答をお願いします https://www.surveymonkey.com/r/WZKXNQR?lang=ja
  33. 43 エンタープライズJava技術の業界動向 43 Jakarta EE Java EE J2EE 2024 2006

    2019 MicroProfile ミドルウェアによる クラスタリング 仮想マシン モノリシック オンプレミス コンテナ Kubernetes オープンソース マイクロサービス クラウドネイティブ Serverless DevOps Spring Framework . Spring Boot OpenShift インフラによる クラスタリング
  34. 44 OSSの実装︓Tomcat nVersion 9.x – Java EE 8 / Jakarta

    EE 8の⼀部であるServlet 4.0 / JSP 2.3等に対応 nVersion 10.x – Jakarta EE 9の⼀部であるServlet 5.0 / Pages 3.0等に対応 nVersion 11.x – Jakarta EE 10の⼀部であるServlet 6.0 / Pages 3.1等に対応 nSpring Boot 2.x – 内部でTomcat 9.xを使⽤ nSpring Boot 3.x – 内部でTomcat 11.xを使⽤ 44
  35. 45 OSSの実装︓Eclipse Glassfish Eclipse Foundation⾃⾝で開発されている 仕様公開時に同時に公開されるCompatible Implementation FujitsuのInterstageなどの実装にも使⽤される nVersion 5.1.x

    – Java EE 8 / Jakarta EE 8対応 nVersion 6.0.x / 6.1.x – Jakarta EE 9/9.1対応 nVersion 7.0.x – Jakarta EE 10対応 nVersion 8.0.x – Jakarta EE 11対応予定 45
  36. 46 OSSの実装︓WildFly Red Hatの開発するOSSでJBoss EAPの実装に使⽤される nVersion 26.xまで – Java EE

    8 / Jakarta EE 8対応 nVersion 27.xから31.xまで – Jakarta EE 10対応 nVersion 32.xから – Jakarta EE 11対応予定 46
  37. 47 OSSの実装︓Open Liberty IBMの開発するOSSでWebSphere Libertyの実装に使⽤される nVersion 20.0.0.3から – Java EE

    7 / Java EE 8 / Jakarta EE 8対応 nVersion 21.0.0.12から – Java EE 7 / Java EE 8 / Jakarta EE 8 / Jakarta EE 9対応 nVersion 23.0.0.3から – Java EE 7 / Java EE 8 / Jakarta EE 8 / Jakarta EE 9 / Jakarta EE 10対応 nVersion 24.0.0.9か12から(予定) – Java EE 7 / Java EE 8 – Jakarta EE 8 / Jakarta EE 9 / Jakarta EE 10対応 – Jakarta EE 11対応予定 47
  38. 48 WebSphere Liberty / Open Libertyのバージョン n スケジュールベースのリリースで, 4週間ごとに新バージョンがでます(年12〜13回) n

    バージョン番号は4桁(IBM製品の共通仕様)で, – ⻄暦の下⼆桁 – 0 – 0 – 年内の通番(ほぼ,公開された⽉と⼀致) n 2024年の3⽉に公開された最新版はVersion 24.0.0.3 n 製品版WebSphere LibertyとOSS版Open Libertyのバージョンは共通 – 同じタイミングで同じバージョン番号が公開される – 新機能は,製品版とOSS版で,同時に公開 – ⼀部に製品版でのみ提供されている機能はあるが,標準API仕様などは両者で共通 • 例︓OSS版の23.0.0.12で動いた構成・アプリは,製品版の23.0.0.12でも完全に同じように動く 48
  39. 49 完全にモジュール化されたLiberty n 「アプリケーションから使⽤するAPI」「サーバー機能」は Featureというモジュールで提供されている n 構成ファイルで指定したFeature(と依存関係にあるFeature)のみが メモリにロードされて初期化される 49 <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
  40. 50 Libertyのゼロマイグレーション・ポリシー n 新しい仕様のバージョンに対応するフィーチャーが追加されても,従来のフィーチャーも提供 – 例) 現在はServlet 5.0/6.0のFeatureが提供されているが, Servlet 4.0/3.1のFeatureも引き続き利⽤可能

    n 構成ファイルを修正しないかぎり,バージョンを上げても新しい機能は有効にならない n Libertyのバージョンを更新しても,アプリケーションや構成の「マーグレーション」は不要 50 servlet-4.0 servlet-5.0 servlet-5.0 servlet-6.0 Tomcat 11.x Liberty 21.0.0.12 ⼀般的なアプリケーションサーバー WebSphere Liberty servlet-4.0 Tomcat 10.x servlet-6.0 Liberty 23.0.0.3 Tomcat 9.x
  41. 51 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までサポート予定 51 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のみ対応
  42. 52 Open Libertyの主なパッケージ n All GA Features – 全部のFeatureが⼊っている /

    Version 24.0.0.3では266 Features – 配布ZIPサイズ︓332M byte n Kernel – Featureが⼀つも⼊っていない / featureUtilityコマンドで必要なFeatureを導⼊して使⽤する – 配布ZIPサイズ︓14M byte n Jakarta EE 10 – Jakarta EE 10 platformとMicroProfile 6のFeature – 配布ZIPサイズ︓133M byte n Java EE 8 – Java EE 8 platformとMicroProfile 4のFeature – 配布ZIPサイズ︓137M byte 52 https://openliberty.io/start/#runtime_releases こちらはバージョンが上がるにつれ, どんどん⼤きくなっていますが これらの配布サイズは ほとんど変化がありません
  43. 53 LibertyのfeatureUtilityコマンド n 指定されたFeatureをダウンロードして追加導⼊するコマンド – Maven Centralリポジトリーからダウンロードされる – ミラー・リポジトリーも指定できる(featureUtility viewSettingsの実⾏結果を参照)

    n 使い⽅1︓Featureを指定してダウンロードする – featureUtility installFeature jaxrs-2.1 jsonb-1.0 – 指定されたFeature(と,その依存しているFeature)を導⼊する n 使い⽅2︓サーバーを指定してダウンロードする – featureUtility installServerFeatures defaultServer – 指定されたサーバーのserver.xmlに構成されたFeatureを導⼊する n これ以外にも,Maven/GradleのビルドやDockerfile/Containerfileのビルド, サーバー環境のパッケージングなどでも,特定のFeatureだけ⼊れる⼿段が提供されている n 必要な機能だけを選んで導⼊できるので,実⾏環境が不必要に肥⼤することはない n Featureの⼀覧は,こちらを参照(製品版,OSS版で提供されているもの) – https://www.ibm.com/docs/ja/was-liberty/base?topic=management-liberty-features 53
  44. 54 Libertyを使⽤したjakarta名前空間への対応 n 移⾏できるものは,jakarta名前空間に移⾏する n 移⾏できないものは,javax名前空間のまま利⽤する 54 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;
  45. 56 なぜJava EEは「モダンではない」と⾔われるか n 「アプリケーション・サーバー」という実装が, クラウドネイティブ化などのモダナイゼーションの阻害要因になっていた 56 開発環境 実働環境 コード作成

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

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

    – Liberty InstantOnにより,数百msecでの起動も可能 n 実⾏環境の可搬性 – 実⾏OSや導⼊ディレクトリ,ネットワークアドレスに依存しない構成が可能で,環境をまるごとコピー可能 – 環境ごとの差異を環境変数で吸収可能 n インフラによるクラスタリングとの親和性 – 「⾃⾝によるクラスタリング機能」を完全に無効化し,メモリ・ディスクから取り除くことが可能 – KubernetesのIngressなど,コンテナ環境の負荷分散 AWSのALB,Azure Load Balancerなど,パブリック・クラウド環境の負荷分散との⾼い親和性 n コンテナ環境との親和性 – 様々な事前設定をおこなった公式イメージを提供 – Liberty Operatorにより,Kubernetes/OpenShift環境での管理作業の負荷の⼤幅な削減 61
  48. 62 あなたの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で実⾏することができるか分析 • ソースやが不要で,サーバーでのツール実⾏も必要なく簡易に調査が実施できる 62
  49. 63 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の⼀覧 63
  50. 66 WebSphere Liberty / Open Liberty コミュニティサイト nhttps://ibm.biz/JapanWebSphereUG – Japan

    WebSphere User Group – ログイン無しでどなたでも参照できます – 無料のIBM IDを登録いただければ ディスカッション・Q&Aなどの 書き込みもできます – IBMからの技術情報 – 各種イベントの情報もお伝えします︕ 66