1

在我们的 OSGi 包中使用自定义 JCA 实现时遇到问题。我们被客户强制使用的 JCA 实现会导致类加载器内存泄漏。这会阻止在我们的包中部署和使用它,因为我们很快就会遇到 perm gen 空间问题。

JCA 提供者建议的解决方案是将 JAR 放在 jre/lib/ext 文件夹中,但不会从那里加载。据我所知,这是由于 OSGi(Eclipse Equinox)类加载器策略将引导类加载器作为每个捆绑类加载器的父级,不包括从 jre/lib/ext 文件夹加载的扩展类加载器。即没有包在 jre/lib/ext 文件夹中看到任何东西。

有没有办法让 Eclipse Equinox 加载一个注册为安全提供者的 jar,只加载一次,这样所有包或特定包都可以看到该提供者?在这种情况下,可以容忍 JCA 库不是通过 OSGi 卸载的事实。

4

1 回答 1

1

您应该编辑系统包并从 JCA-custom.jar 添加包。

您可以通过多种方式定义应包含哪些包。

  • 您为 Equinox 创建配置文件并定义包。您可以在 eclipse.osgi jar 中找到每个 jdk 版本的示例。例如,查找 JavaSE-1.6.profile 并尝试查找条目 org.osgi.framework.system.packages
  • 您可以在启动 OSGi 容器时将其定义为系统变量。系统变量是一样的: -Dorg.osgi.framework.system.packages=包名用逗号隔开
于 2013-10-18T15:37:28.897 回答