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

JJUGナイトセミナー「Jakarta EE特集:Java EE / Jakarta EE」

JJUGナイトセミナー「Jakarta EE特集:Java EE / Jakarta EE」

2022/07/25に開催されたJJUGのナイトセミナーの資料です。
https://jjug.doorkeeper.jp/events/139773

Takakiyo Tanaka

July 25, 2022
Tweet

More Decks by Takakiyo Tanaka

Other Decks in Technology

Transcript

  1. 2022 IBM Corporation ⾃⼰紹介 n ⽥中 孝清 n ⽇本アイ・ビー・エム株式会社 オートメーションソフトウェア

    テクニカルセールス n WebSphere Application Serverなどの テクニカルセールスを20年以上担当 n Twitter @TTakakiyo 1
  2. 2022 IBM Corporation アジェンダ n Specification Seminarシリーズ開始に当たって – Javaにとって仕様とは n

    Java EEからJakarta EEへの移⾏ n Java EE / Jakarta EEで提供されている機能 n Jakarta EE 10の新機能 – Jakarta EE 9を試すには n JakartaOne Livestream Japan 2022 2
  3. 2022 IBM Corporation Javaは「仕様があり」「それを実装したプロダクトがある」 5 仕様︓ “The Java® Virtual Machine

    Specification” 実装 実装 実装 HotSpot VM Sun/Oracleの実装をベースに BEA Sys.のJRockitの機能を追加し OSS化されたJVM実装 最も広く使われている IBMの実装をベースにした OSS JVM Oracleが新たに始めた LLVMベースの OSS JVMプロジェクト 「仕様」があるから,Javaのプログラムは, どのVMのうえでも(基本的に)同じように動作する
  4. 2022 IBM Corporation Java SE(Java Standard Edition) 6 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 の実⾏・開発環境の 基本をさだめた仕様群
  5. 2022 IBM Corporation Java SEを構成する仕様(例 Java SE 17) https://docs.oracle.com/en/java/javase/17/docs/specs/ n

    ⾔語仕様 – The Java Language Specification, Java SE 17 Edition n JVM(Java仮想マシン)仕様 – The Java Virtual Machine Specification, Java SE 17 Edition n 標準API仕様 – Java® Platform, Standard Edition & Java Development Kit Version 17 API Specification n 関連ツール – Java® Development Kit Version 17 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 – ・・・ 7
  6. 2022 IBM Corporation Java EE(Java Enterprise Edition) / Jakarta EE仕様とは

    n エンタープライズ・ITシステムを Javaで構築するための追加APIの標準仕様群 8 Java SE Runtime JAX-RS Servlet JMS JSON JSP EJB JPA JSF JAX-WS Massage Driven Bean JAX-B CDI JTA Concurrency Utility for Java EE JCA Java EE Management Java EE APIs
  7. 2022 IBM Corporation Java EE / Jakarta EEのスコープ n 「アプリケーションから利⽤する」Library的な機能を提供するだけでなく,

    「プログラムを呼び出す枠組み」としてのFramework的な機能も提供している n アプリケーションのパッケージング⽅法(WAR/EARファイルなど)も定義しており, 通常は管理機能も持ったApplication Server上で実⾏される 9 JRE アプリケーション JRE JRE Framework アプリ ケーション 全部の機能を ⾃⼒で実装する 再利⽤可能な Library(部品)を 利⽤して実装する 再利⽤可能な プログラムの ⼤枠(Frame)を きめるFrameworkを 利⽤して実装する JRE Application Server アプリケーション フレームワークに加え アプリケーションの 管理機能をももった Application Serverの 上で動くアプリとして 実装する アプリケーション Library
  8. 2022 IBM Corporation 標準化の価値 n Java EE仕様にしたがって書かれたライブラリ・アプリケーションは, (原則として)どの実装でも同じように稼働する n 開発者も,学習したスキルをより⻑く普遍的に活⽤することができる

    n 複数の実装が,パフォーマンスや問題判別などの⾮機能要件で競い合うことで, よりよい実装がうまれ,マーケットが活性化する 10 仕様︓ “Java Enterprise Edition Specification” 実装 実装 実装 実装 実装
  9. 2022 IBM Corporation エンタープライズJavaの標準を定義してきたJava EE n Java Community Process(JCP)で仕様策定がおこなわれてきた –

    Java EE 6までは,Sun Microsystems社が仕様策定を主導 – Java EE 7以降は,Sunを買収したOracle社が仕様策定を主導 12
  10. 2022 IBM Corporation 2016年 OracleのJava EE仕様策定に対する活動が突然低下 n 2016年以降,JCP上でのOracleの Issue対応/コードのCommitがなくなり 仕様策定が遅延し出す

    n 仕様策定をCommunityベースに 移⾏するように,多くのベンダー ユーザーグループがOracleによびかけ 13
  11. 2022 IBM Corporation 2017年︓Oracle/IBM/Red Hat会談 14 Third, we have met

    with several foundations to discuss our proposal. We appreciate the time they have invested with us, and the feedback and input they offered. After careful review, we have selected the Eclipse Foundation as the foundation that we will work with going forward to make the above a reality. The Eclipse Foundation has strong experience and involvement with Java EE and related technologies. This will help us transition Java EE rapidly, create community-friendly processes for evolving the platform, and leverage complementary projects such as MicroProfile. We look forward to this collaboration. https://orablogs-jp.blogspot.com/2017/09/opening-up-java-ee-update.html Java EE仕様策定を Eclipse財団に 移管することに
  12. 2022 IBM Corporation Jakarta EEプロジェクトの役割 n 仕様を策定する – ドキュメントならびにJavadoc –

    こちらから参照できる https://jakarta.ee/specifications/ n 実装が互換性があると認定されるのに必要なテストをおこなう TCK(Technology Compatibility Kit)を開発する – 実装ならびにドキュメント n 少なくとも⼀つの,TCKを通過した実装(参照実装) – Java EE時代はGlassFishだけだったが,Jakarta EEでは複数の実装が利⽤される 16
  13. 2022 IBM Corporation 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年6⽉(予定・遅延中)Jakarta EE 10 – 新しい機能やAPIの追加 17
  14. 2022 IBM Corporation 名前空間(パッケージ名)の変更 n javaxのパッケージ名は,Oracle社の保持する商標上の制限があるため, Jakarta EEプロジェクトで拡張することは許されなかった – Java

    EEから拡張していないJakarta EE 8での使⽤はできた n ⼀気に移⾏(ビッグバン)と段階的な移⾏が検討されたが,前者が選択された – Jakarta EE 9.0で,全仕様がjakarta名前空間に移⾏された n 既存のアプリをどのように移⾏するかは,これから – 現在までは新機能がなかったので,移⾏する動機がなかった n 今後の移⾏⽅式として考えられるもの – ソースコードをすべてjakartaパッケージに書き換える – ソースコードはjavaxのまま,実⾏する前にコンバーターツールで書き換える – jakartaとjavaxの,どちらも動く環境を利⽤する 18 import javax.inject.Inject; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;
  15. 2022 IBM Corporation Java EE / Jakarta EEで 提供される機能 19

    Jakarta EEで名前が変わった仕様は この⾊(オレンジ)で表記しています
  16. 2022 IBM Corporation Java EE / Jakarta EE全体像 n Web

    Container (Framework) – Java Servlet / Jakarta Servlet – Java Server Pages / Jakarta Server Pages n Enterprise Beans Container (Framework) – Enterprise Java Beans / Jakarta Enterprise Beans n 各種サービス(Library/⼀部Framework) – CDI – JPA / Jakarta Persistence – JTA / Jakarta Transaction – JMS / Jakarta Messaging – JCA / Jakarta Connector – JAX-RS / Jakarta RESTful Web Services – JAX-WS / Jakarta XML Web Services – Concurrency Utility for Java EE / Jakarta Concurrency などなど 20
  17. 2022 IBM Corporation Web Profile n Java EE 6で導⼊された,Webアプリ⽤途に限定したJava EE

    / Jakarta EEのサブセット 21 Batch 2.0 Connectors 2.0 Messaging 3.0 Authorization 2.0 Activation 2.0 Mail 2.0 Enterprise Beans 4.0 RESTful Web Services 3.0 JSON Processing 2.0 JSON Binding 2.0 Annotations 2.0 Interceptors 2.0 Dependency Injection 2.0 Server Pages 3.0 Expression Language 4.0 Standard Tag Libraries 2.0 Servlet 0.0 Faces 3.0 WebSocket 2.0 Enterprise Beans Lite 4.0 Managed Beans 2.0 Concurrency 2.0 Debugging Support 2.0 Authentication 2.0 Security 2.0 Persistence 3.0 Transactions 2.0 Bean Validation 3.0 Jakarta EE 9.0 Web Profile Jakarta EE 9.0 Platform サブセット CDI 3.0
  18. 2022 IBM Corporation Web Profile設定の⽬的 n Java EEは⾮常に多くの仕様が含まれているため,OSSなどでは全てを実装することが困難 n Webアプリケーションで広く使われている技術に限定し,実装を公開しやすくする

    n が,実際には,Java EE 8やJakarta EE 8 / 9では, Web Profileのみの認定を受けている実装はない n Jakarta EE 9.1では,Apache TomEEのみ n Java EE 6 Web Profileのころは,結構あった – SAP NetWeaver Cloud – Caucho Resin – Apache TomEE – JOnAS – TongTech TongWeb Application Server – Siwpas n Web Profile限定でも実装は⼤変・・・ 22
  19. 2022 IBM Corporation Jakarta EE 10︓Core Profileの新設・Concurrencyの移動 n QuarkusやHelidonなど,MicroProfileの実装で使⽤されているAPIを,新しくCore Profileに

    n ConcurrencyをPlatformからWeb Profileに移動 23 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 移動 サブセット サブセット 新規 更新なし 更新
  20. 2022 IBM Corporation Java Servlet / Jakarta Servlet n Webアプリケーションを実装し,パッケージするための仕様

    n HTTPの送受信を制御する多くの機能を提供する – リクエストの受信 – レスポンスの送信 – HTTPヘッダの操作 – HttpSessionによるセッション情報の保持 n TomcatやSpring Frameworkなど, Java EE以外のサーバーやフレームワークなどでも利⽤されている 24 @WebServlet("/config") public class ConfigServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String x = request.getParameter("x"); response.setContentType("text/html; charset=utf-8");
  21. 2022 IBM Corporation JSP(Java Server Pages)/ Jakarta Server Pages n

    テンプレートベースの動的HTML⽣成仕様 – HTML形式のファイルの中に,コードを埋めこんで,動的にページを作成する n Servlet仕様に依存し,密接に関連している n いくつかのサブ仕様をもつ – EL(Expression Language) 「式⾔語」という書式でJSPに値を埋めこむ – JSTL(JSP Standard Tag Library) / Standard Tag Library JSPで利⽤できる標準タグ・ライブラリ 25 <%@ page language="java" contentType="text/html; charset=UTF-8" import="javax.inject.Inject" pageEncoding="UTF-8" %><!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title><%@ request.getAttribute("page.title") %></title> </head> <body> <form action="config" method="post"> Base URL <input type="text" name="x" size="96" value="${param.x}"><br>
  22. 2022 IBM Corporation EJB (Enterprise Java Beans) / Jakarta Enterprise

    Beans n Enterprise Java Beans / Jakarta Enterprise Beans – ビジネスロジックをパッケージし,呼び出しやトランザクション,セキュリティの制御を⾃動化するFramework • Stateless Session Bean︓ステート(状態)を持たない処理 • Stateful Session Bean︓ステートを持ち,複数のリクエストから構成される処理を実⾏する • Message Driven Bean︓メッセージングをトリガーに処理を起動する – Jakarta EE 11でDeprecatedになるかも n EJB lite / Jakarta Enterprise Beans lite – RMI/IIOPによるリモート呼び出し機能を省いたEJBの簡易版 n Interceptor – EJBの処理にさまざまな割り込みをおこなう n Common Annotation for Java / Jakarta Annotation – EJBなどで使⽤されるアノテーションを定義 26
  23. 2022 IBM Corporation 外部連携 n JPA (Java Persistence API) /

    Jakarta Persistence – JavaのオブジェクトとRDBMSのレコードをマッピングする n JDBC (Java Database Connectivity) Java SE標準 n JMS (Java Message Service) / Jakarta Messaging n JCA (Java Connector Architecture) / Jakarta Connector – それぞれ,RDBMS(リレーショナルデータベース),MOM(メッセージ指向ミドルウェア), EIS(エンタープライズ情報システム)などの外部リソースに接続する n JTA (Java Transaction API) / Jakarta Transaction – 外部リソースのトランザクションをコーディネートする n Java Mail / Jakarta Mail n JAF(JavaBeans Activation Framework)/ Jakarta Activation – メールを送受信する 27
  24. 2022 IBM Corporation CDI (Context Dependency Injection) n CDI n

    CDI-lite – コンパイル時ではなく実⾏時に依存性を注⼊(Dependency Injection)する機能を提供 • Jakarta EE 10では,コンパイル時に注⼊を制御するAPIも追加 – 注⼊するBeanのライフサイクル管理や,注⼊時に処理を割り込ませる⼿段も提供 – CDI-liteは,実⾏時ではなくコンパイル時の注⼊にしぼったサブセット • Injectionに必須のJavaのリフレクションが使⽤できない環境(つまりはGraalVMによる実⾏可能ファイル化)むけ n Managed Beans / Jakarta Managed Beans – コンテナで管理されるBeanの仕様を定義 – CDIまでの中継ぎをになった仕様で,現在はほとんど利⽤されていない・・・ 28
  25. 2022 IBM Corporation JAX-RS / Jakarta RESTful Web Services n

    JAX-RS(Java API for RESTful Web Services) / Jakarta RESTful Web Services – RESTfulな呼び出しを介したシステム間連携の機能を提供するFramework n JSONB / Jakarta JSON Binding n JSONP / Jakarta JSON Processing – JavaでJSON形式の情報を扱うための⼿段を提供する 29
  26. 2022 IBM Corporation JAX-WS / Jakarta XML Web Services n

    JAX-WS(Java API for XML-based Web Services) / Jakarta XML Web Services – XMLベースのプロトコル(SOAP)を介したシステム間連携の機能を提供するFramework n JAXB(Java Architecture for XML Binding)/ Jakarta XML Binding n JAXP(Java Architecture for XML Processing)Java SE標準 – JavaでXML形式の情報を扱うための⼿段を提供 n Enterprise Web Service / Jakarta Enterprise Web Services – アプリケーションサーバーでWebサービスをデプロイし実⾏するパッケージングを定義し相互運⽤性を保証する n JWS(Java Web Services Metadata)/ Jakarta Web Services Metadata – Webサービスを記述し⽣成する⼿段を提供 n SAAJ(SOAP with Attachments API for Java)/ Jakarta SOAP with Attachments – SOAPにデータを添付するための仕様 n 全てOptionalあつかいになっていて,実装していなくてもJakarta EE認定は受けられる 30
  27. 2022 IBM Corporation セキュリティ n Java EE Security API /

    Jakarta Security n JASPIC(Java Authentication Service Provider Interface for Containers) / Jakarta Authentication n JACC(Java Authorization Contract for Containers) / Jakarta Authorization – Java EE/Jakarta EEアプリケーションの認証・認可およびアクセス制御の仕組みを提供する 31
  28. 2022 IBM Corporation その他 n JSF(Java Server Faces) / Jakarta

    Faces – WebアプリケーションのFramework – ページで扱う情報をバッキングビーンとして定義するなど,様々なスコープでデータを扱う⼿段を提供する n Bean Validation / Jakarta Bean Validation – ⼊⼒するデータの形式を定義し,妥当性検査をおこなう n Concurrency Utility for Java EE / Jakarta Concurrency – 新規のスレッド作成が制限されているWebコンテナ・EJBコンテナで,安全にスレッドを利⽤する n Java Batch / Jakarta Batch – バッチ系の処理を実⾏する基盤を提供するFramework n WebSocket / Jakarta WebSocket – ブラウザなどとのWebSocketをつかった双⽅向通信を提供 32
  29. 2022 IBM Corporation 今後(Jakarta EE 11移⾏で)追加が予定されている仕様 n Jakarta Config –

    MicroProfileからの逆輸⼊ – アプリケーションで各種構成ソースから統⼀された⼿法で構成情報を取得する⽅法を定義 n Jakarta MVC – JSFとはことなる,WebアプリケーションFrameworkを提供する – いわゆるStruts的なアプリケーションの実装を可能にする n Jakarta NoSQL – NoSQLデータベースの利⽤ n Jakarta RPC – gRPCの利⽤ 33
  30. 2022 IBM Corporation Jakarta EE 10で予定されている主な新機能 n CDI – Batchとの連携の強化

    n Concurrency – Java SEで提供されているパラレル・ストリームの利⽤ – CRON的な使⽤⽅法ができるトリガー n RESTful Web Services – Java SE環境で利⽤する際のBootstrap APIを提供 – multipart/form-dataのサポート – Cookieを扱う⼿段の提供 n Security – OpenID Connectのサポート n Persistence – UUIDキーのサポート – JPQLの機能強化 n Core Profileの追加 35
  31. 2022 IBM Corporation Jakarta EE 9 / 9.1を試せるOSSアプリケーションサーバー n Open

    Liberty (EPL: Eclipse Public License) – https://openliberty.io/start/#runtime_releases – Version 21.0.0.12(2021年12⽉版)以降で,Jakarta EE 9.1/8, Java EE 8/7が利⽤可能 n Eclipse GlassFish (EPL : Eclipse Public License ) – https://glassfish.org/download – Jakarta EE 9以降はVersion 6.xを,Jakarta EE 8以前はVersion 5.xを選択 n Payara Platform Community Edition (CDDL: Common Development and Distribution License ) – https://www.payara.fish/downloads/payara-platform-community-edition/ – Jakarta EE 9以降はVersion 6.xを,Jakarta EE 8以前はVersion 5.xを選択 n Wildfly(LGPL: GNU Lesser General Public License) – https://www.wildfly.org/downloads/ – Jakarta EE 9はVersion 26.xのWildfly Previewを,Jakarta EE 8以前は通常のVersion 26.xを選択 36
  32. 2022 IBM Corporation Open Libertyをお薦めする理由 n 構成ファイルを書き換え,必要に応じてFeatureを追加するだけで, Java EE 7/8,Jakarta

    EE 8/9.1のどれでも利⽤できる – 今後,Jakarta EE 10対応のバージョンがでても,当分はJava EEのAPIを使⽤し続けられる – 構成ファイル(server.xml)で,使⽤するバージョンのFeatureを指定するだけ n MicroProfileも,Java EE/Jakarta EEと組み合わせて使⽤できる – MicroProfileの1.0 / 1.2 / 1.3 / 1.4 / 2.0 / 2.1 / 2.2 / 3.0 / 3.2 / 3.3 / 4.0 / 4.1 / 5.0のどれでも利⽤できる n Jakarta EE 9.1参照実装 – Jakarta EE 10でも参照実装の⼀つになる予定 37 <featureManager> <feature>jakartaee-9.1</feature> <feature>microProfile-5.0</feature> </featureManager> <featureManager> <feature>javaee-8.0</feature> </featureManager>
  33. 2022 IBM Corporation Open Liberty Get Started n Open Liberty

    スタートページ https://www.openliberty.io/start/ – プロジェクト名やビルドツール,使⽤する仕様を選ぶと,プロジェクトの雛形がダウンロードできる – プロジェクトをビルドすると,Open Libertyの実⾏環境を含めて構築される n Micro Profile StarterでもOK https://start.microprofile.io/ – MicroProfile RuntimeでOpen Libertyを選択 38
  34. 2022 IBM Corporation 詳しくは︓6⽉,7⽉に実施されたオンライン・セッションを参照 n 「Liberty Dojo」で検索 – Liberty Dojo

    (1)︓Cloud Nativeの世界でもJava EEを使える︕ OSSの実⾏環境 Open Liberty https://ibm-developer.connpass.com/event/250329/ – Liberty Dojo (2)︓Libertyの基本的な構成⽅法 https://ibm-developer.connpass.com/event/252221/ n イベントページから,資料ならびにセッション動画が参照できます 39
  35. 2022 IBM Corporation Jakarta One LiveStream - Japan 2022開催決定 n

    2022年 9⽉16⽇ ⾦曜 13:00〜21:00 (オンライン) n 本⽇より参加登録開始︕︕︕ https://jakartaone.org/jp/2022/japan/ 41
  36. 2022 IBM Corporation Call for Paper︓コミュニティ・セッション募集中︕︕︕ n 募集枠 –40分(Q&A時間を含む) ×

    4コマ n 内容 –Jakarta EEまたはMicroProfileに関係するセッション n 応募締め切り –2022年8⽉9⽇(⽕) 23:59まで n 応募 –JakartaOne Live Stream Japanページより︓ https://jakartaone.org/jp/2022/japan/ 42