わかりやすいJakarta EE  -目次-

第1章 Jakarta EEと開発ツール

Section 1 Jakarta EEとは 2

Section 2 JET (Jakarta EE Toolkit) 4

2.1 開発ツールの概要 4

Section 3 開発ツールの準備(Windows編) 6

3.1 準備作業 7

Section 4 開発ツールの準備(MacOS編) 11

4.1 導入作業 11

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

Section 6 まとめ 16

第2章 HTMLとCSS

Section 1 HTMLの基本 18

1.1 HTMLファイルの作成と表示 18

1.2 基本的なHTML文書を作成して実行する 21

1.3 HTML文書の成り立ち 24

Section 2 HTMLにCSSを適用する 28

2.1 CSSを書いて実行する 28

2.2 CSSの基本形 30

2.3 複数のCSSを適用する 31

Section 3 CSSの詳細 32

3.1 CSSの属性と値 32

3.2 単位 34

3.3 色 34

3.4 セレクタ 35

3.5 HTMLタグのstyle属性にCSSを書く 37

3.6 外部CSSファイルを使用する 38

Section 4 よく使うHTMLタグ 40

4.1 入力フォームとボタン 40

4.2 選択 43

4.3 テキスト入力 44

4.4 リスト、画像、リンク 46

4.5 テーブル 49

4.6 ブロックレベル要素とインライン要素 53

Section 5 画面のレイアウト 56

5.1 テーブルタグによるレイアウト 56

5.2 プロジェクトの読み込みと実行 57

5.3 CSSによるレイアウト 59

Section 6 まとめ 63

要点 63

練習 64

第3章 ウェブアプリケーションの仕組み

Section 1 プロジェクトの構成 66

Section 2 バッキングビーン 69

2.1 バッキングビーンとは 69

2.2 バッキングビーンの作成 70

2.3 アノテーションの役割 72

2.4 アノテーションの追加と自動インポート 74

Section 3 JSFページ 76

3.1 JSFページの構成 76

3.2 ウェブアプリケーションの動作を確認する 79

Section 4 ページナビゲーション 83

4.1 ウェブページの構成 83

4.2 プロジェクトの読み込みと実行 85

4.3 ナビゲーションの実行と確認 88

Section 5 ウェブアプリケーションとPayara Server 90

5.1 ウェブアプリケーションのパッケージング 90

5.2 Payara Serverの操作方法 91

Section 6 まとめ 93

要点 93

練習 94

第4章 JSFの基礎

Section 1 JSFの仕組み 98

1.1 HTTP通信とMVCアーキテクチャ 98

1.2 JSFとは 99

1.3 FacesServlet 100

1.4 JSFのライフサイクル 102

1.5 web.xml 105

Section 2 Faceletsタグの概要 109

2.1 Faceletsタグの分類 109

2.2 ネームスペース宣言 110

2.3 主要なタグ一覧 110

Section 3 リソースの管理と利用 113

3.1 resourcesフォルダ 113

3.2 リソースの指定方法 113

3.3 リソースのバージョニング 115

3.4 JavaScriptを使用する 116

Section 4 まとめ 120

要点 120

練習 121

第5章 JSF:入力と出力の基本

Section 1 表とレイアウト 124

1.1 h:panelGridの基本 124

1.2 h:panelGridの属性 126

1.3 h:panelGridで見栄えのする表を描く 127

1.4 Faceletsタグの属性のまとめ 129

Section 2 テキストと画像の出力 131

2.1 テキスト出力(h:outputText) 131

2.2 フォーマット出力(h:outputFormat) 135

2.3 ラベル(h:outputLabel) 136

2.4 テキスト出力タグの属性 137

2.5 画像出力(h:graphicImage) 137

Section 3 画面からの入力 139

3.1 入力領域(h:inputText、h:inputTextarea) 139

3.2 パスワード入力(h:inputSecret) 141

3.3 隠し項目(h:inputHidden) 142

3.4 入力タグの属性 143

Section 4 メッセージ処理 145

4.1 項目ごとにエラーメッセージを表示する(h:message) 145

