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
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 の実⾏・開発環境の 基本をさだめた仕様群
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
2022 IBM Corporation エンタープライズJavaの標準を定義してきたJava EE n Java Community Process(JCP)で仕様策定がおこなわれてきた – Java EE 6までは,Sun Microsystems社が仕様策定を主導 – Java EE 7以降は,Sunを買収したOracle社が仕様策定を主導 12
2022 IBM Corporation 2016年 OracleのJava EE仕様策定に対する活動が突然低下 n 2016年以降,JCP上でのOracleの Issue対応/コードのCommitがなくなり 仕様策定が遅延し出す n 仕様策定をCommunityベースに 移⾏するように,多くのベンダー ユーザーグループがOracleによびかけ 13
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財団に 移管することに
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
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;
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
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
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" %>
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
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
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
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
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
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
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
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
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
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
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
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
2022 IBM Corporation Jakarta One LiveStream - Japan 2022開催決定 n 2022年 9⽉16⽇ ⾦曜 13:00〜21:00 (オンライン) n 本⽇より参加登録開始︕︕︕ https://jakartaone.org/jp/2022/japan/ 41
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