OSGi组件工厂对象创建两次虽然karaf实例被杀死

时间:2016-06-26 15:12:12

标签: java osgi osgi-bundle

我在我的项目中使用OSGi组件工厂概念,它按预期工作。请找到我已经完成的步骤。

步骤:

  1. 使用ssh命令登录karaf [因为它不是root用户所以我在karaf中创建了一个实例]。

  2. 执行scr:list。它显示我已部署的服务。由于我使用过组件工厂,因此对象是由OSGi框架创建的 并按预期工作。

  3. 使用"关闭"关闭karaf命令。
  4. 使用ssh命令再次登录karaf。
  5. 执行scr:list后,对象被复制。即对象再创建一次,并显示两次。
  6. 当shutdown karaf停止时,调用deactivate方法并且相应的java进程被杀死。 一旦我再次启动karaf进程,就会创建一个新进程[我通过检查java进程的PID验证了相同]。 我出于以下原因提出了这个问题

    1. 由于我正在使用组件工厂,因此应自动处理内存管理。即) 如果我关闭,karaf实例对象应该被释放并被垃圾收集。
    2. 虽然我的应用程序设计很差,但在关闭java进程后scr:list不应该显示两次对象。即)java进程关闭后 应清除相应的内存。最终它不应该影响新创建的过程。
    3. 环境:RHEL 6.5

      Apache-karaf:3.0.3

      JRE:1.7-u 79

1 个答案:

答案 0 :(得分:1)

这可能是一个已知的错误。我假设您正在使用功能文件创建默认配置?在托管服务工厂的当前karaf版本中,这似乎已被打破。因此,如果是这种情况,则避免在要素文件中定义默认配置。