contents memorandum はてな

目次とメモを置いとく場

『わかりやすいJakarta EEウェブシステム入門』(川場隆 秀和システム 2020)

著者:川場 隆[かわば・たかし]
件名:プログラミング言語
件名:ウェブアプリケーション
備考:前身は『わかりやすいJavaEEウェブシステム入門』(秀和システム、2014年)


WEBS
わかりやすいJakarta EE ウェブシステム入門 - 秀和システム あなたの学びをサポート!


【目次】
まえがき [iii-iv]
目次 [v-xx]


第1章 Jakarta EEと開発ツール
Section 1 Jakarta EEとは 002
Section 2 JET (Jakarta EE Toolkit) 004
  2.1 開発ツールの概要
    2.1.1 JDK(Java開発キット)
    2.1.2 IDE(統合開発環境)
    2.1.3 アプリケーションサーバ
    2.1.4 データベースサーバー
    2.1.5 Maven

Section 3 開発ツールの準備(Windows編) 006
  3.1 準備作業

Section 4 開発ツールの準備(MacOS編) 011
  4.1 導入作業

Section 5 プロジェクトを実行する 014

Section 6 まとめ 016


第2章 HTMLとCSS
Section 1 HTMLの基本 018
  1.1 HTMLファイルの作成と表示
    1.1.1 プロジェクトグループの作成
    1.1.2 プロジェクト」を作成する
    1.1.3 表示用のブラウザを設定する
    1.1.4 htmlファイルを表示する
  1.2 基本的なHTML文書を作成して実行する
    1.2.1 コード補完機能(NetBeansの)
    1.2.2 実行
  1.3 HTML文書の成り立ち
    1.3.1 タグの仕組み
    1.3.2 基本的なタグ
      titleタグ
      h1タグ
      divタグ
      pタグ
    1.3.3 ブロックレベル要素

Section 2 HTMLにCSSを適用する 028
  2.1 CSSを書いて実行する
  2.2 CSSの基本形
  2.3 複数のCSSを適用する

Section 3 CSSの詳細 032
  3.1 CSSの属性と値
    [表]代表的なCSS属性
    3.1.1 marginとpadding
  3.2 単位
  3.3 色
  3.4 セレクタ
    3.4.1 タイプセレクタ
    3.4.2 IDセレクタ
    3.4.3 クラスセレクタ
    3.4.4 タイプセレクタの適用範囲を限する書き方
  3.5 HTMLタグのstyle属性にCSSを書く
  3.6 外部CSSファイルを使用する
    3.6.1 例題の作成手順

Section 4 よく使うHTMLタグ 040
  4.1 入力フォームとボタン
    4.1.1 formタグ
    4.1.2 inputタグ
    4.1.3 checkbox、radio、image
  4.2 選択
  4.3 テキスト入力
  4.4 リスト、画像、リンク
    4.4.1 画像
    4.4.2 リスト
    4.4.3 リンク
    4.4.4 CSS
  4.5 テーブル
    4.5.1 表示を調整するCSS
    4.5.2 tableにCSSを適用する
    4.5.3 変則的な表
  4.6 ブロックレベル要素とインライン要素
    4.6.1 ブロックレベル要素
    4.6.2 インライン要素
    4.6.3 幅と高さを持つインライン要素
    4.6.4 display属性

Section 5 画面のレイアウト 056
  5.1 テーブルタグによるレイアウト
  5.2 プロジェクトの読み込みと実行
  5.3 CSSによるレイアウト

Section 6 まとめ 063
  要点 063
  練習064


第3章 ウェブアプリケーションの仕組み
Section 1 プロジェクトの構成
  1.1 各種の設定ファイル
  1.2 ウェブデータ
  1.3 ソース・パッケージ
  1.4 persistence.xml
  1.5 pom.xml

Section 2 バッキングビーン 069
  2.1 バッキングビーンとは
  2.2 バッキングビーンの作成
  2.3 アノテーションの役割
    @Named
    @RequestScoped
  2.4 アノテーションの追加と自動インポート
    アノテーションの付け方

