2013-10-18 101 views
0

我們在使用OSGi包中的自定義JCA實現時遇到了問題。我們的客戶不得不使用的JCA實現會導致類加載器內存泄漏。這會阻止在我們的軟件包中部署和使用它,因爲我們很快遇到了perm gen空間問題。OSGi中的JCE安全提供程序

JCA提供者提出的解決方案是將JAR放入jre/lib/ext文件夾中,但不從那裏加載。據我所知,這是因爲OSGi(Eclipse equinox)類加載器策略將引導類加載器作爲每個bundle classloader的父類,這不包括從jre/lib/ext文件夾加載的擴展類加載器。即沒有任何包會在jre/lib/ext文件夾中看到任何東西。

有沒有辦法讓Eclipse Equinox加載一個註冊爲安全提供程序的jar,只有一次,這樣所有的bundle或特定的bundle都可以看到該提供者?在這種情況下,JCA庫不能通過OSGi卸載的事實是可以容忍的。

回答

1

您應該編輯系統包並從JCA-custom.jar中添加包。

您可以通過多種方式定義應包含哪些軟件包。

  • 您爲equinox創建配置文件並定義包。您可以在eclipse.osgi jar中找到每個jdk版本的示例。例如,查找JavaSE-1.6.profile並嘗試查找條目org.osgi.framework.system.packages
  • 您可以在啓動OSGi容器時將其定義爲系統變量。系統變量相同:-Dorg.osgi.framework.system.packages = 軟件包名稱用逗號分隔
相關問題