《OSGi實戰》是2013年1月人民郵電出版社的一本圖書,作者是Richard S. Hall / Karl Pauls / Stuart McCulloch / David Savage。
基本介紹
- 書名:OSGi實戰
- 作者:Richard S. Hall/ Karl Pauls
- 譯者:郭 慶 李 楠 謝瑩瑩 張 磊
- ISBN:9787115300676
- 頁數:484
- 定價:99.00元
- 出版社:人民郵電出版社
- 出版時間:2013-1
- 裝幀:平裝
內容介紹,作者介紹,作品目錄,
內容介紹
《 OSGi實戰》是學習OSGi的全面指導,利用與架構和開發人員相關的示例清楚地講解OSGi概念,同時探討了很多實踐場景和技術,闡述了開發人員有多需要OSGi,怎么將OSGi嵌入其他容器中,將遺留系統移入OSGi的最佳實踐,等等。
《OSGi實戰》面向OSGi規範的使用者,系統、全面、深入地闡述OSGi的重要特性及其使用方法,還介紹了某些技術的低層實現細節,引領讀者暢遊OSGi的世界。
作者介紹
Richard S. Hall是Apache Felix框架開發組重要成員。2000年以後Richard參與了OSGi的開源工作並於2004年加入OSGi聯盟。Richard還是Apache軟體組織成員,在Oracle的GlassFish項目組工作,幫助解決OSGi的相關問題。
Karl Pauls是Apache Felix Framework Security Provider項目的實現者,Apache Felix框架開發組的核心成員。Karl還是Apache軟體組織成員,參與開發過多個Apache項目以及其他的開源項目。Karl是Luminis的一位研究員。
作品目錄
目 錄
第一部分 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
第一部分 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