Section 3 JSFページ 076
  3.1 JSFページの構成
    3.1.1 画面表示に関係する記述
    3.1.2 名前空間の定
    3.1.3 Faceletsとバッキングビーンを結び付けるEL式[Expression Language]
    3.1.4 コマンドボタンの働き
  3.2 ウェブアプリケーションの動作を確認する
    3.2.1 出力メソッドを追加する
    3.2.2 ボタンにactionListenerを追加する
      actionListener属性の用途
    3.2.3 値の受け渡しを確認する

Section 4 ページナビゲーション 083
  4.1 ウェブページの構成
    4.1.1 h:commandButton(コマンドボタン)
    4.1.2 h:link(リンク)
  4.2 プロジェクトの読み込みと実行
    4.2.1 h:outputText
  4.3 ナビゲーションの実行と確認

Section 5 ウェブアプリケーションとPayara Server 090
  5.1 ウェブアプリケーションのパッケージング
  5.2 Payara Serverの操作方法
    5.2.1Payara Serverの管理画面を開く

Section 6 まとめ 093
  要点 093
  練習 094


第4章 JSFの基礎
Section 1 JSFJavaServer Faces]の仕組み 098
  1.1 HTTP通信とMVCアーキテクチャ
    1.1.1 コンポーネントベースとアクションベースのMVC
  1.2 JSFとは
    1.2.1 コンポーネントベースのMVCフレームワーク
  1.3 FacesServlet
    1.3.1 コンポーネントツリー
    1.3.2 レンダリング
  1.4 JSFのライフサイクル
  1.5 web.xml

Section 2 Faceletsタグの概要 109
  2.1 Faceletsタグの分類
  2.2 ネームスペース宣言
  2.3 主要なタグ一覧

Section 3 リソースの管理と利用 113
  3.1 resourcesフォルダ
  3.2 リソースの指定方法
  3.3 リソースのバージョニング
  3.4 JavaScriptを使用する
    3.4.1 JavaScriptを実行する仕組み
    3.4.2 イベント属性一覧表

Section 4 まとめ 120
  要点 120
  練習 121


第5章 JSF:入力と出力の基本
Section 1 表とレイアウト 124
  1.1 h:panelGridの基本
  1.2 h:panelGridの属性
  1.3 h:panelGridで見栄えのする表を描く
    1.3.1 罫線の引き方
    1.3.2 列ごとのCSS指定
    1.3.3 f:facetによるヘッダ行の追加
  1.4 Faceletsタグの属性のまとめ

Section 2 テキストと画像の出力 131
  2.1 テキスト出力(h:outputText)
    2.1.1 h:panelGridでの利用
    2.1.2 エスケープ文字
  2.2 フォーマット出力(h:outputFormat)
  2.3 ラベル(h:outputLabel)
  2.4 テキスト出力タグの属性
  2.5 画像出力(h:graphicImage)

Section 3 画面からの入力 139
  3.1 入力領域(h:inputText、h:inputTextarea)
    3.1.1改行コードを含むデータの表示方法
    3.1.2 表内の上下方向揃えについて
  3.2 パスワード入力(h:inputSecret)
  3.3 隠し項目(h:inputHidden)
  3.4 入力タグの属性

Section 4 メッセージ処理 145
  4.1 項目ごとにエラーメッセージを表示する(h:message)
  4.2 エラーメッセージをまとめて表示する(h:messages)
  4.3 メッセージの種類とメッセージタグの属性
  4.4 エラーメッセージをカスタマイズする

Section 5 まとめ 151
  要点 151
  練習 152


第6章 JSF:ボタン・リンクと選択
Section 1 ボタンとリンク 156
  1.1 postとgetの違い
  1.2 コマンドボタン(h:commandButton)
  1.3 コマンドリンク(h:commandLink)
  1.4 h:link
  1.5 h:button
  1.6 h:outputLink
  1.7 ボタンとリンクの属性

Section 2 選択のタグ 169
  2.1 h:selectBooleanCheckbox
  2.2 h:selectManyCheckbox
    2.2.1 値の受け取り
    2.2.2 選択肢をまとめて指定する(f:selectItems)
      Mapで選択肢を割り当てる
      オブジェクトの配列で選択肢を割り当てる
  2.3 h:selectOneRadio
    2.3.1 縦に並べて表示する
  2.4 h:selectOneListbox
  2.5 h:selectManyListbox
  2.6 h:selectOneMenu
  2.7 h:selectManyMenu
  2.8 選択肢と選択タグの属性

