在我们的 OSGi 包中使用自定义 JCA 实现时遇到问题。我们被客户强制使用的 JCA 实现会导致类加载器内存泄漏。这会阻止在我们的包中部署和使用它,因为我们很快就会遇到 perm gen 空间问题。
JCA 提供者建议的解决方案是将 JAR 放在 jre/lib/ext 文件夹中,但不会从那里加载。据我所知,这是由于 OSGi(Eclipse Equinox)类加载器策略将引导类加载器作为每个捆绑类加载器的父级,不包括从 jre/lib/ext 文件夹加载的扩展类加载器。即没有包在 jre/lib/ext 文件夹中看到任何东西。
有没有办法让 Eclipse Equinox 加载一个注册为安全提供者的 jar,只加载一次,这样所有包或特定包都可以看到该提供者?在这种情况下,可以容忍 JCA 库不是通过 OSGi 卸载的事实。