Book Image

OSGi and Apache Felix 3.0 Beginner's Guide

By : Walid Joseph Gédéon
Book Image

OSGi and Apache Felix 3.0 Beginner's Guide

By: Walid Joseph Gédéon

Overview of this book

<p>The OSGi specification is a module system and service platform that implements a complete and dynamic component model. Wasn't that a complicated definition! So how would you really use it in practical modular applications? Let this book break down the seemingly overwhelming OSGi standards for you by explaining Apache Felix's powerful architecture in a simple and easy-to-understand manner using Apache Felix framework to get you up and running sooner than you could expect.<br /><br />The OSGi standards have found a wide range of applications in the context of the Enterprise, Telecommunications, Telematics, Smart Home, E-Health, and Mobile applications, to name just a few. Apache Felix is one of the most famous implementations of the OSGi framework specification. This book introduces OSGi on the simple and extensible Felix framework and guides you from the development environment setup to the troubleshooting of potential issues, walking you through the development of an OSGi-based application and explaining relevant software design concepts.<br /><br />The book starts with an introduction to the OSGi Service Platform, its parts, and its bundle structure. It then walks you through setting up the Felix framework and your development environment. It describes the Felix Framework and how to operate it using Gogo. It will teach you everything possible about the practical implementation of OSGi using the Felix Framework as a launch pad.<br /><br />The book then kicks off the Bookshelf project, a case study that will be used to progressively explain the important concepts around OSGi using the Felix framework. The Bookshelf project feature trail will set the context to explain OSGi headers, the bundle activator, the bundle context, and so on.<br /><br />As you implement the bookshelf step by step, you learn about OBR repositories, dependency management, and bundle version management with Felix.<br /><br />Moving ahead, a few more advanced topics are covered, such as using iPOJO for dependency injection and service registration; then the book moves on to the implementation of a web-based graphical interface, first using a simple Servlet, and then building a JSP-based Web Application Bundle.<br /><br />OSGi service specifications such as the Log Service, Http Service, and Web Container are explained. Finally, the book describes some of the common pitfalls during bundle development, and gives hints on troubleshooting them in Felix.</p>
Table of Contents (22 chapters)
OSGi and Apache Felix 3.0
Credits
About the Author
About the Reviewers
Preface

Debugging with Eclipse


As a project's complexity grows with many bundles interacting with each other and their environment, logging as a means of debugging loses its efficiency. We turn towards remote debugging using the IDE.

In this section, we will see how to set up the application (in our case, standalone Felix) for remote debugging. Then we will see how to connect with the IDE as control console. The stepping in debug mode is not covered, but can be learned in the Help sections.

We'll look into the following:

  • Using the Java Platform Debugger Architecture (JPDA) to connect to the Felix application using a Java IDE as a debugging tool

  • Running Felix embedded in Eclipse

  • Debugging the bundles on an embedded Felix

Remote debugging configuration

Remote debugging is much simpler than most people think. Basically, when starting the application, we ask the JVM to start listening on a port so that we can connect to it later. Then we connect using a Java IDE and control the JVM's execution flow.

This allows us to stop the processing and peek into variables and attributes, or inspect the execution flow by stepping through the different method calls.

Setting up the remote application

First we need to tell the JVM to start the Felix framework in the remote debug mode. This is done through a set of command-line parameters passed to the Java application.