Section 3 まとめ 190
  要点 190
  練習 193


第7章 表作成、HTML5
Section 1 データテーブル 198
  1.1 データテーブルの基本
    1.1.1 h:dataTable
    1.1.2 初期化ブロック
  1.2 h:dataTableで表示できるもの
  1.3 f:facetによるヘッダ、フッタ、キャプションの追加
  1.4 CSSを使って見やすい表にする

Section 2 実用的なデータテーブル 206
  2.1 編集できるようにする
  2.2 編集できるデータテーブルの作成方法
  2.3 クリックした行のオブジェクトを取得する
  2.4 h:dataTableの属性

Section 3 HTML5とFaceletsの連携 215
  3.1 HTMLタグをFaceletsタグとして使う(Passing-Through Elements)
  3.2 Faceletsタグの中にHTML5の属性を書く(Passing-Through Attribute)

Section 4 まとめ 219
  要点 219
  練習 221


第8章 コンバータとバリデータ
Section 1 標準コンバータ 224
  1.1 標準コンバータ
  1.2 日付時刻のコンバータ(f:convertDateTime)
    1.2.1 日付の入力
    1.2.2 日付の出力
    1.2.3 HTML5のtype属性を指定する
    1.2.4 和暦での表示
  1.3 整数のコンバータ(f:convertNumber)

Section 2 標準バリデータ 234
    2.0.1 バリデータの使い方
    2.0.2 エラーメッセージ

Section 3 エラーメッセージのカスタマイズ 238
  3.1 プロパティファイルの作成
  3.2 プロパティファイルの編集
  3.3 JSFシステムに登録する

Section 4 ビーン・バリデーション 242
  4.1 ビーン・バリデーションとは
  4.2 ビーン・バリデーションで使えるアノテーション
    4.2.1 @Null @NotNull
    4.2.2 @NotEmpty
    4.2.3 @NotBlank
    4.2.4 @Min @Max
    4.2.5 @DecimalMin @DecimalMax
    4.2.6 @Digit
    4.2.7 @Size
    4.2.8 @Pattern
    4.2.9 @Positive、@Negative、@PositiveOrZero、@NegativeOrZero
    4.2.10 @Past、@Future、@PastOrPresent、@FutureOrPresent
    4.2.11 @AssertTrue @AssertFalse
  4.3 ビーン・バリデーションの適用方法
    4.3.1 エラーメッセージの表示
  4.4 ゲッターへの指定
  4.5 メッセージバンドルの利用
    4.5.1 エラーメッセージの一時的な変更

Section 5 バリデータの作成 250
  5.1 インタフェースの作成
  5.2 検証を行うクラス(バリデータ)の作成
    5.2.1 クラスファイル作成手順
    5.2.2 ConstraintValidatorインタフェース

Section 6 クラスレベルのバリデーション 255
    6.0.1 web.xmlに追記して有効にする(①)
    6.0.2 グループ名の作成(②)
    6.0.3 入力用のJSFページを作成する(③、④)
    6.0.4 カスタムバリデータを作成する(⑤)
    6.0.5 バッキングビーンに作成したアノテーションを適用する(⑥、⑦)
    6.0.6 実行結果

Section 7 まとめ 260
  要点 260
  練習 262


第9章 Ajax機能
Section 1 Ajax機能とは 266
  1.1 Ajaxが必要なケースの例

Section 2 Ajax機能による改良 270
  2.1 Ajax機能の使用方法(f:ajaxタグ)
    2.1.1 event属性
    2.1.2 execute属性
    2.1.3 listener属性
  2.2 スコープアノテーションを変更する
    2.2.1 Serializableインタフェースの実装

Section 3 Ajaxコマンドボタン 274

Section 4 Ajaxバリデーション 276
    event="blur"
    execute="@this"
    render="massageCode"
  4.1 Ajaxバリデーションの例題プログラム
  4.2 Ajax処理とスコープアノテーション
  4.3 JSFのライフサイクルとAjax処理

