簡體   English   中英

在停止OSGi框架之前,如何銷毀所有OSGi藍圖組件?

[英]How can I destroy all OSGi blueprint components before the OSGi framework is stopped?

如果我停止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);
            }
        }
    }
});

我們應該等待框架停止。

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);
            }
        }
    }
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM