У меня есть очень простой пример декларативных услуг.Я следую этому уроку http://www.eclipsezone.com/eclipse/forums/t97690.html?start=0. Все работает как положено.Однако я не могу понять, как я могу сделать так, чтобы «SampleImporter» (который является пакетом, который, как ожидается, будет использовать сервисы других пакетов), знал о списке «SampleExporter» (пакет, предоставляющий услугу).Другими словами, я хочу, чтобы «SamlpeImporter» видел идентификатор пакета (ов), который он в конечном итоге использует.Эта информация очень полезна для моего приложения.
вот XML-файл для SampleExporter:
<?xml version="1.0"?>
<component name="samplerunnable">
<implementation class="org.example.ds.SampleRunnable"/>
<property name="ID" value="expoter" />
<service>
<provide interface="java.lang.Runnable"/>
</service>
, а для SampleImporter:
<?xml version="1.0"?>
<component name="commandprovider1">
<implementation class="org.example.ds.SampleCommandProvider1"/>
<service>
<provide interface="org.eclipse.osgi.framework.console.CommandProvider"/>
</service>
<reference name="RUNNABLE"
interface="java.lang.Runnable"
bind="setRunnable"
unbind="unsetRunnable"
cardinality="0..1"
policy="dynamic"/>
</component>
На стороне Импортера у меня есть следующая функция:
public class SampleCommandProvider1 implements CommandProvider {
private Runnable runnable;
public synchronized void setRunnable(Runnable r) {
runnable = r;
}
public synchronized void unsetRunnable(Runnable r) {
runnable = null;
}
public synchronized void _run(CommandInterpreter ci) {
if(runnable != null) {
runnable.run();
} else {
ci.println("Error, no Runnable available");
}
}
public String getHelp() {
return "\trun - execute a Runnable service";
}
}
Это работает нормально, но тогда, если я хочу получить значение свойства, используя
public synchronized void setRunnable(Runnable r, Map properties)
или
public synchronized void setRunnable(Runnable r, ServiceReference reference)
метод запуска экспортера никогда не вызывается, что означает, что функция привязки (setRunnable не вызывается). Однако, используя консольную команду "services", я вижу, чтоЭкспортерский пакет используется импортером.Кроме того, используя ss и ls, я вижу, что компонент eporter "удовлетворен".Что не так с моей реализацией?
Заранее спасибо
Приветствия
Мари