我在普通Java應用程序中使用了兩個OSGi框架。這兩個框架都從共享目錄加載包。訪問OSGi捆綁資源時發生NullPointerException
在一個包中,我從資源中加載一個文件。我嘗試了不同的方式
this.getClass().getClassLoader().getResourceAsStream(...)
FrameworkUtil.getBundle(XXX.class).getEntry(...)
FrameworkUtil.getBundle(XXX.class).getResource(...)
但是,我使用哪個命令並不重要,它在開始時都工作正常。但是,在兩個框架中進行了幾次安裝和卸載步驟之後。返回的InputStream爲null。
如果只使用一個OSGi框架,我也可以正常工作。
調試一點後,我發現,捆綁帶
FrameworkUtil.getBundle(XXX.class)
指向正確的jar文件了,但是當我看到在捆綁的BundleData引用包文件,它引用了另一個捆綁包的捆綁文件。 bundlefiles是OSGi框架的臨時文件(在我的情況下爲Equinox),例如可以在本地Maven存儲庫中找到:
.m2 \ repository \ org \ eclipse \ osgi \ org.eclipse.osgi \ 3.6 .0.v20100517 \ configuration \ org.eclipse.osgi \ bundles \ 29 \ 1
任何人都有一個想法這裏有什麼可能是錯的?
設置不同的配置directoy每個框架,e.g我從包代碼本身加載包的資源。因此,在資源訪問時,該包已解析並具有有效的類加載器。這些問題源於OSGi創建的配置文件。在每個配置文件中,OSGi都會將資源的文件名保存在其他內容中。如果兩個框架使用相同的配置目錄,則可以覆蓋其配置文件,導致缺少資源條目。另見我對這個問題的回答。無論如何謝謝你考慮可能的原因! – user1488793
當您運行框架的多個實例時,您需要爲每個框架使用不同的存儲位置。見http://www.osgi.org/javadoc/r4v43/core/org/osgi/framework/Constants.html#FRAMEWORK_STORAGE –
設置org.osgi.framework.storage以及osgi.configuration.area工作正常 – user1488793