【问题标题】:How can I destroy all OSGi blueprint components before the OSGi framework is stopped?如何在 OSGi 框架停止之前销毁所有 OSGi 蓝图组件?
【发布时间】:2018-10-15 16:53:04
【问题描述】:

如果我停止 OSGi 框架,OSGi 蓝图组件不会被销毁(不会调用销毁方法)。为什么会这样,我该如何摧毁它们。我有自己的 OSGi 启动器实现。我正在使用关闭挂钩,然后停止 OSGi 框架:

Runtime.getRuntime().addShutdownHook(new Thread() {
    @Override
    public void run() {
        Launcher.logService.log(LogService.LOG_WARNING, "HANDLE SHUTDOWN");
        if(Launcher.framework != null) {
            try {
                Launcher.framework.stop();
            } catch (BundleException e) {
                Launcher.logService.log(LogService.LOG_ERROR, "Shutdown" + ((Launcher.framework != null) ? " of " + Launcher.framework.getSymbolicName() + " " : " ") + "failed!", e);
                System.exit(-1);
            }
        }
    }
});

【问题讨论】:

    标签: java osgi blueprint-osgi


    【解决方案1】:

    我们应该等待框架停止。

    Runtime.getRuntime().addShutdownHook(new Thread() {
        @Override
        public void run() {
            Launcher.logService.log(LogService.LOG_WARNING, "HANDLE SHUTDOWN");
            if(Launcher.framework != null) {
                try {
                    Launcher.framework.stop();
                    Launcher.framework.waitForStop(0); // !!!
                } catch (BundleException e) {
                    Launcher.logService.log(LogService.LOG_ERROR, "Shutdown" + ((Launcher.framework != null) ? " of " + Launcher.framework.getSymbolicName() + " " : " ") + "failed!", e);
                    System.exit(-1);
                }
            }
        }
    });
    

    【讨论】:

      猜你喜欢
      • 2018-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多