OSGi EventAdmin サービスのデモ アプリケーションを実行しようとしていますが、実装した EventHandler は、EventAdmin パブリッシャーによって投稿されたイベントをリッスンできません。
以下は Event Publisher のコードで、その後に Listener(EventHandler) のコードが続きます。
public class Publisher implements BundleActivator{
static EventAdmin eventAdmin;
ServiceReference ref;
static HashMap properties= null;
@Override
public void start(BundleContext context) throws Exception {
ref=context.getServiceReference(EventAdmin.class.getName());
if(ref==null){
System.err.println("Unable to aquire EventAdmin Ser Ref.");
}
eventAdmin=(EventAdmin) context.getService(ref);
if(eventAdmin==null){
System.err.println("unable to get service:EventAdmin");
}
properties=new HashMap();
properties.put("XYZ", "Test");
Event event = new Event("lnu/test/event/Demo", properties);
eventAdmin.postEvent(event);
System.out.println("event posted");
}
@Override
public void stop(BundleContext context) throws Exception {
// TODO Auto-generated method stub
}
}
リスナーのコード:
public class Listener implements BundleActivator, EventHandler {
public void start(BundleContext context) {
Dictionary d = new Hashtable();
d.put(EventConstants.EVENT_TOPIC, "lnu/test/event/Demo" );
context.registerService( EventHandler.class.getName(),
this, d );
System.out.println("event handler is registered now");
}
public void stop( BundleContext context) {}
public void handleEvent(Event event ) {
System.err.println("Event has been captured");
System.out.println("getTopic: "+event.getTopic());
System.out.println("getproperty: "+event.getProperty("XYZ"));
}
}
コード内の print ステートメントは、イベントがパブリッシャーによって投稿され、リスナーが EventHandler サービスに登録されていることを示していますが、それでもリスナー側で handleEvent メソッドを呼び出しません。理由はわかりません。舞台裏で何が起こっているのか理解できません。実行時の例外/エラーはありません。
使用される IDE は Eclipse Juno Build id: 20120614-1722 with Equinox です。
次のターゲット プラットフォーム バンドルが実行構成に含まれています。
- org.eclipse.osgi
- org.eclipse.equinox.event
- org.eclipse.equinox.util
- org.eclipse.osgi.services
私が行方不明または間違っていることを教えてもらえますか? または、OSGi EventAdmin サービスの実例へのリンクがあれば教えてください。