Modular Java: Creating Flexible Applications with OSGi and Spring (Pragmatic Programmers)