Section 5 f:ajaxタグの属性と指定できる値 281

Section 6 まとめ 283
  要点 283
  練習 284


第10章 リソースバンドルと国際化
Section 1 リソースバンドル 286
  1.1 プロパティファイルの作成と登録
    1.1.1 base-name
    1.1.2 var
    1.1.3 メッセージバンドルとリソースバンドル 
  1.2 リソースバンドルの適用

Section 2 リソースバンドルの国際化 292
  2.1 国際化とは
  2.2 ロケールファイルの作成
  2.3 ロケールファイルの編集
  2.4 ロケールの登録

Section 3 まとめ 296
  要点 296
  練習 297


第11章 テンプレート機能
Section 1 テンプレート機能 300
  1.1 テンプレート機能とは
  1.2 テンプレートファイルの作成
  1.3 テンプレートファイル

Section 2 テンプレート用表示データの作成 307
  2.1 content-1.xhtmlファイルの作成
  2.2 content-1.xhtmlの編集

Section 3 テンプレートファイルを使用する 309
  3.1 index.xhtmlの作成
  3.2 output.xhtmlの作成
  3.3 テンプレート関連タグのまとめ

Section 4 まとめ 313
  要点 313
  練習 314


第12章 CDI ――新しいオブジェクトの作り方
Section 1 CDIJakarta Context and Dependency Injection]とは 318
  1.1 CDIを使ってみる
  1.2 CDIのスコープアノテーション
  1.3 FacesContextとServletContext
  1.4 インジェクションポイント

Section 2 Conversation(会話)スコープ 331
  2.1 例題の画面推移
  2.2 会話処理の開始と終了
    2.2.1 情報の表示
  2.3 JSFページの内容

Section 3 複数ページをまとめるFlowスコープ 336
  3.1 FLOWスコープ用のフォルダの作成
  3.2 Flow定義ファイルの作成
  3.3 JSFページの書き方
  3.4 バッキングビーンの書き方

Section 4 インジェクトできるようにする@Produces 341
  4.1 @Producesの使い方
  4.2 Listを返すメソッドに@Producesを付ける
  4.3 フィールドに@Producersを付ける
  4.4 インジェクトできるロガーを作る
  4.5 後始末をするためのディスポーザー
    4.5.1 ログをファイルにも出力するようにする
    4.5.2 ファイルハンドラーを閉じる

Section 5 CDIビーンの実装を使い分ける 351
  5.1 設定ファイル(bean.xml)を使う方法
  5.2 アノテーションを使う方法

Section 6 まとめ 356
  要点 356
  練習 357


第13章 CDIの高度な機能
Section 1 コールバックメソッド 360
  1.1 ライフサイクル・コールバックメソッド

Section 2 インターセプター(割り込み処理) 363
  2.1 カスタムアノテーションの作成
  2.2 インターセプタを作成する
    2.2.1 コンストラクタ用のインターセプタでの処理
    2.2.2 メソッド用のインターセプタでの処理
  2.3 インターセプタをCDIに登録する
  2.4 インターセプタを使う

Section 3 デコレーター 370
  3.1 デコレーターを作成する
  3.2 beans.xmlに登録する
  3.3 使用例

Section 4 オブザーバー(イベント駆動処理) 375
  4.1 同期イベント処理
  4.2 非同期イベント処理

Section 5 まとめ 382
  要点 382
  練習 383


第14章 Jakarta Enterprise Beans(EJB)
Section 1 Jakarta Enterprise Beansの概要 386
  1.1 EJBの種類
    1.1.1 ステートレスセッションビーン
    1.1.2 ステートフルセッションビーン
    1.1.3 シングルトンセッションビーン
  1.2 DI(依存性注入)
  1.3 セッションビーンの書き方

Section 2 シングルトン・セッションビーン 390
  2.1 シングルトンセッションビーンを使う
  2.2 ウェブアプリケーション(画面1)
  2.3 ウェブアプリケーション(画面2)
  2.4 シングルトンセッションビーンで使えるアノテーション

