1. Programming beyond Hello World
Chapter 1. OSGi and the enterprise—why now?
1.1. Java’s missing modularity
1.2.1. Modularity, versioning, and compatibility
1.2.2. Dynamism and lifecycle management
1.3. Programming with enterprise OSGi
Chapter 2. Developing a simple OSGi-based web application
2.2. Writing an OSGi web application
2.2.1. Building a simple OSGi web application bundle
2.3. Decoupling with dependency injection
Chapter 3. Persistence pays off
3.2. Building a persistent application
3.2.1. Setting up a datasource
3.3. Transactions—the secret ingredient
Chapter 4. Packaging your enterprise OSGi applications
4.1. The need for more than modules
4.2. Enterprise OSGi subsystems
4.3. The Enterprise Bundle Archive (EBA)
4.5. Developing an enterprise OSGi application
2. Building better enterprise OSGi applications
Chapter 5. Best practices for enterprise applications
5.1. The benefits of sharing—and how to achieve them in your bundles
5.2. Structuring for flexibility
5.2.1. Separate interfaces from implementation
5.2.2. If you can’t separate out your API
5.2.3. Avoid static factory classes
5.2.4. Building a better listener with the whiteboard pattern
5.3. A better enterprise application architecture
Chapter 6. Building dynamic applications with OSGi services
6.2.1. Registering and looking up services the old-fashioned way
6.3. Getting the most out of Blueprint
6.3.1. Using Blueprint for things other than services
6.4. Blueprint and service dynamism
6.4.1. The remarkable appearing and disappearing services
Chapter 7. Provisioning and resolution
7.1.1. Describing bundles as resources
7.1.2. Requirements and capabilities
7.3. Provisioning technologies
7.4.1. Public bundle repositories
Chapter 8. Tools for building and testing
8.1. Manifest-first or code-first?
8.2. Building OSGi applications
8.3. Testing OSGi applications
Chapter 9. IDE development tools
9.1. Eclipse-based OSGi development
9.2. OSGi support in other IDEs
9.3. Tools for the enterprise OSGi extensions
9.4. Testing OSGi applications inside IDEs
3. Integrating enterprise OSGi with everything else
Chapter 10. Hooking up remote systems with distributed OSGi
10.1. The principles of remoting
10.1.1. The benefits of remoting
10.2. The Remote Services Specification
10.3. Writing a remotable service
10.4. Adding in your remote service using Apache CXF
10.5. Using your remote application
10.6.2. Importing a remote service
Chapter 11. Migration and integration
11.1. Managing heterogeneous applications
11.2.1. Moving from WARs to WABs
Chapter 12. Coping with the non-OSGi world
12.1. Turning normal JARs into OSGi bundles
12.1.1. Finding bundled libraries
12.2. Common problems for OSGi-unaware libraries
12.3. An example library conversion—logging frameworks in OSGi
12.3.1. Common problems with loggers in OSGi
12.3.2. Avoiding problems in OSGi
13.2.2. Installing Aries into Karaf
13.4. WebSphere Application Server
13.4.1. Provisioning and bundle repositories
13.5. Eclipse Virgo and Gemini
13.8. Paremus Nimble and Paremus Service Fabric
A.1. Where did OSGi come from, and where is it going?
A.2.1. The semantic versioning scheme
A.2.2. Guarantees of compatibility
A.2.3. Coexistence of implementations
A.2.4. Why everything has a version
A.2.5. Consumers and providers, not clients and implementors
A.4.3. Installation and resolution
A.4.4. Starting and stopping bundles
Appendix B. The OSGi ecosystem
B.2.2. The Compendium Specification