2011-12-21 62 views
4

當我使用OSGi聲明式服務方法在片段內創建組件時,此組件未激活,但主機捆綁中的組件被激活。 我錯過了什麼嗎?我的分段具有正確的meta-inf文件條目用於主機捆綁符號名稱。從未激活片段內的組件

我這樣一個聲明及部件

@Component(immediate = true) 
+0

我也有在片段指定成品的配件一個bnd.bdn。我必須爲bnd文件中的片段組件指定更多內容嗎? – Questionevrything 2011-12-21 16:19:49

回答

6

由於束片段從來沒有開始,只有解決,聲明式服務在這些部件不會被激活。該規範特別指出,片段中的Service-Component頭(這是註釋轉換爲的內容)將被忽略。

您可以使聲明式服務適用於碎片,但只能通過引用主機中Service-Component頭中碎片中的XML文件。令人遺憾的是,讓主機包知道片段中的內容可能與之後的架構模式相反。我甚至不確定這樣的安排是否可能使用SCR註釋。一種選擇是使用藍圖來聲明從碎片註冊服務,這確實有效。有一個藍圖教程可在http://aries.apache.org/documentation/tutorials/blueprinthelloworldtutorial.html

-

Enterprise OSGi in Action: www.manning.com/cummins

+0

感謝您的回覆。我認爲我沒有通過將服務組件保留在一個片段中來做正確的設計。 – Questionevrything 2011-12-21 18:22:33

+0

這將有助於理解你爲什麼試圖在一個片段中開始做這件事。碎片的用例非常有限,所以最好發表一個問題來描述導致你使用它們的原始問題;也許我們可以找到更好的解決方案。 – 2011-12-23 00:18:46