Section 3 タイマーサービス 394
  3.1 タイマーサービスの起動と終了
    3.1.1 タイマーサービスの終了方法
  3.2 タイマーサービスの作り方
    3.2.1 @Scheduleアノテーション

Section 4 非同期呼び出し 398

Section 5 まとめ 400
  要点 400
  練習 401


第15章 データベースの基礎
Section 1 データベースとは 404
  1.1 リレーショナルデータベース
  1.2 JPAの役割

Section 2 データベースシステムのセットアップ 407
  2.1 Dockerのダウンロードとインストール
    2.1.1 Dockerの起動と確認
  2.2 MySQLデータベースを動かす
    2.2.1 操作方法 Windows
    2.2.2 操作方法 Mac
  2.3 Dockerの仕組み
    2.3.1 environment:(環境変数
    2.3.2 command:
    2.3.3 ports:
    2.3.4 volumes:
  2.4 NetBeansからMySQLの起動・停止を行う
  2.5 NetBeansでデータベースmydbの内容を確認できるようにする
  2.6 Payara Serverの設定

Section 3 データベースの使い方 417
  3.1 エンティティの作成
  3.2 persistence unit (永続性ユニット)
    3.2.1 persistence unit
  3.3 エンティティマネージャーの使い方
  3.4 入力データをデータベースに保存する
  3.5 データベースの中身を見る
  3.6 @Transactionalアノテーション

Section 4 CRUD処理 428
  4.1 エンティティマネージャーのAPIと使い方
    4.1.1 新規登録:em.persist(meibo)
    4.1.2 更新:em.merge(meibo)
    4.1.3 検索:em.find(meibo.class, key)
    4.1.4 削除:em.remove(em.merge(meibo))
    4.1.5 全データのListを返す
  4.2 CRUD処理の書き方
    4.2.1 バッキングビーンと一覧表示の仕組み
    4.2.2 新規登録処理
    4.2.3 更新処理
    4.2.4 検索処理
    4.2.5 削除処理
  4.3 バッキングビーンソースコード

Section 5 まとめ 440
  要点 440
  練習 442


第16章 マッピングアノテーション
Section 1 マッピングアノテーションの概要 444
  1.1 アノテーションの概要
  1.2 デフォルトのマッピング

Section 2 エンティティの構成を指定する 446
  2.1 テーブルの名前や項目の名前を変える
  2.2 複数のテーブルで構成する
  2.3 他のクラス全体を1つのフィールドとして組み込む
  2.4 カラムの名前を変える
  2.5 カラムをデーベースに保管しないように指示する

Section 3 主キーの構成を指定する 453
  3.1 主キーを自動生成する
  3.2 複合キーを使う
    3.2.1 【重要】複合キーのクラスではequalsとhashCodeをオーバーライドする
  3.3 複合キーを使う(@IdClass)

Section 4 ファイル、列挙、日付と時刻の扱い方 460
  4.1 ファイルなどの大きなデータを記録する
  4.2 列挙の記録方法を指定する
  4.3 日付と時刻の取り扱い

Section 5 マッピングの適用例 462
  5.1 エンティティ・クラス
  5.2 バッキングビーン(全体のソースリストは5.5に掲載)
  5.3 index.xhtml
  5.4 画像データの受け渡し
  5.5 バッキングビーン(全体)

Section 6 コレクションとマップを使う 472
  6.1 フィールド変数にListやSetを使う
  6.2 フィールド変数にMapを使う

Section 7 まとめ 478
  要点 478
  練習 480


第17章 オブジェクト関係マッピング(ORM)
Section 1 オブジェクト関係マッピングとは 486
  1.1 オブジェクトをフィールドに持つことで関係ができる
  1.2 ORMの種類

Section 2 1方向のOne-to-One 489
  2.1 DAOの作成手順
  2.2 エンティティの新規登録
  2.3 永続性コンテキストの制約
  2.4 Customerエンティティの一覧表示
  2.5 @JoinColumnで外部キーの名前を指定する
  2.6 カスケードを指定して保存を簡単にする
  2.7 データベースからの削除(remove)

Section 3 双方向のOne-to-One 499
  3.1 マッピングの指定方法
  3.2 エンティティの新規作成
  3.3 Addressエンティティを読み出してみる

Section 4 1方向のMany-to-One 503
  4.1 マッピングの指定方法
  4.2 エンティティの作成とデータベースへの新規登録
  4.3 社員エンティティを一覧出力する

Section 5 1方向のOne-to-Many 507
  5.1 マッピングの指定方法
  5.2 エンティティの作成と登録
  5.3 講義エンティティの表示

Section 6 双方向のOne-to-Many(Many-to-Oneも同じ) 511
  6.1 マッピングの指定方法
  6.2 エンティティの新規登録
  6.3 エンティティの表示

Section 7 1方向のMany-to-Many 514
  7.1 マッピングの指定方法
  7.2 エンティティの作成と登録
  7.3 エンティティの表示 

Section 8 双方向のMany-to-Many 514
  8.1 マッピングの指定方法
  8.2 エンティティの作成
  8.3 エンティティの出力

Section 9 まとめ 523
  要点 523
  練習 525


第18章 問い合わせ言語JPQL
Section 1 JPQL TEST 528
  1.1 JPQL TESTについて
  1.2 JPQL TESTで操作するデータベーステーブル
    1.2.1 Employee
    1.2.2 Address
    1.2.3 Phone
    1.2.4 Department
    1.2.5 Project

Section 2 JPQLの書き方 532
  2.1 SELECT文
    2.1.1 Addressエンティティをすべて抽出する
    2.1.2 Addressエンティティを、郵便番号順に並べた状態ですべて抽出する
    2.1.3 Addressエンティティのうち神奈川県の住所だけ抽出する
    2.1.4 都道府県別にエンティティの数を数える
  2.2 集計関数
  2.3 識別変数とPath式

Section 3 where句で使える演算子 536
  3.1 いろいろな演算子
  3.2 演算子の使い方
    3.2.1 v BETWEEN a AND b
    3.2.2 str LIKE exp
    3.2.3 v IN (a1, a2, ...)
    3.2.4 c IS [NOT] EMPTY
    3.2.5 サブクエリ
    3.2.6 e [NOT] EXISTS (sub-query)
    3.2.7 v ope ALL (sub-query), v ope ANY (sub-query)
    3.2.8 IN (sub-query)

Section 4 JPQLの中で使える関数 541
    捕捉

Section 5 distinctとコンストラクタ式 542
  5.1 重複を取り除くDISTINCTオペレータ
  5.2 結果からオブジェクトを作るコンストラクタ式

Section 6 レコードを結合するJOIN 545
  6.1 2つのエンティティの組み合わせ
  6.2 内部結合(INNER JOIN) --- エンティティ内部のListとの直積
    nullとは直積を取らない
  6.3 外部結合(LEFT JOIN)--- 相手がnullでも直積を取る

Section 7 一括更新と一括削除 549
  7.1 一括更新
  7.2 一括削除

Section 8 JPQLをJavaプログラムから実行する 551
  8.1 動的クエリ Query型
    8.1.1 @Transitionalについて
    8.1.2 実行結果
  8.2 動的クエリ TypedQuery型
  8.3 コンストラクタ式による検索結果の抽出
  8.4 更新と削除
  8.5 名前付きクエリ
    8.5.1 クエリ・パラメータ
  8.6 メソッドのまとめ
  8.7 ORMでマッピングされたエンティティの削除
    8.7.1 addressフィールド --- orphanRemoval=trueの指定(①)
    8.7.2 phonesフィールド --- orphanRemoval=trueの指定(②)
    8.7.3 departmentフィールド --- 何もしない
    8.7.4 projectsフィールド --- 何もしない
    8.7.5 managerフィールド --- managerのdirectsから削除しておく
    8.7.6 directsフィールド --- directsの各要素から削除しておく

Section 9 N+1問題 564
  9.1 デフォルトのフェッチタイプ
  9.2 N+1問題とは
  9.3 EAGERフェッチに変えても問題は解決されない
  9.4 LEFT JOIN FETCH
  9.5 マルチLEFT JOIN FETCH

Section 10まとめ 573
  要点 573
  練習 574


第19章 セキュリティAPI
Section 1 どのページに制限をかけるか指定する 576

Section 2 利用者を登録する 579
  2.1 テーブルの構成とエンティティクラス
  2.2 データベースへの登録処理

Section 3 データベースストアの使用設定 584
  3.1 アノテーションで設定する
  3.2 論理JNDI名を使えるようにする

Section 4 認証方式の指定 587
  4.1 カスタムFORM認証とは
  4.2 認証方式としてカスタムフォーム認証を指定する

Section 5 認証処理の作成 589
  5.1 login.xhtmlの作成
  5.2 login用バッキングビーンの作成
  5.3 ログアウト用バッキングビーンの作成
  5.4 認証されているかチェックする仕組み
  5.5 例題1を実行する
  5.6 SecurityContext

Section 6 まとめ 597
  要点


第20章 RESTfulウェブサービス
Section 1 RESTfulウェブサービスの概要 600
  1.1 RESTとは
  1.2 RESTfulウェブサービスの構成方法
  1.3 クライアントプログラムで実行する

Section 2 サブURIの指定とPathパラメータ 604
  2.1 サブURI
  2.2 Pathパラメータ

Section 3 Queryパラメータ 607
  3.1 Queryパラメータ
  3.2 Querayパラメータのデフォルト値
  3.3 複数のQueryパラメータ
  3.4 通信テストプログラムの利用

Section 4 HTTPとメディアタイプ 612
  4.1 MIMEタイプ
  4.2 @ProducesとMIMEタイプの選択メカニズム
  4.3 @Consumes

Section 5 戻り値の作成 620
  5.1 戻り値に使うResponseクラス
  5.2 CRUDウェブサービス

Section 6 クライアントAPI 627
  6.1 CRUD処理の概要
  6.2 クライアントAPIの使い方

Section 7 まとめ 634
  要点


第21章 ウェブアプリケーション
Section 1 プログラミングの準備 638
  1.1 継承を利用してバッキングビーンを分ける
  1.2 データベース処理のクラスを作る
  1.3 ページングマネージャーを作る

Section 2 『雑貨屋さん.com』について 641
  2.1 商品データ、顧客データの作成
  2.2 例題システムの画面構成
  2.3 各画面の機能概要
  2.4 テンプレート構成

Section 3 エンティティの作成 646
  3.1 エンティティの種類
  3.2 エンティティ設計の注意
  3.3 エンティティの自動生成

Section 4 商品の一覧表示(トップページ) 650
  4.1 バッキングビーンでの初期化
  4.2 コマンドリンクとページナビゲーション
  4.3 メニューバー
  4.4 商品一覧表示
  4.5 その他のページ

Section 5 ログイン認証 663

Section 6 『雑貨屋さん.com』のソースコード 664

Section 7 まとめ 672
  要点
  課題


巻末資料
Section 1 既定のブラウザを設定する方法 676

Section 2 サーバーのデータベース設定(Windows用) 677
  2.1 準備作業 ― Javaのパスを環境変数に登録する
  2.2 Payara Serverのセットアップ

Section 3 サーバーのデータベース設定(一般的な方法) 679
  3.1 データベースドライバの登録(JETでは不要)
  3.2 コネクションプールの作成
  3.3 データソースの作成

Section 4 プロジェクトの作成方法 683

Section 5 MySQLの外部ボリュームを変更する 685

Section 6 その他の資料 686


索引 [687-699]





【抜き書き】


Java EEJakarta EEの歴史と特徴を述べた部分(pp.2-3)。

 Jakarta EE[Java Enterprise Edition]は、Java SE[Java Standard Edition]ではカバーされないデータベース処理、トランザクション機能、データ変換、ウェブ通信やメッセージ通信、分散ネットワーク、セキュリティ、バッチ処理など、実務的・応用的なソフトウェアを開発するための、さまざまなライブラリの集合体です。
 Java言語を使って業務用プログラムを開発するには、もはやJavaSEだけではどうにもならないことは明らかです。近年、〔……〕Jakarta EEの技術は必要不可欠のものになりました。
 最も顕著なものは、データベース技術です。Javaオブジェクトをそのまま読み書きできるオブジェクト指向データベース技術(JPAJava Persistence API)は、データベース操作に革命をもたらしました。JPAにより、データベース接続を意識することなく、普通の読み書きと同じようにデータベースを操作できます。
 そして、クラス同士を疎結合に保ち、改訂の容易なシステムを構築する技術が、CDIContext Dependency Injection)です。もやはオブジェクトはnewで作るのではなく、CDIサービスが勝手に作ってくれるのでそれを使うだけでよくなりました。また、実行中のメソッドに割り込んでログを取ったりする処理も、簡単なアノテーションを付けるだけで動かせます。いろいろな高度な処理を簡単に書けるのはまさにCDIの働きです。
 WEBをユーザーインタフェースとするシステムは、2000年前後からservletという技術を基礎に作成されてきましたが、データの検証、画面遷移やセッション制御など、大量のコードを書かないと完結しない大仕事でした。しかし、それもJSFJava ServerFaces)の登場により一挙にハードルが下がりました。ウェブ用のコンポーネント(部品)を組み合わせるだけで、高度なウェブシステムを作成できます。また、ユーザーインタフェースは持たないものの、アクセスするといろいろなサービスをクライアントに提供するサーバーが注目されています。そのようなサーバーを簡単に構築する技術をRESTfulウェブサービスといい、JakartaEEでは、Jakarta RESTful Web Servicesと呼ばれています。
 一方、近年、Dockerコンテナという軽量の仮想環境を使って、いくつものサーバーをすばやく起動することができるようになりました。そこで、Dockerコンテナ上に、RESTfulウェブサービスを使ってシンプルな機能のサーバーをいくつも起動し、それらを協働させて大きなシステムを構築しようとする動きが盛んになってきました〔……〕。
 セキュリティに関する機能も、従来から業務アプリケーションの重要テーマでした。特にサーバーに固有な機能として組み込まれた機能はこれまで重要な働きをしてきましたが、Jakarta EEでは、それらを標準APIにまとめ、サーバーが変わっても同じ仕組みで認証や認可ができるようにしています。APIであれば、汎用的なプログラムを作成できるので、大変有用です。
 さらに、チャットシステムのような多数のノード間での通信を効率よく実行するウェブソケット、1対多でデータを非同期に送受信するメッセージング機能、一連の作業をまとめて効率よく実行するバッチ機能など、Jakarta EEが可能にする有用な業務向けの機能はたくさんあります。


