我已經創建了一個小樣本項目,以便使用Spring(即Blueprint)實現OSGi的參考實現,並且我可以獲取所有包來安裝,解析並開始確定,但是當該包啓動時,我的服務未註冊。如何在JBoss AS 7.2的bundle加載時註冊我的OSGi服務?
我做了整個項目available on github所以你可以看看源 - 從構建輸出的罐子在artifacts
文件夾,但您也可以自己通過運行gradle assemble
構建項目。
正如我瞭解Blueprint規範,特別是this guide,如果配置文件位於正確的位置,則不需要激活器類來註冊服務 - 在我的jar中,我有以下OSGI-INF/blueprint/sillyservice.xml
:
<?xml version="1.0" encoding="UTF-8"?>
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0">
<bean id="sillyService" class="se.sunstone.silly.service.ServiceImpl"
init-method="startService">
</bean>
<service ref="helloservice"
interface="com.sample.blueprint.helloworld.api.HelloWorldService" />
</blueprint>
部署此捆綁包時,JBoss將捆綁包報告爲ACTIVE。
當我再部署客戶端捆綁,存在運行下面的代碼片段列出所有註冊服務的激活器類:
ServiceReference[] refs = context.getAllServiceReferences(null, null);
if (refs != null) {
logger.info(String.format("There are %s references", refs.length));
for (ServiceReference ref : refs) {
logger.info(ref);
}
} else {
logger.info("There are no registered services.");
}
服務的一羣由內部的JBoss OSGi框架註冊列出,但不是我的SillyService
。
我需要做些什麼來完成這項工作?
如果你想自己部署這個在JBoss AS 7.2中,你還需要提供commons.logging(版本信息在build文件中)。 OSGi框架依賴由JBoss提供。 –
您是否部署了Blueprint Extender軟件包? –
@NeilBartlett:不是手動的,不是 - 當我在配置文件中以及模塊和捆綁包之間進行挖掘時,我無法找到它。所以這可能是罪魁禍首。但是,我找不到有關獲取該軟件包的位置的文檔,以及如何將其添加到JBoss配置中。你願意開導我嗎?這樣做的答案,以便我可以給你upvotes =) –