第1章 EJB 3架構簡介 1
1.1 EJB簡介 1
1.1.1 EJB是什么 2
1.1.2 EJB組件模型 2
1.1.3 EJB框架 2
1.1.4 EJB核心特性 2
1.1.5 EJB規(guī)范的發(fā)展 3
1.1.6 EJB 3簡化開發(fā)模型 4
1.1.7 分布式計算模型 6
1.1.8 EJB角色 6
1.2 本書結構 6
1.3 準備 8
1.3.1 安裝GlassFish應用程序服務器的先決條件 8
1.3.2 安裝GlassFish應用程序服務器 9
1.3.3 環(huán)境變量設置 10
1.3.4 密碼文件的創(chuàng)建 12
1.3.5 啟動和測試GlassFish安裝 12
1.4 小結 15
第2章 EJB 3會話bean 16
2.1 簡介 16
2.2 會話bean簡介 16
2.2.1 會話bean類型 16
2.2.2 何時使用會話bean 16
2.3 無狀態(tài)會話bean 18
2.3.1 bean類 18
2.3.2 業(yè)務接口 19
2.3.3 業(yè)務方法 21
2.3.4 依賴注入 22
2.3.5 回調方法 22
2.3.6 攔截器 23
2.4 有狀態(tài)會話bean 25
2.4.1 bean類 25
2.4.2 業(yè)務接口 26
2.4.3 業(yè)務方法 27
2.4.4 回調方法 28
2.4.5 攔截器 29
2.4.6 異常處理 29
2.5 會話bean的客戶視圖 29
2.6 會話bean的打包、部署和測試 32
2.6.1 先決條件 32
2.6.2 編譯會話bean 32
2.6.3 打包會話bean 33
2.6.4 部署會話bean 34
2.6.5 編譯客戶程序 34
2.6.6 運行客戶程序 35
2.7 小結 36
第3章 實體和JPA 37
3.1 實體示例 38
3.1.1 簡單JavaBean Customer.java 38
3.1.2 簡單實體Customer.java 38
3.1.3 顯示了默認設置的實體Customer.java 39
3.1.4 代碼要求 41
3.1.5 示例:注解實例變量 42
3.1.6 示例:注解屬性訪問方法 43
3.1.7 聲明主鍵 44
3.1.8 簡單主鍵 44
3.1.9 復合主鍵 45
3.1.10 實體示例小結 47
3.2 持久化檔案 47
3.3 EntityManager 48
3.3.1 持久化上下文 48
3.3.2 獲得EntityManager實例 49
3.3.3 事務支持 50
3.4 實體生存周期 50
3.5 O/R映射 52
3.5.1 再談@Table注解 52
3.5.2 再談@Column注解 53
3.5.3 復雜映射 54
3.6 實體關系 54
3.6.1 @OneToOne 54
3.6.2 @OneToMany和@ManyToOne 55
3.6.3 @ManyToMany 55
3.6.4 延遲和預先字段綁定 56
3.6.5 層疊操作 56
3.7 JPQL 57
3.7.1 @NamedQuery和@NamedQueries 57
3.7.2 綁定查詢參數 58
3.7.3 動態(tài)查詢 59
3.7.4 批更新和刪除操作 59
3.7.5 復雜查詢 60
3.8 向前生成與反向工程 60
3.8.1 向前生成產生持久性 60
3.8.2 反向工程產生適應性 60
3.8.3 哪種方式適用于你的工程 60
3.9 示例應用程序CustomerOrderManager 60
3.9.1 Customer.java 60
3.9.2 CustomerOrder.java 62
3.9.3 Address.java 65
3.9.4 CustomerOrderManager.java 67
3.9.5 CustomerOrderClient.java 68
3.9.6 persistence.xml 69
3.10 小結 70
第4章 高級持久化特性 71
4.1 映射實體繼承層次結構 71
4.1.1 準備 72
4.1.2 實體繼承映射策略 72
4.1.3 每個類單一表的繼承層次結構(InheritanceType.SINGLE_TABLE) 74
4.1.4 帶有連接子類表的通用基表(InheritanceType.JOINED) 82
4.1.5 每個最外層一個表的具體實體類(InheritanceType.TABLE_PER_CLASS) 85
4.1.6 O/R實現方式的比較 87
4.2 在繼承層次結構中使用抽象實體、映射的超類和非實體類 88
4.2.1 抽象實體類 88
4.2.2 映射的超類(@MappedSuper-class) 89
4.2.3 非實體類 90
4.2.4 使用嵌入非實體類(@Embeddable和@Embedded) 90
4.3 多態(tài)關系 92
4.4 多態(tài)JPQL查詢 93
4.5 使用原生SQL查詢 93
4.6 復合主鍵和嵌套外鍵 94
4.6.1 使用嵌套復合鍵(@EmbeddedId) 95
4.6.2 在實體類上直接暴露復合鍵類字段(@IdClass) 96
4.6.3 使用復合鍵的映射關系 97
4.7 樂觀鎖定的支持(@Version) 98
4.8 自動生成的主鍵值的支持 99
4.9 攔截器:實體回調方法 100
4.10 小結 101
第5章 EJB 3消息驅動bean 103
5.1 簡介 103
5.2 面向消息的架構 103
5.2.1 JMS是什么 103
5.2.2 消息應用程序架構 104
5.3 使用MDB 105
5.3.1 何時使用MDB 105
5.3.2 MDB類 106
5.3.3 配置屬性 108
5.3.4 MDB中的依賴注入 111
5.3.5 回調方法 112
5.3.6 攔截器 113
5.3.7 異常處理 113
5.3.8 客戶視圖 114
5.4 MDB的打包、部署和測試 117
5.4.1 先決條件 117
5.4.2 編譯會話bean和MDB 117
5.4.3 打包會話bean和MDB 118
5.4.4 創(chuàng)建JMS和JavaMail資源 118
5.4.5 部署會話bean和MDB 120
5.4.6 編譯客戶程序 121
5.4.7 運行客戶程序 121
5.5 小結 122
第6章 EJB 3和Web服務 123
6.1 簡介 123
6.2 Web服務是什么 123
6.2.1 UDDI 123
6.2.2 WSDL 124
6.2.3 SOAP 127
6.2.4 何時使用Web服務 128
6.3 Java EE和Web服務 128
6.3.1 JAX-WS 129
6.3.2 JAXB 129
6.3.3 JAXR 129
6.3.4 SAAJ 129
6.3.5 JSR 181 129
6.4 EJB 3無狀態(tài)會話bean作為Web服務 129
6.5 Web服務的打包、部署和測試 132
6.5.1 先決條件 133
6.5.2 編譯會話bean 133
6.5.3 打包會話bean 133
6.5.4 部署會話bean 134
6.5.5 使用GlassFish控制臺測試信用卡服務 135
6.6 Web服務客戶視圖 137
6.6.1 開發(fā)訪問Web服務的Java客戶程序 137
6.6.2 會話bean作為Web服務客戶程序 140
6.7 小結 141
第7章 集成會話bean、實體、消息驅動bean和Web服務 142
7.1 簡介 142
7.2 應用程序概述 142
7.3 應用程序組件和服務 142
7.3.1 購物車組件 142
7.3.2 搜索外觀組件 143
7.3.3 顧客外觀組件 143
7.3.4 訂單處理外觀組件 143
7.3.5 持久化服務 143
7.3.6 電子郵件服務 143
7.3.7 信用卡服務 143
7.3.8 訂單處理服務 144
7.4 酒類在線應用程序業(yè)務處理 144
7.5 深入講解組件/服務 145
7.5.1 持久化服務 145
7.5.2 顧客外觀組件 145
7.5.3 搜索外觀組件 148
7.5.4 購物車組件 149
7.5.5 訂單處理外觀組件 154
7.5.6 訂單處理服務 161
7.5.7 電子郵件服務 166
7.5.8 信用卡服務 168
7.5.9 數據庫schema 168
7.6 打包、部署和測試應用程序 168
7.6.1 先決條件 169
7.6.2 部署信用卡服務 169
7.6.3 編譯持久化單元 170
7.6.4 打包持久化單元 171
7.6.5 編譯業(yè)務服務(會話bean和MDB) 171
7.6.6 打包業(yè)務服務 172
7.6.7 匯編應用程序 173
7.6.8 創(chuàng)建數據庫schema 173
7.6.9 創(chuàng)建數據源、JMS資源和Mail資源 173
7.6.10 部署應用程序 177
7.7 應用程序的簡單測試客戶程序 177
7.8 小結 180
第8章 EJB 3中的事務支持 181
8.1 事務是什么 181
8.1.1 分布式事務 182
8.1.2 事務的ACID屬性 182
8.1.3 JTA 182
8.1.4 兩階段提交協議 183
8.2 EJB中的事務支持 183
8.3 服務模型中的會話bean事務行為 184
8.3.1 容器管理的事務分界 184
8.3.2 bean管理的事務分界 186
8.4 持久化模型中的實體事務行為 187
8.4.1 實體如何與事務上下文相關聯 187
8.4.2 容器管理與應用程序管理的持久化上下文 187
8.4.3 事務范圍的持久化上下文與擴展的持久化上下文 188
8.4.4 JTA與資源本地的Entity-Manager 188
8.5 酒類在線應用程序的事務場景 188
8.5.1 設置示例 188
8.5.2 使用CMT分界的無狀態(tài)會話bean 189
8.5.3 使用BMT分界的有狀態(tài)會話bean和擴展的持久化上下文 197
8.6 小結 204
第9章 EJB 3性能和測試 205
9.1 測試方法論 206
9.1.1 性能標準 206
9.1.2 模擬應用程序使用 208
9.1.3 定義測試尺度 208
9.2 Grinder 209
9.3 測試應用程序 211
9.4 性能測試 212
9.4.1 測試環(huán)境 214
9.4.2 測試腳本 215
9.4.3 設置 215
9.4.4 初步測試 219
9.4.5 樣本大小 220
9.4.6 校準 221
9.4.7 實際測試運行 221
9.4.8 分析結果 222
9.5 小結 225
第10章 把EJB 2.x應用程序遷移到EJB 3 226
10.1 準備 227
10.2 會話bean遷移 227
10.2.1 EJB 2.1會話bean 227
10.2.2 EJB 2.1的ejb-jar.xml文件 228
10.2.3 EJB 3會話bean類 229
10.2.4 遷移EJB 2.1會話bean類 229
10.2.5 遷移EJB 2.1會話bean接口 230
10.2.6 遷移EJB 2.1會話bean的ejb-jar.xml屬性 231
10.2.7 遷移EJB 2.1的Web服務端點接口 232
10.2.8 會話bean遷移包裝 232
10.3 MDB遷移 232
10.4 實體bean遷移 233
10.5 EJB客戶程序遷移 235
10.6 完整的應用程序遷移示例 235
10.6.1 EJB 2.1應用程序源文件 235
10.6.2 EJB 3應用程序源文件 246
10.7 把我們的應用程序遷移在Java EE容器之外運行 251
10.7.1 EJB 3會話bean類運行在EJB容器之外 251
10.7.2 容器外部持久化單元的EJB 3的persistence.xml文件 253
10.7.3 EJB 3應用程序管理的EntityManager客戶程序 253
10.8 小結 254
第11章 EJB 3部署 255
11.1 部署工具簡介 255
11.2 部署過程概述 256
11.2.1 提供者 256
11.2.2 裝配者 256
11.2.3 部署者 258
11.3 Java EE部署基礎結構 259
11.3.1 Java EE服務器 259
11.3.2 Java EE容器 259
11.4 Java EE部署組件 260
11.4.1 Java EE應用程序 260
11.4.2 Java EE模塊類型 260
11.4.3 庫組件 262
11.5 應用服務器和平臺無關性 264
11.5.1 部署工具 264
11.5.2 部署計劃 265
11.6 部署角色 265
11.6.1 應用程序裝配者 265
11.6.2 應用程序部署者 267
11.7 匯編EJB JAR模塊 268
11.8 匯編持久化單元 268
11.9 小結 269
第12章 EJB 3客戶應用程序 270
12.1 應用程序架構 270
12.2 JSF 274
12.2.1 Java EE Web技術的發(fā)展 274
12.2.2 JSF架構 275
12.2.3 JSF工具和組件 277
12.3 使用JSF和EJB開發(fā)Web應用程序 277
12.3.1 登錄頁面 279
12.3.2 新用戶注冊頁面 282
12.3.3 鏈接頁面 288
12.3.4 搜索頁面 291
12.3.5 酒類清單頁面 297
12.3.6 顯示選定的酒類詳細信息頁面 300
12.3.7 顯示購物車項目頁面 304
12.3.8 通知頁面 307
12.4 打包、部署和測試應用程序 308
12.4.1 先決條件 308
12.4.2 編譯和打包JSF應用程序 308
12.4.3 匯編酒類商店應用程序 309
12.4.4 部署酒類商店應用程序 309
12.4.5 運行酒類商店應用程序 310
12.5 應用程序客戶容器 314
12.6 小結 314
附錄 315