我有一個Swing
項目使用Spring
爲DI,現在我正試圖遷移到Eclipse 4
和OSGi
。
使用Spring
的配置文件,用戶可以註釋/取消註釋bean以添加/刪除功能(由這些後端bean提供)。
現在Eclipse
和OSGi
我正在尋找最好的方法來做到這一點根據OSGi
。
我知道我可以使豆類服務和OSGi
定義啓動級別,但是這並沒有解決我的使用情況下,它是:
應用程序啓動沒有這些豆子/模塊的運行,如果用戶更新配置從正在運行的UI中,這些beans/modules啓動,並且它們也在應用程序的下一次啓動時啓動。
對我的問題有一個很好的/乾淨的方法嗎?如何以良好的方式從Spring DI遷移到OSGi DI?
回答
就像你已經發現了服務是一個很好的方法來解決這個問題。只需安裝所有模塊,但不要啓動它們。然後,當用戶選擇他想要的功能時,您的用戶界面可以啓動和停止模塊。然後,OSGi框架會在重新啓動時記住已安裝和已啓動的模塊。
您可能想要使用Eclipse Gemini Blueprint來管理Spring和OSGi之間如何整合所有東西(雙子座藍圖是Spring Dynamic Modules的後繼者)。特別是,它可以爲您處理與動態服務註冊相關的所有複雜問題;你的豆可以保持幾乎相同。
另一種方法是使用Declarative Services和Configuration Admin一起使配置數據確定要激活哪些服務。 In more detail here。
絕對最佳方法是聲明式服務(DS)。 DS與OSGi的配置管理集成在一起,使得控制服務實例的數量以及它們的配置和服務屬性變得微不足道。例如,下述成分(與BND註釋[不久將類似於在OSGi規範類似的功能):
@Component(designateFactory=Config.class)
public MyComp implements MyService {
interface Config {
int port();
String host();
}
Config config;
@Activate
void activate(Map<String,Object> map) {
config = Configurable.createConfigurable(Config.class,map);
start();
}
void foo() { ... do the MyService stuff ... }
@Reference
void setDataSource(DataSource ds) { ... }
}
該組件要求一個配置管理工廠配置。瞭解這種功能的最佳方式是使用Apache Felix Webconsole設置框架。 designateFactory=Config.class
告訴bnd在該包中創建一個元類型 XML文件。 Webconsole使用它來爲配置數據創建一個非常漂亮的外觀,從接口及其方法派生。這種形式是類型識別的,即不能輸入端口號的非數值。通過webconsole,您現在可以通過創建多個工廠配置來實例化多個組件。刪除這些工廠配置,刪除服務。在您的應用程序中,您可以在用戶的控制下自行操作Configuration Admin。
另一個優點是,通過Configuration Admin,您可以控制組件依賴關係的綁定。在上述示例中,您可以將dataSource.target
屬性設置爲像(db=accounting)
這樣的過濾器來選擇記帳數據庫。所有配置屬性都作爲服務屬性添加,因此您可以在創建數據源的配置(如果以此方式實現)上輕鬆設置'db'服務屬性。
這是DS最不理解的優點之一,我可以告訴你這是巨大的。要開始這個,只需在bndtools中創建一個DS項目,然後新建一個Run Descriptor並選擇Webconsole模板。
DS的另一個優點是它很小,並且不會試圖隱藏動態,這在Blueprint中可能會很痛苦。
- 1. 如何使用Spring的DI
- 2. 在Spring DI
- 3. JSR330 DI與彈簧DI
- 4. Factory class vs Spring DI
- 5. 在良好的架構方面使用DI(Dagger)的好例子是什麼?
- 6. ModelMap DI上的StructureMap DI
- 7. 如何以正確的方式使用Auryn進行DI?
- 8. 移過程中的div
- 9. 從jsp訪問Spring MVC DI bean
- 10. 如何使用DI
- 11. 如何通過DI
- 12. DI創建模式
- 13. 從任何地方訪問DI容器
- 14. 與DI
- 15. 使WCF OperationContext與DI良好地協作並測試
- 16. PHP DI容器
- 17. 與Cors的WebApi2衝突的Unity DI DI
- 18. ActionAttribute DI
- 19. 瞭解DI
- 20. 將Ninject DI轉換爲Unity DI
- 21. Heroku Youtube-DI頁
- 22. 從JCA遷移到OSGI這是一個好主意嗎?
- 23. INotifyPropertyChanged:AoP或IoC/DI?
- 24. 靜態方法是DI反模式嗎?
- 25. 如何從parse.com遷移到好友?
- 26. DI和IOC在spring mvc中的實現
- 27. Spring DI演示中的ClassNotFoundException問題
- 28. CakePHP良好的數據庫遷移?
- 29. 如何以良好的方式從UI元素創建對象?
- 30. DI使用Ninject