4.2 エラーメッセージをまとめて表示する(h:messages) 147

4.3 メッセージの種類とメッセージタグの属性 148

4.4 エラーメッセージをカスタマイズする 149

Section 5 まとめ 151

要点 151

練習 152

第6章 JSF:ボタン・リンクと選択

Section 1 ボタンとリンク 156

1.1 postとgetの違い 156

1.2 コマンドボタン(h:commandButton) 158

1.3 コマンドリンク(h:commandLink) 160

1.4 h:link 162

1.5 h:button 166

1.6 h:outputLink 167

1.7 ボタンとリンクの属性 168

Section 2 選択のタグ 169

2.1 h:selectBooleanCheckbox 170

2.2 h:selectManyCheckbox 172

2.3 h:selectOneRadio 178

2.4 h:selectOneListbox 181

2.5 h:selectManyListbox 183

2.6 h:selectOneMenu 185

2.7 h:selectManyMenu 187

2.8 選択肢と選択タグの属性 188

Section 3 まとめ 190

要点 190

練習 193

第7章 表作成、HTML5

Section 1 データテーブル 198

1.1 データテーブルの基本 198

1.2 h:dataTableで表示できるもの201

1.3 f:facetによるヘッダ、フッタ、キャプションの追加 202

1.4 CSSを使って見やすい表にする 203

Section 2 実用的なデータテーブル 206

2.1 編集できるようにする 206

2.2 編集できるデータテーブルの作成方法 207

2.3 クリックした行のオブジェクトを取得する 210

2.4 h:dataTableの属性 214

Section 3 HTML5とFaceletsの連携 215

3.1 HTMLタグをFaceletsタグとして使う 215

3.2 Faceletsタグの中にHTML5の属性を書く 217

Section 4 まとめ 219

要点 219

練習 221

第8章 コンバータとバリデータ

Section 1 標準コンバータ 224

1.1 標準コンバータ 224

1.2 日付時刻のコンバータ(f:convertDateTime) 225

1.3 整数のコンバータ(f:convertNumber) 231

Section 2 標準バリデータ 234

Section 3 エラーメッセージのカスタマイズ 238

3.1 プロパティファイルの作成 238

3.2 プロパティファイルの編集 239

3.3 JSFシステムに登録する 241

Section 4 ビーン・バリデーション 242

4.1 ビーン・バリデーションとは 242

4.2 ビーン・バリデーションで使えるアノテーション 242

4.3 ビーン・バリデーションの適用方法 245

4.4 ゲッターへの指定 247

4.5 メッセージバンドルの利用 248

Section 5 バリデータの作成 250

5.1 インタフェースの作成 250

5.2 検証を行うクラス(バリデータ)の作成 252

Section 6 クラスレベルのバリデーション 255

Section 7 まとめ 260

要点 260

練習 262

第9章 Ajax機能

Section 1 Ajax機能とは 266

1.1 Ajaxが必要なケースの例 267

Section 2 Ajax機能による改良 270

2.1 Ajax機能の使用方法(f:ajaxタグ) 270

2.2 スコープアノテーションを変更する 272

Section 3 Ajaxコマンドボタン 274

Section 4 Ajaxバリデーション 276

4.1 Ajaxバリデーションの例題プログラム 277

4.2 Ajax処理とスコープアノテーション 279

4.3 JSFのライフサイクルとAjax処理 280

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

Section 6 まとめ 283

要点 283

練習 284

第10章 リソースバンドルと国際化

Section 1 リソースバンドル 286

1.1 プロパティファイルの作成と登録 287

1.2 リソースバンドルの適用 290

Section 2 リソースバンドルの国際化 292

2.1 国際化とは 292

2.2 ロケールファイルの作成 293

2.3 ロケールファイルの編集 293

2.4 ロケールの登録 294

Section 3 まとめ 296

要点 296

練習 297

第11章 テンプレート機能

Section 1 テンプレート機能 300

1.1 テンプレート機能とは 300

1.2 テンプレートファイルの作成 301

1.3 テンプレートファイル 305