・名称変更について。

 さて、このようなエンタープライズ版のJavaは、"Java EE"という名前で知られていましたが、2017年にOracle社からオープンソースコミュニティの非営利法人Eclipse財団に譲渡され、その結果2019年に名称が変更されて、現在のJakarta EEになりました。現在は、全体を網羅するフルプロファイルとウェブアプリケーション技術だけを集めたウェブプロファイルの2つのディストリビューションがあります。
 また、クラウド上での分散アプリケーション開発に特化したマイクロプロファイルが、Jakarta EEに基づいて開発され、別種のディストリビューションとして展開されています。マイクロプロファイルは、現在も早いスピードで改訂が進んでいます。
 Jakarta EEは、譲渡後の2019年にJava EE8を引き継いだJakarta EE8として登場し、さらに2020年のJakarta EE9で、パッケージ名をjavaxからjakartaに変更するという大きな出来事がありました。これで、名実共に、Jakarta EEとなり、今後の出発点になるバージョンができました。〔……〕
 例えば、これまでウェブ画面を含めたアプリケーション開発技術としてはコンポーネントベースのJSFだけしか使えませんでしたが、アクションベースのMVCが仕様に含められることになり、応用の範囲が広がります。また、今後期待されている新機能として、コア機能であるCDIの機能拡張や、マイクロプロファイルの機能拡張などがあります。特に、マイクロプロファイルは、現在のJakarta EEが持っていないような分散システムに固有の拡張を続けており、やがてそれらがJakarta EE標準に取り込まれることで、クラウドネイティブ時代の新しいエンタープライズJavaが形作られていくと期待されています。


Java EEからの転換の理由については、著者によるこの記事(2021年01月)で解説されている。
JavaEEとJakartaEE、どう違うの? - Qiita