目 錄
第一部分 OSGi:模塊化、生命周期和服務
第1章 揭開OSGi的麵紗 2
1.1 OSGi的定義和目標 3
1.1.1 Java模塊化的不足 3
1.1.2 OSGi能幫助你嗎 6
1.2 OSGi架構概覽 6
1.2.1 OSGi框架 7
1.2.2 將它們結閤起來 10
1.3 Hello, world! 10
1.3.1 模塊層示例 10
1.3.2 生命周期層示例 12
1.3.3 服務層示例 13
1.3.4 場景設置 15
1.4 OSGi的相關技術 16
1.4.1 Java EE 16
1.4.2 Jini 17
1.4.3 NetBeans 17
1.4.4 JMX 17
1.4.5 輕量級容器 18
1.4.6 Java 業務集成 18
1.4.7 JSR 277 19
1.4.8 JSR 294 19
1.4.9 SCA 19
1.4.10 .NET 20
1.5 小結 20
第2章 精通模塊化 21
2.1 什麼是模塊化 21
2.2 為什麼使用模塊化 24
2.3 模塊化繪圖程序 24
2.4 bundle 27
2.4.1 bundle在物理模塊化中扮演的角色 28
2.4.2 bundle在邏輯模塊化中扮演的角色 29
2.5 使用元數據定義bundle 30
2.5.1 可讀信息 31
2.5.2 bundle標識 32
2.5.3 代碼可見性 34
2.5.4 類搜索順序 42
2.6 完成繪圖程序設計 43
2.6.1 提高繪圖程序的模塊化 44
2.6.2 啓動新的繪圖程序 46
2.7 OSGi依賴解析 46
2.7.1 自動解析依賴 47
2.7.2 使用約束保證一緻性 51
2.8 迴顧模塊化繪圖程序的好處 56
2.9 小結 59
第3章 生命周期 60
3.1 生命周期管理 60
3.1.1 什麼是生命周期管理 61
3.1.2 為什麼需要生命周期管理 62
3.2 OSGi bundle的生命周期 63
3.2.1 將生命周期引入繪圖程序 63
3.2.2 OSGi框架在生命周期中的作用 65
3.2.3 bundles激活器的清單文件條目 66
3.2.4 生命周期API 67
3.2.5 生命周期狀態圖 72
3.2.6 bundle緩存和框架重啓 73
3.3 在bundle中使用生命周期API 74
3.3.1 配置bundle 75
3.3.2 部署bundle 76
3.3.3 檢查框架狀態 81
3.3.4 持久化bundle狀態 82
3.3.5 事件監聽 85
3.3.6 bundle自我銷毀 87
3.4 動態擴展繪圖程序 89
3.5 生命周期與模塊化 96
3.5.1 解析bundle 96
3.5.2 刷新bundle 98
3.5.3 當更新操作沒有完成更新 101
3.6 小結 103
第4章 學習服務 104
4.1 什麼是服務、為什麼使用服務、什麼時候用服務 104
4.1.1 什麼是服務 104
4.1.2 為什麼使用服務 106
4.1.3 什麼時候應該使用服務 109
4.1.4 什麼時候不應該使用服務 110
4.1.5 仍然不確定 110
4.2 OSGi服務實戰 111
4.2.1 發布服務 112
4.2.2 查找並綁定服務 114
4.3 處理動態性 117
4.3.1 避免常見的陷阱 118
4.3.2 監聽服務 121
4.3.3 服務跟蹤 126
4.4 在繪圖示例中使用服務 129
4.4.1 定義圖形服務 129
4.4.2 發布圖形服務 129
4.4.3 跟蹤圖形服務 130
4.5 將服務關聯到模塊層和生命周期層 131
4.5.1 為什麼不能看到我的服務 131
4.5.2 能否提供一個bundle特有的服務 132
4.5.3 應該在何時釋放服務 133
4.5.4 何時注銷服務 133
4.5.5 應該將接口分開打包嗎 133
4.6 標準服務 134
4.6.1 核心服務 134
4.6.2 compendium服務 135
4.7 小結 136
第5章 深入分析模塊化特性 138
5.1 管理導齣 138
5.1.1 導入導齣包 139
5.1.2 隱式導齣屬性 142
5.1.3 強製導齣屬性 143
5.1.4 導齣過濾 145
5.1.5 復製導齣 146
5.2 導入解耦 147
5.2.1 可選導入 147
5.2.2 動態導入 148
5.2.3 可選導入與動態導入的比較 149
5.2.4 日誌示例 150
5.3 需要的bundle 153
5.3.1 聲明bundle依賴關係 154
5.3.2 聚閤分割包 155
5.3.3 bundle依賴的相關問題 158
5.4 將bundle劃分為片段 158
5.4.1 片段 159
5.4.2 本地化中使用片段 161
5.5 處理與環境相關的問題 164
5.5.1 依賴執行環境 165
5.5.2 構建本地庫 166
5.6 小結 168
第二部分 OSGi實踐
第6章 走近bundle 170
6.1 將JAR轉換成bundle 170
6.1.1 選取bundle標識 171
6.1.2 導齣包 173
6.1.3 發現需要導入的包 177
6.1.4 嵌入與導入 181
6.1.5 增加對生命周期的支持 181
6.1.6 JAR文件轉換為bundle的簡要說明 183
6.2 分割一個應用到多個bundle 184
6.2.1 創建一個大型bundle 184
6.2.2 將代碼拆分到多個bundle中 193
6.2.3 降低模塊耦閤 197
6.2.4 是否要轉換成bundle 201
6.3 小結 204
第7章 測試應用程序 206
7.1 遷移測試到OSGi 206
7.1.1 容器內測試 207
7.1.2 創建測試bundle 208
7.1.3 覆蓋所有基礎 210
7.2 模擬OSGi 212
7.2.1 測試期望的行為 213
7.2.2 模擬實戰 214
7.2.3 模擬意外情景 215
7.2.4 處理多綫程測試 216
7.2.5 暴露競態條件 218
7.3 OSGi高級測試 219
7.3.1 OSGi測試工具 220
7.3.2 在多個框架中運行測試 221
7.3.3 單元測試 225
7.3.4 集成測試 226
7.3.5 管理測試 228
7.4 小結 230
第8章 調試應用 232
8.1 調試bundle 232
8.1.1 調試實戰 234
8.1.2 使用HotSwap解決問題 239
8.2 解決類加載相關問題 243
8.2.1 ClassNotFoundException與NoClassDefFoundError 244
8.2.2 類型轉換問題 246
8.2.3 使用uses約束 247
8.2.4 同Class.forName()劃清界限 249
8.2.5 綫程上下文類加載器 252
8.3 追蹤內存泄漏 254
8.4 懸掛服務 258
8.4.1 查找懸掛服務 259
8.4.2 防止懸掛服務 259
8.5 小結 261
第9章 管理bundle 262
9.1 包和bundle的版本控製 262
9.1.1 有效的版本控製 263
9.1.2 包的版本控製 264
9.1.3 bundle的版本控製 266
9.2 配置bundle 267
9.2.1 配置管理服務 268
9.2.2 元類型服務 276
9.2.3 首選項服務 279
9.3 延遲啓動bundle 281
9.3.1 激活策略 281
9.3.2 使用激活策略 283
9.4 小結 284
第10章 管理應用 285
10.1 部署bundle 285
10.1.1 管理代理 285
10.1.2 OSGi bundle倉庫 287
10.1.3 部署管理服務 294
10.2 指定bundle激活順序 301
10.2.1 介紹啓動級彆服務 302
10.2.2 使用啓動級彆服務 303
10.3 小結 306
第三部分 高級主題
第11章 組件模型和框架 308
11.1 麵嚮組件 308
11.1.1 什麼是組件 309
11.1.2 為什麼需要組件 310
11.2 OSGi與組件 311
11.2.1 OSGi麵嚮服務的組件模型 311
11.2.2 改進OSGi組件模型 312
11.2.3 使用組件的繪圖示例 316
11.3 聲明式服務 316
11.3.1 構建聲明式服務組件 317
11.3.2 使用聲明式服務提供服務 318
11.3.3 利用聲明式服務使用服務 319
11.3.4 聲明式服務組件生命周期 324
11.4 小結 330
第12章 高級組件框架 331
12.1 Blueprint容器 331
12.1.1 Blueprint架構 332
12.1.2 用Blueprint提供服務 332
12.1.3 通過Blueprint使用服務 335
12.1.4 Blueprint組件生命周期 339
12.1.5 Blueprint高級特性 343
12.2 Apache Felix iPOJO 347
12.2.1 構建iPOJO組件 348
12.2.2 通過iPOJO提供服務 349
12.2.3 通過iPOJO使用服務 350
12.2.4 iPOJO組件生命周期 355
12.2.5 使用iPOJO實例化組件 358
12.3 混閤和匹配 362
12.4 小結 364
第13章 啓動和嵌入OSGi框架 365
13.1 標準啓動和嵌入 365
13.1.1 框架API概覽 366
13.1.2 創建框架實例 367
13.1.3 配置框架 369
13.1.4 啓動框架實例 370
13.1.5 停止框架實例 371
13.2 啓動框架 372
13.2.1 確定安裝哪些bundle 373
13.2.2 乾淨地關閉 373
13.2.3 配置、創建和啓動框架 374
13.2.4 安裝bundle 374
13.2.5 啓動bundle 375
13.2.6 啓動主bundle 375
13.2.7 等待關閉 376
13.3 嵌入框架 377
13.3.1 內部還是外部 378
13.3.2 誰在控製 380
13.3.3 嵌入式框架示例 381
13.4 小結 386
第14章 確保應用程序的安全 388
14.1 使用安全或者不使用安全 388
14.2 安全:努力嘗試使用 390
14.3 OSGi特定的權限 393
14.3.1 PackagePermission 393
14.3.2 BundlePermission 394
14.3.3 AdminPermission 395
14.3.4 ServicePermission 396
14.3.5 相對文件權限 397
14.4 使用條件權限管理服務管理權限 397
14.4.1 條件權限 397
14.4.2 條件權限管理服務 398
14.4.3 bundle 位置條件 400
14.4.4 使用Conditional- Permission Admin 400
14.4.5 實現一個策略文件讀取器 404
14.5 數字簽名的bundle 405
14.5.1 學習術語 406
14.5.2 創建證書和簽名bundle 406
14.5.3 BundleSignerCondition 408
14.6 本地權限 410
14.7 高級權限管理 411
14.7.1 自定義條件概覽 411
14.7.2 基於日期的條件 412
14.7.3 用戶輸入條件 414
14.8 匯總 417
14.9 小結 421
第15章 Web應用和Web服務 422
15.1 創建Web應用 422
15.1.1 使用HTTP服務規範 424
15.1.2 使用Web應用規範 432
15.1.3 標準WAR:Web URL處理程序 436
15.2 提供和使用Web服務 437
15.2.1 提供一個Web服務 438
15.2.2 使用Web服務 441
15.2.3 發布服務 445
15.3 小結 452
附錄A 構建 bundle 453
附錄B OSGi標準服務 466
· · · · · · (
收起)