2014-05-11 79 views
0

我讀其中一個有趣的評論已取得「OGSI在行動」:OSGi包安裝自舉

「模塊層使用捆綁的元數據,以確保所有的依賴性得到滿足,然後才能使用它們。當你想使用捆綁包時,這種共生關係會產生一種雞與雞蛋的情況;要使用一個捆綁包,你必須安裝它,但要安裝一個捆綁軟件包,你必須有一個捆綁上下文,這些捆綁上下文只能被捆綁。 「

本書在解釋捆綁軟件依賴解決方案方面做了大量工作,但上面描述的「雞肉和雞蛋」方案並沒有進一步探索。要安裝捆綁包,需要BundleContext,它僅提供給捆綁包。那麼誰創建了第一個「引導」包?這是否包含在提供的「shell」中(使用packageAdmin?)? PackageAdmin有 Bundle getBundle(Class clazz);

和Bundle可以提供BundleContext,但捆綁必須先安裝...等等! 這是如何工作的?

回答

0

Bundle.getBundleContext()的的Javadoc:

如果這摞不處於起動,ACTIVE,或停止狀態或 此包是一個片段束,那麼這束具有不有效的 BundleContext。如果此包沒有 有效的BundleContext,則此方法將返回null。

我不知道這本書的作者是怎麼想的。如果您以編程方式安裝軟件包,則可以通過其他軟件包的軟件包上下文進行安裝。

儘管我很尊敬,但我覺得這段話是錯誤的。在系統捆綁的情況下,這個「雞和蛋」的哲學問題可能會被提出。但是,我不認爲回答這個不必要的問題會讓那些想要開始使用OSGi的讀者更好地理解。

1

請參閱Framework Launching API,它爲啓動程序提供了訪問系統包的Bundle上下文以安裝「第一」包的功能。