Why is OSGi dynamic ?
OSGi is the building platform for the Eclipse IDE and any RCP platform.
OSGi supplies a great deal of cool features
encapsulation for bundles (you decided what to export)
services that can be used without knowing who implements them
clever version management (you can use 2 different version of the same bundle with no issue)
But the dynamic aspect of OSGi can be a nightmare:
only some bundles are started at the beginning
if you have no direct dependency to a service implementation, who starts its bundle ?
java instances are created even if not all service dependency can be resolved (many null checks)
nearly no application checks for bundle being stopped, services becoming unavailable
plugin installation often requires a restart
As a solution nearly everyone writes their own Dependency Injection framework:
DS (declarative services from OSGi)
JSR-330 (also used by E4), new Java injection standard that can also be used for Services
Riena Dependency Injection
Wouldn't OSGi be a better framework and easier to use if it were static ?
Other competitors to OSGi dont have this dynamic feature at all.
Guice, a well known DI framework from Google, injects everything at startup and never removes an injection.
Limitations, drawbacks and chances of a static model
The intentation of this talk is to highlight the current painpoints and to talk about some ideas to make OSGi easier and simpler to use.
UPDATE: Slides are here http://de.slideshare.net/christiancampo/why-is-os-gi-dynamicpptx