Bndtools Equinox App Kit

I have created an app kit for building OSGi applications using Equinox with Bndtools at:

The app kit is split across several branches so that you may choose the content that best suits your application.  Each main branch has a corresponding examples branch that contains a working example.  You will find launchers in the dev project for the base framework, and in the example projects for running the examples.

Main Branches

  • master : bare bones OSGi with a working console
  • ds : master + declarative services
  • web : ds + servlets
  • rest : web + JAX-RS
  • mongo-rest : rest + MongoDB

Hopefully this will make it a bit easier to get started with OSGi.

eModeling 1.0.0 Released

I have released eModeling version 1.0.0.  eModeling provides a set of OSGi services and extensions for EMF.  Features include:

  • Services for creating and configuring an EMF ResourceSet with custom URI handlers
  • A service for creating URI mappings from service configuration properties – includes metatype
  • A service for creating a ResourceSet that can be used like a cache in the UI thread
  • An EMF model of generic collections
  • An EMF model for storing OSGi log data
  • An EMF model for creating and parsing a simple model query expression
  • Custom Hamcrest matchers for comparing two EMF model object instances for equality

For more information, please see the wiki.

This project is the last dependency to be released from a large refactoring of MongoEMF.  Now that eModeling is finished, I can complete the MongoEMF 0.8.0 release.  I hope to have this completed by the end of the year.

eMongo 1.0.0 Released

I have released eMongo version 1.0.0.  eMongo provides a set of OSGi services for interfacing to MongoDB. The main advantage to using eMongo is in an enterprise environment where you would like to configure your database parameters like hostname, user, password, etc without having to re-deploy your server.  eMongo services utilize the OSGi metatype service which, when combined with the Apache Felix Web Console, gives the administrator a convenient UI for configuring the MongoDB driver.  Access to a MongoDB database is split between two services: one for the client connection, and one for the database.  Here is the configuration through the web console:

Client config

Once the client connection is configured, you may configure one or more databases attached to that client:

Db config

The developer API is very simple.  Here is an example of an OSGi component accessing a MongoDB database:

public class MyComponent
  private volatile MongoDatabaseProvider mongoDatabaseProvider;

  public void activate()
    DB database = mongoDatabaseProvider.getDB();
    DBCollection collection = database.getCollection("items");

  @Reference(unbind = "-", target = "(alias=primary)")
  public void bindMongoDatabaseProvider(MongoDatabaseProvider mongoDatabaseProvider)
    this.mongoDatabaseProvider = mongoDatabaseProvider;

There are a few additional features like a service for creating a sequential record ID, and a JUnit rule for unit testing.  For more information, please see the eMongo Wiki.

eUnit 1.0.0 Released

I have released eUnit version 1.0.0.  eUnit is a utility framework to assist with JUnit testing in an OSGi environment.  The primary feature available in this first version is a JUnit @Rule for locating an OSGi service.  Here is a simple example:

public ServiceLocator<LogService> logServiceLocator = new ServiceLocator<LogService>(LogService.class);

private LogService logService;

public SystemTest
  public void setUp()
    logService = logServiceLocator.getService();

This framework is the result of a large refactoring of my MongoEMF framework.  I have split that project into smaller, standalone, projects and I will be releasing additional content over the next couple of months.

MongoEMF 0.7.1 Released

I have released MongoEMF version 0.5.1.  MongoEMF is a bridge between MongoDB and the Eclipse Modeling Framework making it very easy to store and retrieve instances of EMF objects in MongoDB.  This version updates the MongoDB driver to version 2.9.3, support for passing a generic MongoDB query in the URI, and bug fixes.  Please see the Release Notes for details.

I’m working on MongoEMF 0.8.0 in the next branch and there will be a fairly significant code refactoring.  I’m going to be renaming packages, and splitting code out into multiple projects.  This will hopefully be the last major API change before I declare the API stable and release 1.0.  I’m still very interested in hooking up a query engine based on Xtext, but currently do not have time to work on this.  If you are interested in contributing in this area, or any other part of the project, please let me know.

MongoEMF Update

I have a couple of updates for you on the MongoEMF project.  First off, I have released version 0.6.0.  This version brings a significant refactoring to the structure of the project to make way for a new query engine.  More on this in a bit.  I changed all OSGi services to use declarative services (DS), so you will now need to include the appropriate DS bundle for your favorite OSGi container.  I also removed lazy bundle activation (Neil will be proud) so you must make sure the org.eclipselabs.mongo and org.eclipselabs.mongo.emf.query.simple bundles get started.  Finally, I added the ability for a query to return a cursor instead of materializing all of the objects.  Please see the Release Notes for all the details.

The current query engine in MongoEMF has several limitations that need to be overcome.  As I mentioned in a previous post, I have proposed a Google Summer of Code project to re-write the query engine using Xtext.  Tiger Gui has submitted a student proposal to Google for this project.  He has already done some prototyping and the results look very promising.  If you are interested in seeing Eclipse accept this project for GSoC, please show your support on the soc-dev mailing list.  If you have any feedback on the design of the new query engine, please post to the MongoEMF community forum.

Right now, I’m taking a serious look at the OSGi services in MongoEMF.  I’m planning on refactoring them in the next release to include the ability to configure Mongo instances through the OSGi ConfigAdmin.  If you have any interest in this area, you feedback is welcome.

Finally, I’m considering proposing MongoEMF as an Eclipse project.  I don’t expect to begin the process until we get close to the 1.0 release.  Would you, the community, support this project proposal and the move to an Eclipse project?

MongoEMF 0.5.1 Released

I have released MongoEMF version 0.5.1.  MongoEMF is a bridge between MongoDB and the Eclipse Modeling Framework making it very easy to store and retrieve instances of EMF objects in MongoDB.  This version is a maintenance release with bug fixes and minor enhancements.  For a complete list of new features, please see the Release Notes.  A Google group is now available for community discussions of MongoEMF.

MongoEMF 0.5.0 Released

I have released version 0.5.0 of MongoEMF.  MongoEMF is a bridge between MongoDB and the Eclipse Modeling Framework making it very easy to store and retrieve instances of EMF objects in MongoDB.  This version includes the ability to provide custom data type converters for storing non-native attribute values as a native type in MongoDB.  For example, you can now store a Calendar as a long.  The code was also refactored into a builder pattern, giving you the ability to completely customize how objects are serialized and deserialized in the database.  For a complete list of new features, please see the Release Notes.  I have also made some progress on a User Guide.  If you have any interest in contributing to this project, please contact me.