Slide 1

Slide 1 text

2022 IBM Corporation JJUGナイトセミナー 「Jakarta EE特集」 ⽥中 孝清 ⽇本IBM・@TTakakiyo Java EE / Jakarta EE An IBM Open Source Project

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

2022 IBM Corporation Specification Seminar シリーズ開始に当たって 3

Slide 5

Slide 5 text

2022 IBM Corporation Write Once, Run Anywhere 4

Slide 6

Slide 6 text

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のうえでも(基本的に)同じように動作する

Slide 7

Slide 7 text

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 の実⾏・開発環境の 基本をさだめた仕様群

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

2022 IBM Corporation 標準化の価値 n Java EE仕様にしたがって書かれたライブラリ・アプリケーションは, (原則として)どの実装でも同じように稼働する n 開発者も,学習したスキルをより⻑く普遍的に活⽤することができる n 複数の実装が,パフォーマンスや問題判別などの⾮機能要件で競い合うことで, よりよい実装がうまれ,マーケットが活性化する 10 仕様︓ “Java Enterprise Edition Specification” 実装 実装 実装 実装 実装

Slide 12

Slide 12 text

2022 IBM Corporation Java EEから Jakarta EEへの移⾏ 11

Slide 13

Slide 13 text

2022 IBM Corporation エンタープライズJavaの標準を定義してきたJava EE n Java Community Process(JCP)で仕様策定がおこなわれてきた – Java EE 6までは,Sun Microsystems社が仕様策定を主導 – Java EE 7以降は,Sunを買収したOracle社が仕様策定を主導 12

Slide 14

Slide 14 text

2022 IBM Corporation 2016年 OracleのJava EE仕様策定に対する活動が突然低下 n 2016年以降,JCP上でのOracleの Issue対応/コードのCommitがなくなり 仕様策定が遅延し出す n 仕様策定をCommunityベースに 移⾏するように,多くのベンダー ユーザーグループがOracleによびかけ 13

Slide 15

Slide 15 text

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財団に 移管することに

Slide 16

Slide 16 text

2022 IBM Corporation 2018年︓Jakarta EEプロジェクトの開始 n Eclipse傘下のプロジェクトとして 多くのベンダーや組織が参加 15

Slide 17

Slide 17 text

2022 IBM Corporation Jakarta EEプロジェクトの役割 n 仕様を策定する – ドキュメントならびにJavadoc – こちらから参照できる https://jakarta.ee/specifications/ n 実装が互換性があると認定されるのに必要なテストをおこなう TCK(Technology Compatibility Kit)を開発する – 実装ならびにドキュメント n 少なくとも⼀つの,TCKを通過した実装(参照実装) – Java EE時代はGlassFishだけだったが,Jakarta EEでは複数の実装が利⽤される 16

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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;

Slide 20

Slide 20 text

2022 IBM Corporation Java EE / Jakarta EEで 提供される機能 19 Jakarta EEで名前が変わった仕様は この⾊(オレンジ)で表記しています

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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 移動 サブセット サブセット 新規 更新なし 更新

Slide 25

Slide 25 text

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");

Slide 26

Slide 26 text

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" %> <%@ request.getAttribute("page.title") %> Base URL

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

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

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

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

Slide 34

Slide 34 text

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

Slide 35

Slide 35 text

2022 IBM Corporation Jakarta EE 10の新機能 34

Slide 36

Slide 36 text

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

Slide 37

Slide 37 text

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

Slide 38

Slide 38 text

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 jakartaee-9.1 microProfile-5.0 javaee-8.0

Slide 39

Slide 39 text

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

Slide 40

Slide 40 text

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

Slide 41

Slide 41 text

2022 IBM Corporation JakartaOne Livestream Japan 2022 40

Slide 42

Slide 42 text

2022 IBM Corporation Jakarta One LiveStream - Japan 2022開催決定 n 2022年 9⽉16⽇ ⾦曜 13:00〜21:00 (オンライン) n 本⽇より参加登録開始︕︕︕ https://jakartaone.org/jp/2022/japan/ 41

Slide 43

Slide 43 text

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