OSGi中的JCE安全提供程序

时间:2013-10-18 11:52:15

标签: java osgi jce

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

JCA提供程序提出的解决方案是将JAR放在jre / lib / ext文件夹中,但不会从那里加载。据我所知,这是因为OSGi(Eclipse equinox)类加载器策略将引导类加载器作为每个bundle类加载器的父类,它排除了从jre / lib / ext文件夹加载的扩展类加载器。即没有bundle在jre / lib / ext文件夹中看到任何内容。

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

1 个答案:

答案 0 :(得分:1)

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

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

  • 您可以为equinox创建配置文件并定义包。您可以在eclipse.osgi jar中找到每个jdk版本的示例。例如,查找JavaSE-1.6.profile并尝试查找条目org.osgi.framework.system.packages
  • 启动OSGi容器时,可以将其定义为系统变量。系统变量是相同的:-Dorg.osgi.framework.system.packages = 包名以逗号分隔