contents memorandum はてな

目次とメモを置いとく場

『パーフェクトJava EE』(井上誠一郎ほか 技術評論社 2016)

著者:井上 誠一郎[いのうえ・せいいちろう] 
著者:槙 俊明[まき・としあき] 
著者:上妻 宜人[あげつま・のりと] 
著者:菊田 洋一[きくた・よういち] 
イラスト: 駄場 寛[だば・かん](1956-) イラストレーター、CGデザイナー。
装丁:三浦 かなえ[みうら・かなえ] (kanaemiura.com)
本文デザイン・DTP技術評論社制作業務部
編集:原田 崇晴


パーフェクトJava EE:書籍案内|技術評論社


【目次】
ご注意 [002]
はじめに(2016年7月 井上誠一郎) [003]
目次 [004-014]


  Part 1 JavaEE ~ overview 


1章 Java EE概論 016
1-1 Java EEとは 016
  1-1-1 Java EE概論
  1-1-2 Java EEの歴史
  1-1-3 Java EEの規格
  1-1-4 規格と実装
1-2 Webアプリのアーキテクチャ 019
  1-2-1 Webアプリの構造
  1-2-2 Java EEの役割
  1-2-3 コンテナアーキテクチャ
    JNDI[Java Naming and Directory Interface]とDI[Dependency Injection
    コンテキストとスコープ
  1-2-4 レイヤアーキテクチャ
  1-2-5 MVCアーキテクチャ
  1-2-6 並行処理アーキテクチャ
1-3 Java EEアプリ開発の準備 023
  1-3-1 GlassFish4の準備
  1-3-2 Java EEアプリ開発の構成管理
  [COLUMN]構成管理とは 024
  1-3-3 自作Webアプリを動かす工程
    mvnコマンドで開発ソースツリーの雛形を作成
    ソースコードを記述
    mvnコマンドでビルド
    デプロイと動作確認
    動作確認


  Part 2 DI


2章 コンテナアーキテクチャとDI 030
2-1 DI[Dependency Injection]とは何か 030
  2-1-1 DIのメリット①(テスタビリティの向上)
  2-1-2 DIのメリット②(コンテナ管理インスタンスへのアクセス性向上)
  2-1-3 DIの使いどころ
2-2 DIコンテナ 034
2-3 Java EEにおけるコンポーネントモデルとDI 035
  2-3-1 Java EEのDI対応


3章 CDI(基礎編) 037
3-1 CDI[Context and Dependency Injection]とは 037
3-2 はじめてのCDI 037
  3-2-1 CDIによる解決
3-3 CDIのDI機能 043
  3-3-1 CDIの管理対象クラス
    CDI管理Bean
    CDIでインジェクト可能なコンテナ管理リソース
  3-3-2 CDIのインジェクトポイント
  [COLUMN]どのインジェクトポイントを利用すべきか 047
  3-3-3 タイプセーフな依存性解決
  3-3-4 限定子による依存性解決
    複数限定子の組み合わせ
    限定子とアノテーション要素
    @Nonbinding 
    組み込み限定子
  3-3-5 プロデューサメソッド
    プロデューサメソッドの実装例
    ディスポーザメソッド
    プロデューサによるJava EEリソースの注入
    InjectionPointインスタンスのインジェクト

3-4 スコープ 063
  3-4-1 スコープの仕組み
  3-4-2 ノーマルスコープと疑似スコープ
  3-4-3 CDIに含まれるスコープ
    @ConversationScoped
    @Dependent
    @Singleton

3-5 ライフサイクルコールバックメソッド 074

3-6 @Named ―― EL式からのBean参照 075

3-7 ステレオタイプ 076
  3-7-1 ステレオタイプのグループ化対象
  3-7-2 @Model ――組み込みステレオタイプ

3-8 インターセプタ 079
  3-8-1 インターセプタの実装例
  3-8-2 インターセプタの適用対象
  3-8-3 インターセプタの順序制御
    @Priorityインターセプタの順序制御
    beans.xmlによるインターセプタの順序制御
  3-8-4 ステレオタイプによるインターセプタのグループ化
  3-8-5 インターセプタ利用の注意点

3-9 CDIパッケージング 088
  3-9-1 Java EE 6以前のCDI有効化方法
  3-9-2 Java EE 7以降のCDI有効化方法
    Beanディスカバリモードの設定
    CDI管理対象からの除外
    @Vetoedによるフィルタリング
    beans.xmlによるフィルタリング

3-10 CDI(基礎編)のまとめ 093


4章 CDI(応用編) 094
4-1 CDIによるクラス間依存性解決の応用 094
  4-1-1 応用的なBean型
  4-1-2 Bean型とジェネリクス
  4-1-3 Alternative
    @Priorityによる代替Beanの有効化
    ステレオタイプによる代替Beanの有効化

4-2 応用的なインターセプタ 103
  4-2-1 コンストラクタへのインターセプタ適用
  4-2-2 @Interceptors
  4-2-3 デコレータ

4-3 CDIイベント 111
  4-3-1 イベントオブジェクト
  4-3-2 @Observesによるオブザーバ実装
  4-3-3 Eventによるイベント通知
  4-3-4 限定子によるイベントの選択
  4-3-5 オブザーバメソッドの応用
    パラメータ付きイベント限定子
    EventMetadata
    オブザーバメソッドの例外ハンドリング
    条件付きオブザーバメソッド
    トランザクションオブザーバ

4-4 CDI(応用編)のまとめ 124


  Part 3 Web層 


5章 サーブレット 126
5-1 簡単なサーブレットアプリ 126
  5-1-1 サーブレットアプリのコードの読解
    リクエストURLの構造
  5-1-2 サーブレットAPIの概要

5-2 サーブレットクラス 128
  5-2-1 doメソッドのオーバーライド
  5-2-2 サーブレットクラスのインスタンスと同期処理
  5-2-3 initメソッドのオーバーライド
  5-2-4 URLマッピング
    @WebServletアノテーションを使うURLマッピング
    web.xml を使うURLマッピング
    ServletContextオブジェクトを使うURLマッピング
  5-2-5 URLパターンの文法
  5-2-6 ファイルシステム(リソースパスーへのマッピング
  5-2-7 WEB-INFとMETA-INFディレクト

5-3 リクエスト処理 134
  5-3-1 リクエストURL
  5-3-2 リクエストヘッダ
  5-3-3 クエリパラメータ
    クエリパラメータ用メソッド
  [COLUMN]GETとPOSTのメソッドの使い分けの指針
  5-3-4 リクエストボディ
    フォームのポストデータ
    ファイルアップロード
    HTTPボディ部のI/Oストリーム処理

5-4 レスポンス処理 139
  5-4-1 レスポンスステータス
    特別なステータスコード
  5-4-2 レスポンスヘッダ
  5-4-3 レスポンスボディ
  5-4-4 フォワード処理
    フォワード処理の方法
    他アプリへのフォワード処理
  5-4-5 インクルード処理
  5-4-6 リダイレクト処理
  5-4-7 リダイレクト処理とフォワード処理の使い分け
    リダイレクト処理を使うべき時

5-5 状態管理 145
  5-5-1 属性用コンテナ
  5-5-2 属性とスコープ

5-6 セッション管理 147
  5-6-1 セッション管理が必要な理由
  5-6-2 セッション管理の仕組み
  5-6-3 クッキーによるセッション管理の仕組み
    クッキー値のセット方法
  5-6-4 セッションオブジェクト
    セッションオブジェクト取得API
  [COLUMN]セッション用途以外でクッキーを直接扱う方法
  5-6-5 jsessionidクエリパラメータによるセッション管理
  5-6-6 セッションタイムアウト
  5-6-7 セッション管理のその他の話題
    セッションと状態管理
    複数台構成のWebアプリ
    ステートレスなWebアプリ
    ユーザ認証
  5-6-8 セキュリティAPI
  5-6-9 ユーザ認証方法の設定

5-7 フィルタとリスナ 157
  5-7-1 フィルタとは
  5-7-2 フィルタの割り込み先の指定方法
    @WebFilterアノテーションを使うフィルタ処理
    web.xmlを使うフィルタ処理
    ServletContextを使うフィルタ処理
  5-7-3 フィルタの並行処理
  5-7-4 リスナとは
    リスナの登録方法
    リスナの平行処理
    HttpSessionBindingListenerインターフェース

5-8 非同期処理 164
  5-8-1 同期処理と非同期処理
  5-8-2 非同期サーブレット
  5-8-3 フォワード処理の非同期処理
    非同期処理とフィルタ
  5-8-4 非同期処理のリスナ
  5-8-5 ノンブロッキングI/O処理

5-9 モジュール化 170
  5-9-1 ライブラリjar
  5-9-2 jarファイル側の初期化処理
    ServerContainerInitializerインターフェース
  5-9-3 jarファイルのリソースファイル
  5-9-4 jarファイルのweb-fragment.xmlファイル


6章 JAX-RS 174
6-1 JAX-RSとREST 174
  [COLUMN]サーブレットのURLマッピングの無効化
  6-1-1 自作JAX-RSアプリを GlassFishで動かす工程
  6-1-2 JAX-RSアプリのコードの読解
  [COLUMN]JAX-RSのクライアント API
6-2 リソースクラス 178
  6-2-1 リソースクラス
  6-2-2 URLマッピング
  6-2-3 Application サブクラスと@ApplicationPathアノテーション
  6-2-4 複数のApplicationサブクラス
  6-2-5 web.xmlによるベースパス設定
  6-2-6 @Pathアノテーション
    URLテンプレート
  6-2-7 リソースメソッド
    リソースメソッドの引数
    リソースメソッドの返り値
  6-2-8 リソースクラスと同期処理
    リソースクラスのシングルトンオブジェクト化
  6-2-9 リソースクラスのコンストラク
  6-2-10 フィールドおよびJava Beansプロパティ
  6-2-11 サブリソースロケータによる処理の委譲
  6-2-12 リソースクラスからサーブレット APIの利用
  6-2-13 @Contextアノテーション
  6-2-14 リソースクラスの例外とException Mapper

6-3 リクエスト処理 188
  6-3-1 JAX-RSのリクエスト処理
    @DefaultValueおよび@Excodedアノテーション
    ParamConverter
    UriInfoとHttpHeaders
  6-3-2 フォーム処理
  6-3-3 フォームビーン
  6-3-4 @BeanParam
  6-3-5 JSON形式でポストされたリクエストの受信処理
  6-3-6 @Consumesアノテーション
  6-3-7 MessageBodyReader
  6-3-8 リクエストフィルタ
    フィルタのバインディング
    プログラマブルバインディングする
    フィルタの優先順
  6-3-9 インタセプタ

6-4 レスポンス処理 206
  6-4-1 レスポンス処理の基本
  6-4-2 @Producesアノテーション
  6-4-3 JSON形式のレスポンス
  6-4-4 XML形式のレスポンス
  6-4-5 Responseオブジェクト
    キャッシュ制御
  6-4-6 MessageBodyWriter
  6-4-7 リダイレクト処理
    UriInfoインターフェースとUriBuilderクラス
    UriBuilderのURLテンプレート機能
  6-4-8 レスポンスフィルタ
  6-4-9 インタセプタ

6-5 非同期処理 217
  6-5-1 JAX-RSの非同期処理の準備(Concurrency Utilities for Java EE
  6-5-2 JAX-RSの非同期処理
    タイムアウト処理


7章 ELとJSTL 222
7-1 EL 222
  7-1-1 ELの概要

7-2 ELの文法 223
  7-2-1 リテラル
    文字列リテラル
    数値リテラル
    真偽値リテラル
    null(リテラル
  7-2-2 エスケープ
  7-2-3 演算子
    算術演算子
    浮動小数点数での注意点
    文字列結合演算子
    比較演算子
    数値の比較
    文字列の比較
    empty演算
    論理演算子と3項演算子
  7-2-4 プロパティと配列
    プロパティ
    ドット演算子の連結
    配列
    ブラケット演算子
  7-2-5 例外
  7-2-6 スコープ
  7-2-7 暗黙オブジェクト
    pageScope、requestScope、sessionScope、applicationScope
    param、paramValue
  7-2-8 コレクション処理
  7-2-9 ラムダ式とストリーム処理
  7-2-10 関数
  7-2-11 暗黙の型変換
    オートボクシング
    文字列
    数値
    真偽値

7-3 JSTL 239
  7-3-1 JSTLJSP Standard Tag Library]とは
  7-3-2 コアタグライブラリ
    < c: out >
    < c: set >
    < c: remove >
    < c: if >
    < c: choose >
    < c: foreach >
    Mapのイテレーション
    範囲指定
    繰り返し中のステータス
    <c: forTokens >
    <c: catch >
  7-3-3 書式タグライブラリ
  7-3-4 関数タグライブラリ


8章 WebSocket 248
8-1 WebSocketとは 248
  8-1-1 WebSocketとURL
  [COLUMN]HTTPでのサーバプッシュ通信
  8-1-2 WebSocketとHTTP

8-2 簡単なWebSocketアプリ 250
  8-2-1 JavaScriptコード
  8-2-2 WebSocketコードの読解
    サーバサイド
    クライアントサイド

8-3 WebSocket API 255
  8-3-1 アノテーションAPIの使い方
    イベントハンドラメソッドの型
  8-3-2 プログラマブルAPIの使い方
  8-3-3 EndPointクラスのオブジェクト生成
  8-3-4 URLマッピング
    URLテンプレート
    URLテンプレートのマッチ部分文字列の取得
  8-3-5 Sessionオブジェクト
    Sessionオブジェクトの利用方法
    クローズ処理
    WebSocketContainerオブジェクト
    Sessionオブジェクトと複数スレッド

8-4 受信処理と送信処理 265
  8-4-1 受信処理
  8-4-2 分割受信
  8-4-3 カスタムペイロード
    デコーダクラス
  [COLUMN]WebSocket上のメッセージングプロトコル 267
  8-4-4 送信処理
  8-4-5 同期送信処理
  8-4-6 非同期送信処理
  8-4-7 カスタムペイロード
    エンコーダクラス
  8-4-8 ブロードキャスト送信
  8-4-9 状態管理
  8-4-10 サーブレットアプリと共存
    ログインユーザ情報の共有


9章 JSF(基礎編) 280
9-1 JSFJavaServer Faces]とは 280
  9-1-1 JSFアプリケーションの作成
9-2 Facelets 287
  9-2-1 HTMLタグライブラリ
    基本コンポーネント
    テーブルコンポーネント
    ファイルアップロード
    レイアウト
  9-2-2 UIComponentクラス
  9-2-3 コンポーネントの属性
    id属性
      ① Facelets内でコンポーネントを指定する
      ② Javaのコードでコンポーネントを扱う
      ③ Faceletsから出力されるHTMLをJavaScriptで扱う
    binding属性
    rendered属性
  9-2-4 HTML5への対応
      ① Pass-through Attributesのコアライブラリを利用する
      ② <f:passThroughAttribute >タグを利用する
      ③ <f:passThroughAttributes >タグを利用する
  9-2-5 リソース
    CSS,JavaScipt,画像ファイルの利用方法
    リソースのバージョン管理
    Resource Library Contract

9-3 管理Bean 308
  9-3-1 @RequestScoped
  9-3-2 @ViewScoped、@SessionScoped、 @ApplicationScoped
  9-3-3 @FlowScoped

9-4 EL式 315
9-5 ライフサイクル 316
  9-5-1 Restore View
  9-5-2 Apply Request Values
  9-5-3 Process Validations
  9-5-4 Update Model Values
  9-5-5 Invoke Application
  9-5-6 Render Response
9-6 ナビゲーション 320
  9-6-1 POSTによるナビゲーション
  9-6-2 GETによるナビゲーション
9-7 パラメータの渡し方 321
  9-7-1 クエリ文字列の利用
  9-7-2 Flashオブジェクトの利用
  9-7-3 @SessionScopedな管理Beanの利用


10章 JSF(実践編) 324
10-1 Ajax(Asynchronous JavaScript + XML) 324
10-2 コンバータ 328
  10-2-1 標準コンバータ
  10-2-2 カスタムコンバータ

10-3 バリデータ 331
  10-3-1 標準バリデータ
  10-3-2 カスタムバリデータ
10-4 テンプレート 334
10-5 複合コンポーネント 336
10-6 カスタムコンポーネント 341
10-7 リッチコンポーネントライブラリ 342
10-8 例外ハンドリング 348
  10-8-1 エラーページ
  10-8-2 ExceptionHandler
10-9 その他 351
  10-9-1 セキュリティ
    HTMLエスケープ
    CSRFCross-Site Request Forgeries
    セッションIDの変更
    SQLインジェクト
  10-9-2 パフォーマンス
    Project Stage
    Skip Comments
    Reflesh Period
    Stateless View
    その他


11章 Bean Validation 355
11-1 Bean Validationとは 355
  11-1-1 Bean Validationの利用方法
11-2 Bean Validationの定義 358
  11-2-1 Built-in constraints
    @Null/@NotNull
    @AssertFalse/@AssertTrue
    @Size
    @Min/@Max
    @DecimalMin/@DecimalMax
    @Digits
    @Past/@Future
    @Pattern
  11-2-2 Bean Validationのアノテーション定義
  11-2-3 Bean Validationの宣言方法
    フィールド
    プロパティ
    クラス
    コンストラクタ/メソッド
  [COLUMN]validatedByの指定が空となっている理由 363
  11-2-4 Bean Validationのメッセージ
11-3 Bean Validationの機能 367
  11-3-1 Custom Constraints
  11-3-2 Object graph validation
  11-3-3 Constraint Composition
  11-3-4 Grouping constraints
  11-3-5 GroupSequence
  11-3-6 Multi-valued constraint
  11-3-7 Cross-Parameter Constraints
11-4 Java EEとBean Validation 377


12章 MVC 380
12-1 MVC1.0登場の背景 380
12-2 MVC1.0(JSR-371)の基本 381
12-3 Controller 382
12-4 Model 384
12-5 View 386
12-6 リダイレクト 388
12-7 入力チェック 390
12-8 例外ハンドリング 394
12-9 セキュリティ対策 395
  12-9-1 CSRF(Cross-site Request Forgery)
  12-9-2 XSS(Cross-site Scripting)
12-10 参照実装Ozark
[COLUMN]My本当にJava EEで良いですか?


  Part 4 データアクセス層


13章 JPA(基礎編) 400
13-1 JPAの基礎 400
  13-1-1 JPAJava Persistence API]とは
  13-1-2 JPAの構成要素
    エンティティ
    EntityManager
    永続性コンテキスト
    EntityManagerFactory
    永続性ユニット

13-2 はじめてのJPA 405
  13-2-1 プロジェクトの作成
  13-2-2 データベースの作成
  13-2-3 エンティティの作成
  13-2-4 persistence.xml IEE 
  13-2-5 EntityManagerを使用したJPAプログラミング
  13-2-6 Web向けエンドポイントの作成
  13-2-7 アプリケーションのデプロイと実行

13-3 エンティティ 419
  13-3-1 Entityの定義
  13-3-2 永続化属性の定義
  13-3-3 主キーの設定
    RDBMS[Relational Database Management System]固有の自動生成機能を使用する方法
    シーケンスを使用する方法
    テーブルを使用する方法
    どの方法を使用するかを永続プロバイダに任せる方法
  13-3-4 複合キーの使用
  13-3-5 埋め込みクラスの利用
  13-3-6 日時を扱う属性の定義
  13-3-7 精度を持つ数値属性の定義
  13-3-8 ラージオブジェクトの利用
  13-3-9 列挙型の利用
  13-3-10 永続化対象外のフィールド
  13-3-11 インデックスの定義

13-4 EntityManagerの利用 435
  13-4-1 EntityManagerの生成
  13-4-2 エンティティの状態とライフサイクル
  13-4-3 新規状態のエンティティ
  13-4-4 管理状態のエンティティ
    主キー検索/クエリ検索による管理状態
  13-4-5 分離状態のエンティティ
  13-4-6 削除済みのエンティティl

13-5 永続性ユニットの設定 445

13-6 コールバック 448
  13-6-1 コールバック用アノテーション
  13-6-2 エンティティリスナー


14章 JPA(発展編) 453
14-1 関連 453
  14-1-1 1方向の1対1
  14-1-2 双方向の1対1
  14-1-3 1方向の多対1
  14-1-4 1方向の1対多
  14-1-5 双方向の1対多/多対1
  14-1-6 1方向の多対多
  14-1-7 双方向の多対多
  14-1-8 関連のソート
  14-1-9 関連エンティティのフェッチ
  14-1-10 関連エンティティへのイベントの伝播
  [COLUMN]Cascade Type.PERSISTEの注意点
  14-1-11 関連エンティティと主キーを共有

14-2 JPQL[Java Persistence Query Language] 473
  14-2-1 SELECT文
    SELECT句
    FROM句
      内部結合
      外部結合
      フェッチ結合
    WHERE句
      バインドパラメータ
      演算子
      リテラル
      BETWEEN述語
      IN述語
      LIKE述語
      サブクエリ
      EXISTS述語
      ALL/ANY述語
    ORDER BY句
    GROUP BY句/HAVING句
    集約関数
    組み込み関数
    CASE式
  [COLUMN] ネストしたJOIN FETCH 482
  14-2-2 UPDATE文/DELETE文
    Named Query 

14-3 Criteria Query 492
    Metamodel APIを用いたタイプセーフなクエリ
    Criteria QueryのJOIN
    Criteria QueryのAND/OR条件
    Criteria Queryで動的なクエリ作成
    Criteria APIによるUPDATE/DELETE
14-4 Native Query 500

14-5 ストアドプロシージャ 501

14-6 JPAでサポートされていないフィールド型のマッピング 504

14-7 エンティティグラフ 506
  14-7-1 アノテーションによる静的なエンティティグラフの定義
  14-7-2 エンティティグラフの使用方法
  14-7-3 Entity Graph APIによる動的なエンティティグラフの定義

14-8 DDLスキーマ生成 513

14-9 同時実行制御 516
  14-9-1 エンティティのバージョンニングによる楽観的ロック
  14-9-2 ロックモード指定による明示的なロック
    ロックモード指定による楽観的ロック
    ロックモード指定による悲観的ロック
14-10 キャッシュ 522


15章 トランザクション管理 525
15-1 トランザクションとは 525

15-2 JDBCによるトランザクション管理 526
  15-2-1 JDBCによるトランザクション管理の課題
    JDBCの課題① 複数クラスをまたがるトランザクション管理コードが煩雑
    JDBCの課題② 複数データベースにまたがるトランザクションが実行できない
15-3 JTAJava Transaction API]の概要 531
    APIアノテーションによる、トランザクション境界を定義する機能
    X/Open XA仕様の実装による、グローバルトランザクション機能
    外部のトランザクションマネージャとの連携機能

