Skip to main content
Jump to: navigation, search

EIG:Distributed EventAdmin Service


OSGi declares an EventAdmin service that is responsible for distributing events to listeners registered via the (org.osgi.service.event.EventHandler). It's possible to create distributed implementations of such services using JMS and/or other messaging frameworks for distributing messages to other OSGi frameworks.


ECF's provider architecture allows the creation of a distributed EventAdmin implementation that can use a variety of wire protocols. For example, ActiveMQ/JMS 5.2 as above, or ECF generic, XMPP, JavaGroups, commercial/proprietary messaging buses, or any others that can implement the ECF Shared Object API.

Getting the Distributed EventAdmin Service

First, install ECF 3.0. Here is the download page.

Then get the two projects that implement the event admin example. This is a project set file. Save the project set file to your local disk and then import to get into your Eclipse workspace. For anonymous CVS access:


path: /cvsroot/rt

module: org.eclipse.ecf/examples/bundles

projects: org.eclipse.ecf.examples.eventadmin,

Running a Server and Clients

Once these two projects are in your workspace, you can run the ECF generic based server and client by opening the product editor for the following product files: Generic Server.product Generic Client.product


To run, click on 'Launch an Eclipse application' at the lower left.

If you run the EventAdmin Generic Server.product, you should get output every few seconds like this:

	message=message #0
	message=message #1

This indicates that the EventAdmin service is being accessed to send test messages every 2 seconds. Here's the code (in class) that is making the send call:

			while (!done) {
				try {
					Map msgProps = new Properties();
					msgProps.put("message", "message #"
							+ messageCounter++);
					msgProps.put("sender", sender);
					eventAdmin.postEvent(new Event(topic, msgProps));
				} catch (Exception e) {

What this does is create an Event instance with values for a couple of properties (i.e. "message", and "sender"), and then call eventAdmin.postEvent(Event) to have the eventAdmin implementation deliver the message to EventHandlers.

The test event handler implementation is this (in class):

public class TestEventHandler implements EventHandler {
	public void handleEvent(Event event) {
		System.out.println("handleEvent\n\ttopic=" + event.getTopic()
				+ "\n\tmessage=" + event.getProperty("message") + "\n\tsender="
				+ event.getProperty("sender"));

Back to the top