Section 2 テンプレート用表示データの作成 307

2.1 content-1.xhtmlファイルの作成 307

2.2 content-1.xhtmlの編集 307

Section 3 テンプレートファイルを使用する 309

3.1 index.xhtmlの作成 309

3.2 output.xhtmlの作成 311

3.3 テンプレート関連タグのまとめ 312

Section 4 まとめ 313

要点 313

練習 314

第12章 CDIー新しいオブジェクトの作り方

Section 1 CDIとは 318

1.1 CDIを使ってみる 319

1.2 CDIのスコープアノテーション 322

1.3 FacesContextとServletContext 323

1.4 インジェクションポイント 330

Section 2 Conversation(会話)スコープ 331

2.1 例題の画面推移 331

2.2 会話処理の開始と終了 332

2.3 JSFページの内容 334

Section 3 複数ページをまとめるFlowスコープ 336

3.1 FLOWスコープ用のフォルダの作成 336

3.2 Flow定義ファイルの作成 336

3.3 JSFページの書き方 338

3.4 バッキングビーンの書き方 339

Section 4 インジェクトできるようにする@Produces 341

4.1 @Producesの使い方 341

4.2 Listを返すメソッドに@Producesを付ける 342

4.3 フィールドに@Producersを付ける 343

4.4 インジェクトできるロガーを作る 344

4.5 後始末をするためのディスポーザー 347

Section 5 CDIビーンの実装を使い分ける 351

5.1 設定ファイル(bean.xml)を使う方法 351

5.2 アノテーションを使う方法 352

Section 6 まとめ 356

要点 356

練習 357

第13章 CDIの高度な機能

Section 1 コールバックメソッド 360

1.1 ライフサイクル・コールバックメソッド 360

Section 2 インターセプター(割り込み処理) 363

2.1 カスタムアノテーションの作成 363

2.2 インターセプタを作成する 364

2.3 インターセプタをCDIに登録する 367

2.4 インターセプタを使う 367

Section 3 デコレーター 370

3.1 デコレーターを作成する 370

3.2 beans.xmlに登録する 372

3.3 使用例 373

Section 4 オブザーバー(イベント駆動処理) 375

4.1 同期イベント処理 375

4.2 非同期イベント処理 378

Section 5 まとめ 382

要点 382

練習 383

第14章 Jakarta Enterprise Beans(EJB)

Section 1 Jakarta Enterprise Beansの概要 386

1.1 EJBの種類 386

1.2 DI(依存性注入) 388

1.3 セッションビーンの書き方 388

Section 2 シングルトン・セッションビーン 390

2.1 シングルトンセッションビーンを使う 390

2.2 ウェブアプリケーション(画面1) 391

2.3 ウェブアプリケーション(画面2) 392

2.4 シングルトンセッションビーンで使えるアノテーション 393

Section 3 タイマーサービス 394

3.1 タイマーサービスの起動と終了 394

3.2 タイマーサービスの作り方 395

Section 4 非同期呼び出し 398

Section 5 まとめ 400

要点 400

練習 401

第15章 データベースの基礎

Section 1 データベースとは 404

1.1 リレーショナルデータベース 404

1.2 JPAの役割 405

Section 2 データベースシステムのセットアップ 407

2.1 Dockerのダウンロードとインストール 407

2.2 MySQLデータベースを動かす 409

2.3 Dockerの仕組み 411

2.4 NetBeansからMySQLの起動・停止を行う 413

2.5 NetBeansでデータベースmydbの内容を確認できるようにする 414

2.6 Payara Serverの設定 416

Section 3 データベースの使い方 417

3.1 エンティティの作成 417

3.2 persistence unit (永続性ユニット) 419

3.3 エンティティマネージャーの使い方 421

3.4 入力データをデータベースに保存する 423

3.5 データベースの中身を見る 425

3.6 @Transactionalアノテーション 426

Section 4 CRUD処理 428

4.1 エンティティマネージャーのAPIと使い方 428

4.2 CRUD処理の書き方 430

4.3 バッキングビーンのソースコード 438