15-4 JTAによるトランザクション境界の定義 533
  15-4-1 @Transactionalによる宣言的トランザクション
    JTAJDBCの連携
    JTAJPAの連携
    @Transactionalのロールバックポリシー
    トランザクション属性
      TxType.REQUIRED(デフォルト)
      TxType.REQUIRES_NEW
      TxType.MANDATORY
      TxType.SUPPORTS
      TxType.NOT_SUPPORTED
      TxType.NEVER
    @Transactionalの仕組み
    @Transactionalの注意点
  15-4-2 UserTransactionによるトランザクション管理

15-5 トランザクションタイムアウト 543

15-6 JTAによるグローバルトランザクション 545
  15-6-1 グローバルトランザクションとXAResourceインターフェース
  15-6-2 XAリカバリ
    トランザクションログが失われた場合
    リソースマネージャによりヒューリスティックな決定がなされた場合
  15-6-3 グローバルトランザクションの注意点
    性能の劣化
    一貫性を完全に保証するものではない
    DBサーバ固有の考慮が必要


16章 EJB Lite 550
16-1 EJBEnterprise JavaBeans]とは 550
  16-1-1 EJB Liteとは
16-2 セッションBean 552
  16-2-1 ステートレスセッションBean
  16-2-2 ステートフルセッションBean
    ステートフルセッションBeanのライフサイクル
    パッシブ化
    ステートフルセッションBeanの平行アクセス
    ステートフルセッションBeanの用途
  16-2-3 シングルトンセッションBean
    シングルトンセッションBeanの平行アクセス制御
    @Startupによるアプリケーション起動時初期化

