2016-05-01 83 views
-2

我正在使用felix osgi + ds + weld cdi + pax cdi。所以,我有以下服務:OSGI DS:聲明式服務無xml文件工作

import org.osgi.service.component.annotations.Component; 
import org.osgi.service.component.annotations.ServiceScope; 

@Component(
    immediate = false, 
    property={"label=stub"}, 
    scope=ServiceScope.PROTOTYPE 
) 
public class ServiceImpl implements ServiceI{ 

    @Override 
    public String getMyString() { 
     Component t=null; 
     return "This is my string:"+t; 
    } 

} 

要生成我用maven-捆插件ds.xml文件,因爲我知道這是產生DS XML文件的現代生活方式。所以一切似乎都起作用。 Ds XML文件由maven插件生成並放入OSGI-INF。我決定檢查felix將如何刪除這個ds.xml文件。所以我刪除了這個xml文件並清理了osgi緩存。結果令我非常驚訝。該服務仍然有效併成功注入。我只是收到消息:未找到組件描述符條目'OSGI-INF/.... xml'。除此之外,我認爲編譯後刪除了@Component註解。這就是爲什麼我沒有在我的osgi中安裝org.osgi.service.component包。然而,一切工作正常,所有捆綁解決。

所以問題 -

  1. 爲什麼不xml文件DS服務工作?
  2. 爲什麼我的osgi框架不需要org.osgi.service.component.annotations.Component? Felix捆綁包有包,但不包含org.osgi.service.component.annotations.Component註釋。

回答

2
  1. 如果沒有xml文件,DS無法正常工作。

可能您已將其從文件系統中刪除,但未從部署到OSGi Framework中的包中刪除。

  1. 這些註釋只是構建時,它們不會創建運行時依賴項。
+0

謝謝你的回答。我檢查了三次!我刪除了jar裏面。證明非常簡單 - osgi框架給了我警告。你可以嘗試一下自己。 –

+0

自2004年以來我一直在使用OSGi,我不需要嘗試。我不知道你到底在做錯什麼,但我保證DS不能沒有XML。 –

+0

那麼,爲什麼OSGI會給我這個信息呢? –

0

我必須承認尼爾是對的。註釋是構建時間。即使Felix SCR人員會做出政變並試圖在運行時執行它,因爲註釋具有CLASS保留,因此除非他們解析類文件,否則不能用於運行時。

你必須看到別的東西。

+0

你可以嘗試自己。如果你想我可以給你的jar文件。 –

+0

給我鏈接... –

+0

我明白什麼是問題。我沒有'@ OsgiService'使用'@Inject'。所以POJO被注入了。 –

相關問題