我目前適配現有的Java應用程序,通過把它變成一個基於插件的系統。這是一個基於Spring MVC的Web服務,它提供各種服務。我打算讓這些服務可插拔,由OSGi捆綁提供。我已經有所有提供這些服務的OSGi捆綁軟件,這些服務由maven-bundle-plugin
創建。
我做了什麼
我決定嵌入一個OSGi框架(Apache的菲利克斯)到使用OSGi R4 API我的應用程序,可以將其作爲一個Maven依賴性:
<dependency>
<groupId>org.apache.felix</groupId>
<artifactId>org.apache.felix.framework</artifactId>
<version>4.2.1</version>
</dependency>
初始化它:
FrameworkFactory frameworkFactory = ServiceLoader
.load(FrameworkFactory.class).iterator().next();
Map<String, String> config = new HashMap<String, String>();
config.put(FelixConstants.LOG_LEVEL_PROP, Integer.toString(Logger.LOG_DEBUG));
this.framework = frameworkFactory.newFramework(config);
this.framework.init();
this.context = framework.getBundleContext(); // keep ref to context
安裝通過上下文中的所有包:
context.installBundle(jarPath)
和啓動框架:
framework.start();
我然後檢查所有包的狀態和所有的除了框架具有INSTALLED
狀態。該框架包是ACTIVE
。
很明顯,安裝的捆綁包沒有解決。
問題
當菲利克斯想嘗試解決包?從我從OSGi生命週期中瞭解到的情況來看,解決方案會自動發生。但我不知道費利克斯是否試圖解決捆綁。即使我將日誌級別配置爲DEBUG,它也不會打印任何日誌。如果我能看出爲什麼某個軟件包無法解析(即Felix能告訴我哪些軟件包丟失了?),那麼調試我的設置就很容易了。
不,Felix在安裝時不會自動解析捆綁包。事實上,它絕對不會違反規範,並會破壞OSGi中的許多東西。 –
另外,啓動級別在這裏並不重要,因爲沒有捆綁包啓動。開始級別不會導致數據包奇蹟般地啓動,它只是控制啓動指令生效的順序。 –
你說得對,尼爾。感謝您的更正。關於開始級別,捆綁開始級別是否低於系統級別會導致框架啓動相關捆綁包? – ilikeorangutans