16-3 クライアントビューとビジネスインターフェース 562

16-4 セッションBeanの例外ハンドリング 564
  16-4-1 アプリケーション例外
  16-4-2 システム例外

16-5 セッションBeanのコンテナ管理トランザクション機能 566

16-6 グローバルJNDI名 568
    例① sample.warにセッションBeanの実装クラスjp.co.gihyo.perfect.javaee.SampleBeanが含まれている場合
    例② 例①の条件に加えて、SampleBeanクラスがインターフェースjp.co.gihyo.perfect.javaee.Sampleを実装している場合
    例③ 例①の条件に加えて、sample.warがapp.earに含められている場合

16-7 セッションBeanへのインターセプタ適用 570

16-8 EJBタイマーサービス 570
  16-8-1 @Scheduleによる定時起動タイマ
  16-8-2 TimerServiceによるAPIを用いたタイマ定義
  16-8-3 タイマーの永続化
16-9 @Aynchronousによる非同期メソッドの実行 577
  16-9-1 非同期メソッドのキャンセル
  16-9-2 非同期メソッドのトランザクションコンテキスト
  [COLUMN]CDI & EJBの使い分け 580


付録 JSP 581
A-1 JSPとは 581
  JSPの文法
    ディレクティブ
    スクリプト
    アクション
    JSPの暗黙オブジェクト
  本書のJSPの前提


索引 [584-589]
著者略歴 [590-591]





【関連記事】
・本書の前提にある、Java SE[Standard Edition]編。
『パーフェクトJava[改訂2版]』(井上誠一郎, 永井雅人 技術評論社 2014//2009) - contents memorandum はてな