2009-09-01 81 views
2

我有一個第三方JAR,我已經轉換爲一個OSGI捆綁使用bnd。我需要調用從我自己的捆綁使用它的代碼看起來是這樣的:OSGI - 捆綁靜態方法調用

ThirdParty.setRegKey(myRegKey); 
ThirdParty thirdParty = new ThirdParty(); 
thirdParty.callMethod(); 

什麼似乎導致我的問題是第一線 - 靜態方法調用。在OSGI容器之外,使用標準JAR,這可以正常工作。但是,在OSGI內部,我在第3行得到一個錯誤,說明沒有設置註冊密鑰。

這樣的捆綁包的靜態方法調用是否存在任何問題?這幾乎就好像靜態上下文不在捆綁包中共享。

回答

2

你調試了代碼嗎?既然你不告訴我們你正在使用哪個第三方庫,並且我們不知道你的整個環境,可能是setRegKey()callMethod()正在嘗試做一些在OSGi內部不起作用的「智能」。

JDBC驅動程序管理器在您的軟件包導入JDBC驅動程序類時出現此問題,但驅動程序管理器決定您的軟件包中的調用線程不應「看見」JDBC驅動程序類,因此在OSGi內運行時會失敗。

2

您可能需要導出/導入包含ThirdParty類的包。否則,它會在不同的類加載器中結束,因此它不會被共享。

真正的OSGi方式是通過一些服務來實現這一點。

+0

感謝您的澄清。在第三方捆綁包清單中,我有Export-Package:com.thirdparty.package,然後在我的捆綁軟件清單中導入包:com.thirdparty.package。你是這個意思嗎? – William 2009-09-01 08:43:14

+1

示例代碼表明MANIFEST導入和導出是正確的,否則他將無法編譯,並且所述問題是第三行上的運行時失敗。 – SteveD 2009-09-02 08:48:49

+0

@威廉是的。但是,如果你的代碼全部在一個包中,這不應該成爲問題。 – starblue 2009-09-02 19:35:14