由于當時匆忙的發布,沒有進行仔細的校對,發布的EventAdmin部分的代碼中缺少了使用DS實現的示例,但同時在其中又提供了OSGI-INF/component.xml,導致了如果大家直接使用該Component.xml切換為使用DS來實現EventHandler的時候會出現運行時沒反應的現象,這里的錯誤在于component.xml中的
<property name="event.topics" value="/*"/>
EventAdmin在通知Event時是根據注冊為EventHandler服務的屬性來通知的,而這個屬性類型要求的為String[]型的,但采用上面的描述方法的話,就把event.topics的屬性注冊為了String類型,所以發布Event后EventAdmin是無法通知到這個EventHandler的,在DS中,要將注冊的屬性換成String[]型,非常的簡單,就把上面一句改為:
<property name="event.topics">
org/riawork/EQUINOXEVENT
</property>
如需要捕捉多個事件,則可以寫為:
<property name="event.topics">
org/riawork/EQUINOXEVENT
org/riawork/OSGIEVENT
</property>
同樣,這里也是支持通配符的,也就是可以這么寫
<property name="event.topics">
org/riawork/*
</property>
修正后的EventHandler project采用了DS的方式實現,重新打包到了OSGi_Opendoc.rar中,如需要的同學請重新下載。
ps: 多謝
Jim@QAD,才發現了這個錯誤....:)