Changes

Jump to: navigation, search

Steps for Building Declarative Services

2,117 bytes added, 23:03, 24 January 2011
Created page with '{{Ecl_menu}}__NOTOC__ <h4>1. Study the Interfaces</h4> * [http://www.osgi.org/javadoc/r4v42/org/osgi/framework/Bundle.html Bundle] * [http://www.osgi.org/javadoc/r4v42/org/osgi…'
{{Ecl_menu}}__NOTOC__

<h4>1. Study the Interfaces</h4>

* [http://www.osgi.org/javadoc/r4v42/org/osgi/framework/Bundle.html Bundle]
* [http://www.osgi.org/javadoc/r4v42/org/osgi/framework/BundleContext.html BundleContext]
* [http://www.osgi.org/javadoc/r4v42/org/osgi/framework/BundleActivator.html BundleActivator]
----------
<h4>2. Define the Bundle Service Interface</h4>

<source lang="java">
package cs.ecl.osgi.simple.declarativeservice.say;

public interface Sayable {
String say();
}

</source>

An implementation of this interface could be:
<source lang="java">
package cs.ecl.osgi.simple.declarativeservice.say.internals;
import java.util.Date;
import cs.ecl.osgi.simple.declarativeservice.say.Sayable;

public class TodaySay implements Sayable {
public String say() {
return " Declarative Service: Today is " + new Date();
}
}
</source>

The relationships between the interface that is exposed to the client and the implementation that is hidden, must be defined in a xml file:

<source lang="xml">
<?xml version="1.0"?>
<component name="sayable">
<implementation class="cs.ecl.osgi.simple.declarativeservice.say.internals.TodaySay"/>
<service>
<provide interface="cs.ecl.osgi.simple.declarativeservice.say.Sayable"/>
</service>
</component>
</source>


The bundle consumer must implement the CommandProvider interface
<source lang="java">

package cs.ecl.osgi.simple.declarativeservice.consumer;

import org.eclipse.osgi.framework.console.CommandInterpreter;
import org.eclipse.osgi.framework.console.CommandProvider;

import cs.ecl.osgi.simple.declarativeservice.say.Sayable;

public class SaySingleConsumer implements CommandProvider {

private Sayable s;

public synchronized void bindSayable(Sayable s) {
this.s = s;
}

public synchronized void unbindSayable(Sayable s) {
this.s = null;
}

public synchronized void _run(CommandInterpreter ci) {
if (s != null) {
System.out.println(s.say());
} else {
ci.println("Error, No Service of type Sayable available");
}
}

@Override
public String getHelp() {
return "\n\t run - EXECUTE the Sayable service";
}
}
</source>

Navigation menu