Section 5 まとめ 440

要点 440

練習 442

第16章 マッピング・アノテーション

Section 1 マッピング・アノテーションの概要 444

1.1 アノテーションの概要 444

1.2 デフォルトのマッピング 445

Section 2 エンティティの構成を指定する 446

2.1 テーブルの名前や項目の名前を変える 446

2.2 複数のテーブルで構成する 449

2.3 他のクラス全体を1つのフィールドとして組み込む 451

2.4 カラムの名前を変える 452

2.5 カラムをデーベースに保管しないように指示する 452

Section 3 主キーの構成を指定する 453

3.1 主キーを自動生成する 453

3.2 複合キーを使う 454

3.3 複合キーを使う(@IdClass) 458

Section 4 ファイル、列挙、日付と時刻の扱い方 460

4.1 ファイルなどの大きなデータを記録する 460

4.2 列挙の記録方法を指定する 460

4.3 日付と時刻の取り扱い 461

Section 5 マッピングの適用例 462

5.1 エンティティ・クラス 463

5.2 バッキングビーン (全体のソースリストは5.5に掲載) 464

5.3 index.xhtml 466

5.4 画像データの受け渡し 467

5.5 バッキングビーン(全体) 470

Section 6 コレクションとマップを使う 472

6.1 フィールド変数にListやSetを使う 472

6.2 フィールド変数にMapを使う 475

Section 7 まとめ 478

要点 478

練習 480

第17章 オブジェクト関係マッピング(ORM)

Section 1 オブジェクト関係マッピングとは 486

1.1 オブジェクトをフィールドに持つことで関係ができる 486

1.2 ORMの種類 487

Section 2 1方向のOne-to-One 489

2.1 DAOの作成手順 491

2.2 エンティティの新規登録 493

2.3 永続性コンテキストの制約 493

2.4 Customerエンティティの一覧表示 495

2.5 @JoinColumnで外部キーの名前を指定する 495

2.6 カスケードを指定して保存を簡単にする 496

2.7 データベースからの削除(remove) 497

Section 3 双方向のOne-to-One 499

3.1 マッピングの指定方法 499

3.2 エンティティの新規作成 501

3.3 Addressエンティティを読み出してみる 501

Section 4 1方向のMany-to-One 503

4.1 マッピングの指定方法 503

4.2 エンティティの作成とデータベースへの新規登録 504

4.3 社員エンティティを一覧出力する 506

Section 5 1方向のOne-to-Many 507

5.1 マッピングの指定方法 507

5.2 エンティティの作成と登録 509

5.3 講義エンティティの表示 510

Section 6 双方向のOne-to-Many(Many-to-Oneも同じ) 511

6.1 マッピングの指定方法 511

6.2 エンティティの新規登録 512

6.3 エンティティの表示 513

Section 7 1方向のMany-to-Many 514

7.1 マッピングの指定方法 514

7.2 エンティティの作成と登録 516

7.3 エンティティの表示 517

Section 8 双方向のMany-to-Many 518

8.1 マッピングの指定方法 518

8.2 エンティティの作成 519

8.3 エンティティの出力 521

Section 9 まとめ 523

要点 523

練習 525

第18章 問い合わせ言語JPQL

Section 1 JPQL TEST 528

1.1 JPQL TESTについて 528

1.2 JPQL TESTで操作するデータベーステーブル 529

Section 2 JPQLの書き方 532

2.1 SELECT文 532

2.2 集計関数 534

2.3 識別変数とPath式 535

Section 3 where句で使える演算子 536

3.1 いろいろな演算子 536

3.2 演算子の使い方 537

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

Section 5 distinctとコンストラクタ式 542

5.1 重複を取り除くDISTINCTオペレータ 542

5.2 結果からオブジェクトを作るコンストラクタ式 543

Section 6 レコードを結合するJOIN 545

6.1 2つのエンティティの組み合わせ 545

6.2 内部結合(INNER JOIN) --- エンティティ内部のListとの直積 546

6.3 外部結合(LEFT JOIN)--- 相手がnullでも直積を取る 548

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

