第一部分 簡介
第1章 OSGi、Equinox和Eclipse 2
1.1 簡史 2
1.2 閤作 3
1.3 實戰的模塊性和自由性 4
1.4 平颱 4
1.5 生態係統 5
1.6 OSGi的來龍去脈 5
1.6.1 Java的謊言 5
1.6.2 現狀核實 6
1.6.3 OSGi的壽命 6
1.7 實踐中的OSGi和Equinox 7
1.8 總結 8
第2章 OSGi基本概念 9
2.1 bundle環境 9
2.2 為何選擇OSGi 10
2.3 bundle剖析 13
2.4 模塊化 14
2.4.1 導齣包 14
2.4.2 導入包 14
2.4.3 需要的bundle 15
2.4.4 強化模塊化特性 16
2.5 模塊化設計概念 16
2.6 生命周期 17
2.7 協作 18
2.7.1 服務 18
2.7.2 擴展和擴展點 19
2.8 OSGi框架 20
2.9 安全性 20
2.10 OSGi框架實現 21
2.11 總結 21
第二部分 OSGi示例
第3章 教程介紹 24
3.1 何為Toast 24
3.2 Toast的演變 26
3.3 開發環境安裝 27
3.4 示例代碼 28
3.4.1 在章與章之間切換 28
3.4.2 比較 29
3.5 目標平颱設置 30
3.5.1 預定義的目標 31
3.5.2 定義目標平颱 32
3.6 通過示例進行學習 35
3.7 總結 36
第4章 你好,Toast 37
4.1 簡單的場景 37
4.1.1 創建工程 37
4.1.2 Gps 38
4.1.3 Airbag和IAirbagListener 40
4.1.4 EmergencyMonitor 41
4.1.5 Main 43
4.1.6 運行 43
4.1.7 檢查點 43
4.2 將Toast劃分為Bundle 43
4.2.1 GPS bundle 45
4.2.2 安全氣囊bundle 47
4.2.3 緊急情況監視器bundle 47
4.2.4 啓動 49
4.3 總結 50
第5章 服務 52
5.1 轉移到服務 52
5.2 注冊GPS服務 54
5.3 注冊安全氣囊服務 58
5.4 獲取服務示例代碼 61
5.5 啓動 64
5.6 故障排解 64
5.7 總結 65
第6章 動態服務 66
6.1 動態服務簡介 66
6.2 使用服務追蹤器 67
6.2.1 修改bundle激活器 67
6.2.2 啓動 70
6.2.3 服務追蹤器小結 72
6.3 使用服務激活器工具包 73
6.3.1 在目標平颱上安裝SAT 73
6.3.2 修改GPS bundle激活器 73
6.3.3 修改安全氣囊bundle激活器 74
6.3.4 修改緊急情況監視器bundle激活器 74
6.3.5 啓動 75
6.3.6 SAT小結 76
6.4 使用聲明式服務 76
6.4.1 修改GPS bundle 77
6.4.2 修改安全氣囊bundle 79
6.4.3 修改緊急情況監視器bundle 80
6.4.4 運行 82
6.4.5 聲明式服務總結 83
6.5 總結 83
第7章 客戶端/服務器端交互 84
7.1 後颱 84
7.1.1 核心bundle 84
7.1.2 後颱應急bundle 85
7.2 客戶端 88
7.2.1 信道bundle 88
7.2.2 緊急情況監視器bundle 92
7.3 工具類 94
7.3.1 常量 94
7.3.2 屬性 94
7.3.3 日誌 95
7.4 運行Toast 95
7.4.1 運行後颱 96
7.4.2 運行客戶端 97
7.5 總結 97
第8章 測試 99
8.1 使Toast具備可測試性 99
8.2 對Toast進行單元測試 100
8.2.1 測試方案 100
8.2.2 編寫測試用例 101
8.2.3 運行單元測試 103
8.3 係統測試Toast 104
8.3.1 測試規劃 104
8.3.2 創建測試工具 105
8.3.3 編寫測試用例 107
8.3.4 運行係統測試 110
8.4 總結 111
第9章 打包 112
9.1 定義Toast産品 112
9.1.1 創建産品配置 112
9.1.2 概述頁 114
9.1.3 依賴頁 115
9.1.4 配置頁 116
9.1.5 啓動頁 116
9.1.6 運行産品 118
9.1.7 産品化客戶端 118
9.2 導齣Toast 118
9.3 為其他平颱打包 121
9.4 認真考慮組件定義 123
9.4.1 版本和版本範圍 123
9.4.2 導齣包和友元 124
9.5 總結 126
第10章 插件化服務 127
10.1 分離接口與接口的實現 127
10.1.1 將Fake Airbag與其接口相互分離 128
10.1.2 將模擬GPS與其接口相分離 129
10.1.3 迴歸測試 129
10.2 設備模擬 130
10.2.1 概念 130
10.2.2 設備模擬器框架 131
10.3 作為插件式服務的模擬設備 131
10.3.1 模擬安全氣囊 131
10.3.2 模擬GPS 133
10.4 運行模擬設備 134
10.5 總結 135
第11章 可擴展的用戶界麵 136
11.1 Crust 136
11.1.1 Crust shell 136
11.1.2 Crust工具 137
11.2 緊急情況處理 138
11.2.1 創建可插拔的用戶界麵 138
11.2.2 重構緊急情況處理業務邏輯 139
11.2.3 緊急情況處理用戶界麵 140
11.2.4 運行用戶界麵 141
11.3 車載氣候係統和音響係統 142
11.3.1 車載氣候係統與音響設備 142
11.3.2 空調和音響屏幕 144
11.3.3 運行用戶界麵 144
11.4 OSGi應用模型 145
11.5 導航和地圖 148
11.5.1 榖歌地球集成 148
11.5.2 地圖支持 151
11.5.3 應用可擴展性和導航支持 152
11.5.4 運行用戶界麵 152
11.6 總結 154
第12章 動態配置 155
12.1 跟蹤場景 155
12.2 安裝跟蹤代碼 156
12.2.1 Core Tracking Bundle 156
12.2.2 後颱跟蹤bundle 157
12.2.3 客戶端跟蹤bundle 157
12.3 運行基本的跟蹤場景 158
12.4 配置 159
12.4.1 OSGi的管理控製 159
12.4.2 客戶端跟蹤bundle 159
12.4.3 運行可配置的Toast 161
12.4.4 具備持久化配置的運行 162
12.5 總結 162
第13章 Web門戶 163
13.1 門戶 163
13.2 PortalServlet 164
13.3 使用服務進行操作查詢 165
13.4 聲明門戶操作 168
13.5 白闆模式的利與弊 170
13.6 總結 170
第14章 使用p2進行係統開發 171
14.1 Equinox p2 簡介 171
14.1.1 架構 172
14.1.2 p2元數據——可安裝的單元 172
14.1.3 組件 173
14.1.4 倉庫 173
14.1.5 模式 174
14.1.6 指揮者 174
14.1.7 引擎 174
14.2 細化Toast結構 174
14.2.1 使用特性定義産品 175
14.2.2 後颱特性 175
14.2.3 客戶端特性 177
14.2.4 重構小結 180
14.3 編寫一個配置器 180
14.3.1 配置器 181
14.3.2 配置後颱 184
14.3.3 後颱小結 184
14.4 增加一個Web部署頁麵 184
14.4.1 創建動作 185
14.4.2 管理動作 185
14.4.3 安裝卸載動作 186
14.4.4 安裝配置UI 186
14.5 導齣、運行以及配置 186
14.5.1 引入一個p2倉庫 186
14.5.2 運行Toast後颱 189
14.5.3 創建並配置汽車 190
14.6 客戶端動態部署 191
14.7 總結 192
第三部分 進階篇
第15章 聲明式服務 194
15.1 聲明式服務模型 194
15.2 常見場景 195
15.2.1 最簡單的組件 195
15.2.2 引用服務 197
15.2.3 提供服務 198
15.2.4 引用和提供服務 199
15.2.5 立刻激活組件 201
15.2.6 白闆模式 202
15.2.7 工廠組件 207
15.3 啓動和調試DS應用 213
15.4 PDE工具 214
15.5 總結 216
第16章 擴展 217
16.1 擴展注冊 217
16.2 擴展點 219
16.3 擴展 221
16.4 高級擴展主題 222
16.4.1 擴展ID 222
16.4.2 命名擴展和匿名擴展 222
16.4.3 擴展工廠 223
16.5 擴展注冊機製的生命周期 223
16.6 動態擴展的應用場景 224
16.6.1 場景一:沒有緩存 225
16.6.2 場景二:緩存擴展 225
16.6.3 場景三:緩存對象 227
16.7 服務與擴展 229
16.8 擴展注冊的神話 231
16.9 總結 231
第17章 日誌 232
17.1 日誌服務規範 232
17.1.1 日誌級彆 232
17.1.2 記錄日誌 233
17.1.3 讀取日誌 233
17.1.4 監聽日誌 234
17.2 在Toast中使用LogService 234
17.3 使用LogReaderService 237
17.4 Toast的LogUtility類 239
17.5 Equinox的LogService實現 240
17.6 總結 242
第18章 HTTP支持 243
18.1 HttpService 243
18.2 注冊和注銷Servlet 245
18.3 聲明式HTTP內容注冊 248
18.4 使用Jetty 248
18.5 HTTP上下文和JAAS集成 249
18.5.1 基於HTTP的認證和登錄 249
18.5.2 運行具備安全機製的客戶端 252
18.6 疑難解答 253
18.6.1 BindException 253
18.6.2 HttpService在監聽哪個端口 253
18.7 總結 254
第19章 服務器端 255
19.1 服務器端和OSGi 255
19.2 在Web應用中嵌入Toast後颱係統 257
19.2.1 更新産品 257
19.2.2 Web應用的Root文件 259
19.2.3 構建Web應用 261
19.2.4 運行Web應用 262
19.2.5 疑難解答 264
19.2.6 <init-param>參數說明 265
19.3 OSGi中的遠程服務 265
19.3.1 Eclipse通信框架 266
19.3.2 遠程服務 266
19.3.3 分布式Toast 266
19.3.4 遠程服務主機 267
19.3.5 遠程服務客戶端 268
19.3.6 服務發現 269
19.3.7 運行分布式係統 270
19.4 總結 271
第20章 發布工程 272
20.1 什麼是PDE構建 272
20.2 build.properties bundle 273
20.2.1 控製屬性 274
20.2.2 使用自定義構建腳本 275
20.3 創建構建器 275
20.3.1 調整PDE構建的目標 276
20.3.2 build.properties 276
20.4 運行構建器 279
20.5 調整構建 282
20.5.1 自定義構建腳本 282
20.5.2 倉庫和附加依賴項 283
20.5.3 從SCM(軟件配置管理)係統中提取內容 283
20.5.4 獲取map文件 285
20.5.5 自動替換版本號 286
20.5.6 設定版本號 286
20.5.7 定位和放置根目錄文件 287
20.6 構建附加特徵 288
20.6.1 創建特徵構建器 288
20.6.2 build.properties 288
20.6.3 運行特徵構建 290
20.7 構建WAR包 291
20.8 總結 291
第四部分 參考篇
第21章 動態性的最佳實踐 294
21.1 動態性與你 294
21.2 Toast的動態性 295
21.3 動態性的挑戰 296
21.4 動態性意識 297
21.4.1 對象處理 298
21.4.2 bundle監聽器 299
21.5 擴展者模式和BundleTracker 300
21.6 動態性啓用 300
21.7 啓動和停止的動態性 302
21.7.1 啓動級彆 303
21.7.2 正確使用服務 304
21.7.3 關閉也不總是易事 304
21.8 總結 305
第22章 整閤代碼庫 306
22.1 bundle形式的JAR 306
22.2 采用注入的方式進行bundle化 307
22.3 通過包裝的方式進行bundle化 309
22.4 通過引用的方式進行bundle化 310
22.5 使用bnd進行bundle化 312
22.6 解決類加載問題 312
22.6.1 Class.forName() 312
22.6.2 與上下文類加載器有關的問題 316
22.6.3 管理JRE類 317
22.6.4 序列化 318
22.7 總結 318
第23章 高級主題 319
23.1 Equinox控製颱 319
23.2 OSGi中的角色 322
23.3 bundle的形態 323
23.4 片段 325
23.5 單例 327
23.6 bundle生命周期 328
23.6.1 生命周期狀態 328
23.6.2 BundleActivator 329
23.6.3 激活器的弊端 330
23.6.4 激活器的使用 330
23.7 bundle激活策略 331
23.8 控製bundle啓動 332
23.8.1 持久化啓動 332
23.8.2 啓用激活策略 333
23.8.3 osgi.bundles 333
23.9 類加載 334
23.9.1 類查找算法 334
23.9.2 聲明導入和導齣 335
23.9.3 導入包與需要的bundle 335
23.9.4 可選性 336
23.9.5 use指令 336
23.9.6 再導齣 337
23.9.7 x-internal和x-friends 337
23.9.8 引導代理 337
23.10 配置和運行Equinox 338
23.10.1 config.ini 338
23.10.2 可執行程序 339
23.11 數據區 341
23.12 總結 343
第24章 聲明式服務引用 344
24.1 組件XML模式v1.0.0 344
24.1.1 聲明XML的命名空間和模式 344
24.1.2 <component>元素 345
24.1.3 <implementation>元素 347
24.1.4 <property>元素 347
24.1.5 <properties>元素 348
24.1.6 <service>元素 349
24.1.7 <provide>元素 349
24.1.8 <reference>元素 349
24.2 組件的生命周期 351
24.2.1 滿足組件的配置 351
24.2.2 組件的激活、注銷與修改 353
24.2.3 訪問引用服務 355
24.2.4 組件的即時性 357
24.2.5 組件屬性 357
24.3 總結 359
· · · · · · (
收起)