我有一個使用OSGi在運行時加載模塊化功能的動態應用程序。 OSGi軟件包包含模塊化功能,應用程序在需要時加載軟件包。這種方法工作正常,但我想要一個更細化的解決方案。這些軟件包包含通過聲明式服務控制的組件。我希望能夠加載一個包,並且只啓用該包中所需的組件。我已經完成了這方面的研究,但是找不到我滿意的解決方案。一種方法是創建一個始終在包中啓用的「網守」組件,並通過ComponentContext讓它調用啓用和禁用組件。這是一個可行的解決方案,但我無法找到一種方法讓「網守」「瞭解」捆綁包中的其他組件,而無需將組件名稱硬編碼爲「網守」SCR xml描述符中的屬性。OSGi和組件管理
我更喜歡的是一種加載包和「瞭解」加載包中的所有組件的方法。能夠確定組件所在的組件以及它們當前處於什麼狀態(類似於列出所有組件的equinox控制檯命令'ls')。我想在需要時啓用和禁用組件。
控制檯如何執行此操作,以及如何在應用程序中執行此操作?
更新: @尼爾巴特利特:對不起,延遲。我不得不轉向別的東西。現在我回到這個問題上。真的很感激任何進一步的援助。我的應用是基於角色的。我需要根據它們提供的功能來啓用組件。目標是所有基於角色的組件最初都被禁用。在角色更改時,角色管理器會輪詢每個組件提供的功能,並確定是否加載它。每個組件將廣播它提供的功能(通過通用服務接口)。 ScrService不允許我啓用最初禁用的服務組件。讓組件最初啓用並讓ScrService在應用程序啓動期間儘快禁用它們並不符合我的需求。
是的,看門人需要知道它希望啓用/禁用的組件的ID。請記住,您也可以通過'null'來啓用/禁用包中的所有其他組件。同樣如您所知,網守只能訪問同一捆綁包中的其他組件,而不能訪問其他任何捆綁包。從「四十二」使用ScrService的建議是一個很好的建議。 –
@Toolshed你最終解決了這個問題嗎?我有與ScrService相同的問題。 –
@PabloGarcía結束了一個非常混亂的實現,它需要一個自定義的scr xml解析器。它工作正常,但遠非理想,並且爲我的定製需求而工作。 – Toolshed