7.1 一括更新 549

7.2 一括削除 549

Section 8 JPQLをJavaプログラムから実行する 551

8.1 動的クエリ Query型 551

8.2 動的クエリ TypedQuery型 553

8.3 コンストラクタ式による検索結果の抽出 554

8.4 更新と削除 556

8.5 名前付きクエリ 557

8.6 メソッドのまとめ 560

8.7 ORMでマッピングされたエンティティの削除 560

Section 9 N+1問題 564

9.1 デフォルトのフェッチタイプ 564

9.2 N+1問題とは 564

9.3 EAGERフェッチに変えても問題は解決されない 568

9.4 LEFT JOIN FETCH 569

9.5 マルチLEFT JOIN FETCH 570

Section 10まとめ 573

要点 573

練習 574

第19章 セキュリティAPI

Section 1 どのページに制限をかけるか指定する 576

Section 2 利用者を登録する 579

2.1 テーブルの構成とエンティティクラス 579

2.2 データベースへの登録処理 581

Section 3 データベースストアの使用設定 584

3.1 アノテーションで設定する 584

3.2 論理JNDI名を使えるようにする 585

Section 4 認証方式の指定 587

4.1 カスタムFORM認証とは 587

4.2 認証方式としてカスタムフォーム認証を指定する 587

Section 5 認証処理の作成 589

5.1 login.xhtmlの作成 589

5.2 login用バッキングビーンの作成 590

5.3 ログアウト用バッキングビーンの作成 592

5.4 認証されているかチェックする仕組み 593

5.5 例題1を実行する 595

5.6 SecurityContext 596

Section 6 まとめ 597

要点 597

第20章 RESTfulウェブサービス

Section 1 RESTfulウェブサービスの概要 600

1.1 RESTとは 600

1.2 RESTfulウェブサービスの構成方法 600

1.3 クライアントプログラムで実行する 602

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

2.1 サブURI 604

2.2 Pathパラメータ 605

Section 3 Queryパラメータ 607

3.1 Queryパラメータ 607

3.2 Querayパラメータのデフォルト値 608

3.3 複数のQueryパラメータ 609

3.4 通信テストプログラムの利用 610

Section 4 HTTPとメディアタイプ 612

4.1 MIMEタイプ 612

4.2 @ProducesとMIMEタイプの選択メカニズム 612

4.3 @Consumes 616

Section 5 戻り値の作成 620

5.1 戻り値に使うResponseクラス 620

5.2 CRUDのウェブサービス 621

Section 6 クライアントAPI 627

6.1 CRUD処理の概要 627

6.2 クライアントAPIの使い方 628

Section 7 まとめ 634

要点 634

第21章 ウェブアプリケーション

Section 1 プログラミングの準備 638

1.1 継承を利用してバッキングビーンを分ける 638

1.2 データベース処理のクラスを作る 638

1.3 ページングマネージャーを作る 639

Section 2 『雑貨屋さん.com』について 641

2.1 商品データ、顧客データの作成 641

2.2 例題システムの画面構成 642

2.3 各画面の機能概要 643

2.4 テンプレート構成 644

Section 3 エンティティの作成 646

3.1 エンティティの種類 646

3.2 エンティティ設計の注意 648

3.3 エンティティの自動生成 648

Section 4 商品の一覧表示(トップページ) 650

4.1 バッキングビーンでの初期化 650

4.2 コマンドリンクとページナビゲーション 652

4.3 メニューバー 654

4.4 商品一覧表示 657

4.5 その他のページ 662

Section 5 ログイン認証 663

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

Section 7 まとめ 672

要点 672

課題 673

巻末資料

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

Section 2 サーバーのデータベース設定(Windows用) 677

2.1 準備作業 ― Javaのパスを環境変数に登録する 677

2.2 Payara Serverのセットアップ 678

Section 3 サーバーのデータベース設定(一般的な方法) 679

3.1 データベースドライバの登録(JETでは不要) 679

3.2 コネクションプールの作成 679

3.3 データソースの作成 681

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

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

Section 6 その他の資料 686

索引