2013-07-25 52 views
0

我已經創建了一個小樣本項目,以便使用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

我需要做些什麼來完成這項工作?

+0

如果你想自己部署這個在JBoss AS 7.2中,你還需要提供commons.logging(版本信息在build文件中)。 OSGi框架依賴由JBoss提供。 –

+0

您是否部署了Blueprint Extender軟件包? –

+0

@NeilBartlett:不是手動的,不是 - 當我在配置文件中以及模塊和捆綁包之間進行挖掘時,我無法找到它。所以這可能是罪魁禍首。但是,我找不到有關獲取該軟件包的位置的文檔,以及如何將其添加到JBoss配置中。你願意開導我嗎?這樣做的答案,以便我可以給你upvotes =) –

回答

1

要啓用藍圖功能,您需要安裝Blueprint Extender軟件包。有兩種實現可用:Apache Aries和Eclipse Gemini。我推薦白羊座,它可以從http://aries.apache.org/

+0

是否有一個特定的原因,你提前白羊座的執行Eclipse的?我傾向於使用Gemini Blueprint,因爲它可以從ebr.springsource.com獲得,所以我可以使用我的構建工具下載所有必需的檔案及其依賴關係。 –

+0

Aries的實現更加輕量級,它實際上由關心它的開發人員維護。雙子座的實施最初是由SpringSource維護的,但在遷移到VMware或Pivotal或本週他們自稱的任何東西之後,基本上已被放棄;-) –

+0

無論如何,我現在都採用了雙子座路線。不需要通過互聯網挖掘所有的瓶子是很好的 - 它可能與白羊座的實施一樣簡單,但只要這是工作,我不會切換;)感謝您的幫助! –