Author(s): Richard S Hall; et al
Publisher: Manning
Year: 2011
Language: English
Pages: 576
City: Greenwich [Conn.]
OSGi in Action......Page 1
brief contents......Page 6
contents......Page 8
foreword......Page 15
preface......Page 18
acknowledgments......Page 20
about this book......Page 21
Roadmap......Page 22
About the title......Page 24
About the cover illustration......Page 25
about the authors......Page 26
Introducing OSGi: modularity, lifecycle, and services......Page 28
OSGi revealed......Page 30
1.1 The what and why of OSGi......Page 31
1.1.1 Java’s modularity limitations......Page 32
1.1.2 Can OSGi help you?......Page 35
1.2.1 The OSGi framework......Page 36
1.3.1 Module layer example......Page 39
1.3.2 Lifecycle layer example......Page 41
1.3.3 Service layer example......Page 43
1.3.4 Setting the stage......Page 45
1.4.1 Java Enterprise Edition......Page 46
1.4.4 Java Management Extensions......Page 47
1.4.7 JSR 277......Page 48
1.4.10 .NET......Page 49
1.5 Summary......Page 50
Mastering modularity......Page 51
2.1.1 Modularity vs. object orientation......Page 52
2.2 Why modularize?......Page 54
2.3 Modularizing a simple paint program......Page 55
2.4 Introducing bundles......Page 58
2.4.1 The bundle’s role in physical modularity......Page 59
2.4.2 The bundle’s role in logical modularity......Page 60
2.5 Defining bundles with metadata......Page 61
2.5.1 Human-readable information......Page 62
2.5.2 Bundle identification......Page 63
2.5.3 Code visibility......Page 66
2.5.4 Class-search order......Page 75
2.6 Finalizing the paint program design......Page 77
2.6.1 Improving the paint program’s modularization......Page 78
2.6.2 Launching the new paint program......Page 79
2.7.1 Resolving dependencies automatically......Page 80
2.7.2 Ensuring consistency with uses constraints......Page 86
2.8 Reviewing the benefits of the modular paint program......Page 91
2.9 Summary......Page 95
Learning lifecycle......Page 96
3.1.1 What is lifecycle management?......Page 97
3.2 OSGi bundle lifecycle......Page 99
3.2.1 Introducing lifecycle to the paint program......Page 100
3.2.2 The OSGi framework’s role in the lifecycle......Page 102
3.2.3 The bundle activator manifest entry......Page 103
3.2.4 Introducing the lifecycle API......Page 104
3.2.5 Lifecycle state diagram......Page 110
3.2.6 Bundle cache and framework restarts......Page 111
3.3 Using the lifecycle API in your bundles......Page 112
3.3.1 Configuring bundles......Page 113
3.3.2 Deploying bundles......Page 115
3.3.3 Inspecting framework state......Page 119
3.3.4 Persisting bundle state......Page 120
3.3.5 Listening for events......Page 123
3.3.6 Bundle suicide......Page 126
3.4 Dynamically extending the paint program......Page 128
3.5.1 Resolving bundles......Page 135
3.5.2 Refreshing bundles......Page 137
3.5.3 When updating isn’t updated......Page 141
3.6 Summary......Page 142
Studying services......Page 144
4.1.1 What is a service?......Page 145
4.1.2 Why use services?......Page 146
4.1.3 When to use services......Page 150
4.1.5 Still not sure?......Page 151
4.2 OSGi services in action......Page 152
4.2.1 Publishing a service......Page 153
4.2.2 Finding and binding services......Page 155
4.3 Dealing with dynamics......Page 159
4.3.1 Avoiding common pitfalls......Page 160
4.3.2 Listening for services......Page 163
4.3.3 Tracking services......Page 168
4.4 Using services in the paint example......Page 170
4.4.2 Publishing a shape service......Page 171
4.4.3 Tracking shape services......Page 172
4.5 Relating services to modularity and lifecycle......Page 173
4.5.2 Can I provide a bundle-specific service?......Page 174
4.5.4 When should I unregister my service?......Page 175
4.6 Standard services......Page 176
4.6.1 Core services......Page 177
4.6.2 Compendium services......Page 178
4.7 Summary......Page 179
Delving deeper into modularity......Page 181
5.1.1 Importing your exports......Page 182
5.1.2 Implicit export attributes......Page 185
5.1.3 Mandatory export attributes......Page 187
5.1.4 Export filtering......Page 188
5.1.5 Duplicate exports......Page 189
5.2.1 Optional imports......Page 191
5.2.2 Dynamic imports......Page 192
5.2.3 Optional vs. dynamic imports......Page 193
5.2.4 Logging example......Page 194
5.3.1 Declaring bundle dependencies......Page 198
5.3.2 Aggregating split packages......Page 200
5.3.3 Issues with bundle dependencies......Page 203
5.4.1 Understanding fragments......Page 204
5.4.2 Using fragments for localization......Page 207
5.5 Dealing with your environment......Page 210
5.5.1 Requiring execution environments......Page 211
5.5.2 Bundling native libraries......Page 212
5.6 Summary......Page 214
OSGi in practice......Page 216
Moving toward bundles......Page 218
6.1.1 Choosing an identity......Page 219
6.1.2 Exporting packages......Page 222
6.1.3 Discovering what to import......Page 226
6.1.4 Embedding vs. importing......Page 230
6.1.5 Adding lifecycle support......Page 231
6.1.6 JAR file to bundle cheat sheet......Page 232
6.2.1 Making a mega bundle......Page 233
6.2.2 Slicing code into bundles......Page 243
6.2.3 Loosening things up......Page 248
6.2.4 To bundle or not to bundle?......Page 253
6.3 Summary......Page 256
Testing applications......Page 257
7.1.1 In-container testing......Page 258
7.1.2 Bundling tests......Page 259
7.1.3 Covering all the bases......Page 262
7.2.1 Testing expected behavior......Page 264
7.2.2 Mocking in action......Page 265
7.2.3 Mocking unexpected situations......Page 267
7.2.4 Coping with multithreaded tests......Page 268
7.2.5 Exposing race conditions......Page 270
7.3 Advanced OSGi testing......Page 271
7.3.1 OSGi test tools......Page 272
7.3.2 Running tests on multiple frameworks......Page 273
7.3.3 Unit testing......Page 277
7.3.4 Integration testing......Page 278
7.3.5 Management testing......Page 281
7.4 Summary......Page 284
Debugging applications......Page 285
8.1 Debugging bundles......Page 286
8.1.1 Debugging in action......Page 288
8.1.2 Making things right with HotSwap......Page 293
8.2 Solving class-loading issues......Page 298
8.2.1 ClassNotFoundException vs. NoClassDefFoundError......Page 299
8.2.2 Casting problems......Page 301
8.2.3 Using uses constraints......Page 302
8.2.4 Staying clear of Class.forName()......Page 305
8.2.5 Following the Thread Context Class Loader......Page 307
8.3.1 Analyzing OSGi heap dumps......Page 310
8.4.1 Finding a dangling service......Page 314
8.4.2 Protecting against dangling services......Page 315
8.5 Summary......Page 317
Managing bundles......Page 319
9.1.1 Meaningful versioning......Page 320
9.1.2 Package versioning......Page 322
9.1.3 Bundle versioning......Page 324
9.2.1 Configuration Admin Service......Page 326
9.2.2 Metatype Service......Page 336
9.2.3 Preferences Service......Page 339
9.3 Starting bundles lazily......Page 341
9.3.1 Understanding activation policies......Page 342
9.3.2 Using activation policies......Page 343
9.4 Summary......Page 344
Managing applications......Page 346
10.1.1 Introducing management agents......Page 347
10.1.2 OSGi Bundle Repository......Page 348
10.1.3 Deployment Admin......Page 357
10.2 Ordering bundle activation......Page 364
10.2.1 Introducing the Start Level Service......Page 365
10.2.2 Using the Start Level Service......Page 366
10.3 Summary......Page 369
Advanced topics......Page 370
Component models and frameworks......Page 372
11.1.1 What are components?......Page 373
11.1.2 Why do we want components?......Page 375
11.2.1 OSGi’s service-oriented component model......Page 376
11.2.2 Improving upon OSGi’s component model......Page 378
11.3 Declarative Services......Page 382
11.3.1 Building Declarative Services components......Page 383
11.3.2 Providing services with Declarative Services......Page 384
11.3.3 Consuming services with Declarative Services......Page 386
11.3.4 Declarative Services component lifecycle......Page 391
11.4 Summary......Page 398
Advanced component frameworks......Page 400
12.1.1 Blueprint architecture......Page 401
12.1.2 Providing services with Blueprint......Page 402
12.1.3 Consuming services with Blueprint......Page 405
12.1.4 Blueprint component lifecycle......Page 409
12.1.5 Advanced Blueprint features......Page 414
12.2 Apache Felix iPOJO......Page 418
12.2.1 Building iPOJO components......Page 419
12.2.2 Providing services with iPOJO......Page 420
12.2.3 Consuming services with iPOJO......Page 422
12.2.4 iPOJO component lifecycle......Page 427
12.2.5 Instantiating components with iPOJO......Page 431
12.3 Mix and match......Page 435
12.4 Summary......Page 438
Launching and embedding an OSGi framework......Page 439
13.1.1 Framework API overview......Page 440
13.1.2 Creating a framework instance......Page 442
13.1.3 Configuring a framework......Page 444
13.1.4 Starting a framework instance......Page 446
13.1.5 Stopping a framework instance......Page 447
13.2 Launching the framework......Page 448
13.2.2 Shutting down cleanly......Page 449
13.2.3 Configuring, creating, and starting the framework......Page 450
13.2.5 Starting the bundles......Page 451
13.2.6 Starting the main bundle......Page 452
13.2.7 Waiting for shutdown......Page 453
13.3.1 Inside vs. outside......Page 454
13.3.2 Who’s in control?......Page 458
13.3.3 Embedded framework example......Page 459
13.4 Summary......Page 464
Securing your applications......Page 465
14.1 To secure or not to secure......Page 466
14.2.1 Java and OSGi security......Page 467
14.3.1 PackagePermission......Page 471
14.3.2 BundlePermission......Page 472
14.3.3 AdminPermission......Page 473
14.3.4 ServicePermission......Page 474
14.3.5 Relative file permissions......Page 475
14.4.1 Conditional permissions......Page 476
14.4.2 Introducing the Conditional Permission Admin Service......Page 477
14.4.3 Bundle location condition......Page 478
14.4.4 Using ConditionalPermissionAdmin......Page 479
14.4.5 Implementing a policy-file reader......Page 483
14.5 Digitally signed bundles......Page 484
14.5.2 Creating certificates and signing bundles......Page 485
14.5.3 BundleSignerCondition......Page 488
14.6 Local permissions......Page 491
14.7.1 Custom conditions overview......Page 492
14.7.2 Date-based condition......Page 493
14.7.3 User-input condition......Page 494
14.8 Bringing it all back home......Page 498
14.9 Summary......Page 502
Web applications and web services......Page 504
15.1 Creating web applications......Page 505
15.1.1 Using the HTTP Service specification......Page 506
15.1.2 Using the Web Applications specification......Page 515
15.1.3 Standard WARs: the Web URL Handler......Page 519
15.2 Providing and consuming web services......Page 520
15.2.1 Providing a web service......Page 521
15.2.2 Consuming a web service......Page 526
15.2.3 Distributing services......Page 529
15.3 Summary......Page 537
A.1.1 Introducing the bnd tool......Page 540
A.1.2 Headers......Page 541
A.1.3 Directives......Page 543
A.1.4 Variables and macros......Page 544
A.1.5 Choosing a version policy......Page 545
A.2.1 Introducing the maven-bundle-plugin......Page 546
A.2.2 Going undercover......Page 548
A.2.3 Embedding dependencies......Page 550
A.2.4 Deploying artifacts to OBR......Page 551
A.3 For your consideration......Page 552
A.3.4 IDEA Osmorc......Page 553
A.3.7 Spring Bundlor......Page 554
B.1 Core OSGi services......Page 555
B.2 Compendium OSGi services......Page 556
B.3 Enterprise OSGi services......Page 557
B......Page 558
C......Page 562
D......Page 563
E......Page 564
F......Page 565
I......Page 566
L......Page 567
M......Page 568
O......Page 569
P......Page 571
S......Page 572
W......Page 574