《深入理解OSGi:Equinox原理、套用與最佳實踐》是周志明創作的軟硬體開發類書籍。
基本介紹
- 中文名:深入理解OSGi:Equinox原理、套用與最佳實踐
- 作者:周志明 / 謝小明
- 類別:軟硬體開發
- 出版社:機械工業出版社
- 出版時間:2013年2月25日
- 定價:79 元
- ISBN:9787111408871
- 著作權方:北京華章圖文信息有限公司
圖書簡介,編輯推薦,作者簡介,目錄,
圖書簡介
自從1999年OSGi聯盟成立以來,OSGi技術隨著Java一起飛速發展,它已經成為一種被廣泛認可的軟體架構技術和方法,許多世界著名的IT企業都加入到OSGi的陣營之中,OSGi技術的市場前景非常廣闊。所以OSGi技術成為了一門必須要掌握的技術。《深入理解OSGi:Equinox原理、套用與最佳實踐》一共分為四個部分:第一部分走近OSGi,這部分為後文的研究和講解建立一個基礎,讓讀者了解OSGi的來龍去脈以及它出現的意義,回答了“什麼是OSGi”和“為什麼要使用OSGi”兩個問題;第二部分OSGi規範與原理,介紹了OSGi核心規範中的內容和最新的OSGiR5,0規範文檔;第三部分基於Equinox的OSGi套用與實踐,詳細介紹了OSGi的服務綱要規範(OSGiServiceCompendium)和OSGi企業級規範(OSGiServiceEnterpress)中最常用的幾個子規範內容,在這一部分里,將會把OSGi技術從理論落地到實踐之中,結合目前使用範圍最廣的OSGi實現Equinox和一個穿插整個部分的完整案例來講解OSGi技術的使用;第四部分最佳實踐,針對開發實踐中遇到的具體問題進行分析講解,介紹OSGi的各種最佳實踐。
編輯推薦
基於最新OSGiR5,0規範撰寫,繼《深入理解Java虛擬機》後的又一實力之作,全面解讀OSGi規範,深刻揭示OSGi原理,詳細講解OSGi服務,系統地介紹Equinox框架的用法,並通過原始碼分析其工作機制,包含大量可操作性極強的解決方案和最佳實踐。
作者簡介
周志明,資深Java技術專家,對JavaEE企業級套用開發、OSGi、Java虛擬機和工作流等都有深入的研究,並在大量的實踐中積累了豐富的經驗。尤其精通Java虛擬機,撰寫了大量與JVM相關的經典文章,被各大技術社區爭相轉載,是ITeye等技術社區公認的Java虛擬機方面的領袖人物之一,著有經典著作《深入理解Java虛擬機:JVM高級特性與最佳實踐》(2年內重印十數次,獲得業界多個圖書獎項),廣獲讀者好評。現任遠光軟體股份有限公司平台開發部經理兼平台架構師,先後參與過國家電網、南方電網等多個國家級大型ERP項目的平台架構工作,對軟體系統架構也有深刻的認識和體會。謝小明,資深Java技術專家,具有豐富的JavaEE企業級套用開發開發經驗,對OSGi、Spring、Hibernate等技術和框架有比較深入的研究和認識。喜歡鑽研運行與JVM之上的其他語言,如Scala和Clojure等。現任遠光軟體股份有限公司平台開發部平台架構師,先後參加與過國家電網、南方電網等多個國家級大型ERP項目的平台架構工作。
目錄
前言
第一部分 走近OSGi
第1章 Java模組化之路 / 2
1.1 什麼是OSGi / 2
1.1.1 OSGi規範的演進 / 4
1.1.2 Java模組化規範之爭 / 7
1.2 為什麼使用OSGi / 11
1.2.1 OSGi能讓軟體開發變得更容易嗎 / 12
1.2.2 OSGi能讓系統變得更穩定嗎 / 13
1.2.3 OSGi能讓系統運行得更快嗎 / 14
1.2.4 OSGi能支撐企業級開發嗎 / 15
1.3 本章小結 / 16
第二部分 OSGi規範與原理
第2章 模組層規範與原理 / 18
2.1 OSGi規範概要 / 18
2.2 Bundle / 20
2.3 描述元數據 / 21
2.3.1 預定義標記 / 21
2.3.2 使用可視化工具 / 27
2.4 Bundle的組織與依賴 / 31
2.4.1 導出和導入Package / 31
2.4.2 約束規則與示例 / 38
2.4.3 校驗Bundle有效性 / 44
2.5 OSGi的類載入架構 / 45
2.5.1 父類載入器 / 46
2.5.2 Bundle類載入器 / 47
2.5.3 其他類載入器 / 49
2.5.4 類載入順序 / 50
2.6 定義執行環境 / 51
2.7 本地化 / 54
2.8 本章小結 / 55
第3章 生命周期層規範與原理 / 56
3.1 Bundle標識 / 56
3.2 Bundle狀態及轉換 / 57
3.2.1 安裝過程 / 59
3.2.2 解析過程 / 61
3.2.3 啟動過程 / 62
3.2.4 更新過程 / 63
3.2.5 停止過程 / 64
3.2.6 卸載過程 / 65
3.3 啟動級別 / 65
3.3.1 設定啟動級別 / 66
3.3.2 調整活動啟動級別 / 67
3.4 事件監聽 / 68
3.4.1 事件類型 / 69
3.4.2 事件分派 / 70
3.5 系統Bundle / 71
3.6 Bundle上下文 / 72
3.7 本章小結 / 73
第4章 服務層規範與原理 / 74
4.1 服務 / 74
4.2 OSGi服務示例 / 75
4.3 服務屬性 / 80
4.3.1 屬性過濾器 / 82
4.3.2 預定義屬性 / 83
4.3.3 修改屬性 / 84
4.4 服務工廠 / 85
4.5 服務跟蹤器 / 86
4.6 引用服務 / 89
4.7 釋放和註銷服務 / 91
4.8 服務層事件 / 91
4.8.1 事件類型 / 92
4.8.2 事件分派 / 92
4.8.3 ServiceRegistration對象的提前請求 / 93
4.9 遠程服務 / 94
4.9.1 準備遠程服務環境 / 94
4.9.2 遠程服務示例 / 96
4.9.3 遠程服務屬性 / 99
4.9.4 實現分析 / 100
4.10 服務鉤子 / 101
4.10.1 EventListenerHook / 101
4.10.2 FindHook / 101
4.10.3 ListenerHook / 102
4.10.4 服務鉤子示例 / 102
4.11 本章小結 / 105
第三部分 基於Equinox的OSGi套用與實踐
第5章 Equinox啟航 / 108
5.1 建立Equinox開發環境 / 109
5.1.1 建立運行環境 / 109
5.1.2 建立編譯及調試環境 / 110
5.1.3 建立開發環境 / 112
5.2 Equinox常用組件簡介 / 117
5.3 Equinox啟動器 / 119
5.4 使用代碼啟動Equinox / 124
5.5 本章小結 / 125
第6章 Equinox基礎套用與源碼解析 / 126
6.1 實踐項目—Neonat論壇 / 126
6.1.1 背景與需求 / 126
6.1.2 模組劃分 / 127
6.1.3 基礎資料模組 / 129
6.1.4 持久化模組 / 133
6.1.5 用戶互動模組 / 135
6.1.6 運行效果 / 140
6.2 Equinox源碼解析 / 142
6.2.1 OSGi容器啟動 / 142
6.2.2 Bundle狀態恢復 / 147
6.2.3 解析Bundle依賴關係 / 153
6.2.4 OSGi類載入器實現 / 157
6.3 本章小結 / 162
第7章 伺服器端OSGi / 163
7.1 OSGi與Web伺服器 / 163
7.2 HTTP Service規範簡介 / 166
7.2.1 服務目標 / 166
7.2.2 服務接口 / 168
7.2.3 資源映射規則 / 169
7.2.4 請求處理過程 / 171
7.3 實踐項目—Neonat論壇的Web模組 / 171
7.3.1 準備依賴項 / 172
7.3.2 使用HTTP Service / 174
7.3.3 實現Web互動功能 / 176
7.3.4 運行效果 / 178
7.4 HTTP Service源碼解析 / 180
7.4.1 BridgeServlet與OSGi容器啟動 / 180
7.4.2 BridgeServlet與HTTP請求委派 / 186
7.4.3 DelegateServlet實現原理 / 188
7.5 本章小結 / 192
第8章 用戶管理服務 / 193
8.1 User Admin服務規範簡介 / 193
8.1.1 服務目標與基礎概念 / 193
8.1.2 驗證用戶身份 / 195
8.1.3 驗證用戶許可權 / 196
8.1.4 User Admin事件 / 197
8.2 實踐項目—Neonat論壇用戶管理模組 / 198
8.2.1 需求與依賴項分析 / 198
8.2.2 用戶與用戶組的實現 / 200
8.2.3 頁面許可權 / 201
8.2.4 用戶登錄與身份驗證 / 202
8.3 User Admin源碼解析 / 206
8.3.1 用戶管理實現 / 206
8.3.2 外部服務使用實踐 / 208
8.4 本章小結 / 211
第9章 Preferences服務 / 212
9.1 Preferences服務規範簡介 / 212
9.1.1 服務目標 / 212
9.1.2 數據結構 / 214
9.1.3 屬性 / 215
9.1.4 並發處理 / 216
9.1.5 清理遺留數據 / 217
9.2 實踐項目—Neonat論壇持久化模組 / 217
9.2.1 編碼實現 / 217
9.2.2 模組熱切換 / 220
9.3 Preferences源碼解析 / 222
9.3.1 數據結構實現 / 224
9.3.2 屬性存取 / 228
9.3.3 後端存儲系統 / 229
9.4 本章小結 / 234
第10章 聲明式服務 / 235
10.1 聲明式服務規範簡介 / 236
10.1.1 服務目標 / 236
10.1.2 定義Component / 236
10.1.3 Component類型 / 237
10.1.4 Component生命周期 / 240
10.1.5 Component屬性 / 245
10.1.6 綁定與發布服務 / 245
10.1.7 激活與鈍化方法 / 252
10.1.8 Component配置總結 / 254
10.2 實踐項目—使用聲明式服務改造Neonat論壇 / 259
10.2.1 可視化編輯工具 / 259
10.2.2 DS容器管理 / 263
10.3 DS容器源碼解析 / 264
10.3.1 容器啟動 / 264
10.3.2 載入Bundle中的Component / 267
10.3.3 動態依賴解析 / 272
10.4 本章小結 / 274
第11章 Subsystems服務 / 276
11.1 服務目標 / 276
11.2 Subsystem格式 / 277
11.3 Subsystem元數據 / 278
11.3.1 SUBSYSTEM.MF標識 / 278
11.3.2 DEPLOYMENT.MF標識 / 281
11.4 Subsystem類型與共享策略 / 283
11.5 組織管理Subsystem / 285
11.6 Subsystem部署與依賴策略 / 289
11.7 Subsystem生命周期 / 291
11.7.1 安裝 / 292
11.7.2 解析 / 293
11.7.3 啟動 / 294
11.7.4 停止 / 294
11.7.5 卸載 / 295
11.8 本章小結 / 295
第四部分 最佳實踐
第12章 OSGi最佳實踐 / 298
12.1 Bundle相關名稱命名 / 298
12.2 Bundle劃分原則 / 300
12.2.1 恰如其分地分配Bundle粒度 / 300
12.2.2 分離OSGi代碼 / 300
12.2.3 分離接口和實現 / 300
12.3 依賴關係實踐 / 301
12.3.1 依賴分析工具 / 301
12.3.2 避免Require-Bundle / 303
12.3.3 最小化依賴 / 304
12.3.4 避免循環依賴 / 304
12.3.5 Equinox x-*依賴 / 305
12.4 Equinox專有類載入機制 / 306
12.4.1 Buddy Loading類載入機制 / 306
12.4.2 ClassLoaderDelegateHook類載入機制 / 307
12.5 Bundle生命周期實踐 / 309
12.5.1 啟動 / 309
12.5.2 停止 / 309
12.6 服務工廠的特殊性 / 309
12.7 處理非OSGi的JAR包 / 311
12.8 啟動順序實踐 / 313
12.8.1 避免啟動順序依賴 / 313
12.8.2 Start Level的使用 / 313
12.9 Fragment Bundle實踐 / 314
12.10 保持OSGi動態性 / 315
12.11 API Tools實踐 / 317
12.11.1 API Baselines / 317
12.11.2 API Tools 註解 / 319
12.11.3 API Version版本管理 / 322
12.11.4 二進制檔案不兼容 / 322
12.12 本章小結 / 322
第13章 Spring Dynamic Modules實踐 / 324
13.1 Spring DM入門 / 324
13.1.1 Spring DM項目簡介 / 324
13.1.2 安裝Spring DM / 325
13.1.3 簡單的Spring DM示例 / 326
13.1.4 Bundle和Spring上下文 / 331
13.1.5 <osgi:*>命名空間 / 333
13.2 Spring DM進階 / 337
13.2.1 Spring DM擴展配置 / 337
13.2.2 Web Extender / 344
13.2.3 Spring DM服務約束 / 345
13.2.4 在Spring上下文中使用BundleContext / 346
13.3 Spring DM企業套用 / 346
13.3.1 規劃OSGi組件 / 347
13.3.2 在Spring DM中使用JPA / 348
13.3.3 事務管理 / 353
13.3.4 OSGi企業規範中的JPA / 358
13.4 Spring DM和Blueprint / 359
13.5 本章小結 / 360
第14章 構建可測試的OSGi系統 / 361
14.1 單元測試的必要性 / 362
14.2 單元測試的重要性 / 363
14.3 可測試代碼的特徵 / 364
14.4 OSGi單元測試 / 365
14.4.1 如何組織測試代碼 / 366
14.4.2 如何進行OSGi單元測試 / 367
14.5 OSGi集成測試 / 373
14.5.1 Eclipse JUnit Plug-in Test / 374
14.5.2 Spring DM Test / 379
14.5.3 Pax Exam / 383
14.6 本章小結 / 384
附錄A Java類載入器簡介 / 385
附錄B Equinox控制台命令 / 392
附錄C OSGi子規範目錄 / 397
附錄D OSGi相關項目 / 399
附錄E Equinox啟動配置參數 / 401