微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用HCL Domino NotesThread时将忽略Java关闭挂钩?

如何解决使用HCL Domino NotesThread时将忽略Java关闭挂钩?

我目前正在用Java开发基于Vaadin的程序,该程序将从Domino数据库提取文档并将其写入MongoDB集合。该程序运行正常,但有一个小缺陷:

目前,我找不到其他方法来停止程序,而是将“ KILL”发送到进程。我的关闭挂钩/信号处理程序被完全忽略。我已将问题缩小为一行代码

NotesThread.sinitThread();

当我删除此行时,该钩子可以正常工作,并且我的程序已正确关闭。当插入行时,永远不会调用该钩子。

这是一些示例代码

private boolean running = true;

...

@Override
public void run() {
    try {
        NotesGC.runWithAutoGC(() -> {
            NotesThread.sinitThread() // --> "Kills" all signal handling
            Session session = NotesFactory.createSession();
            
            while (running) {
                Thread.sleep(1000);
                System.out.println("Running ...");
            }

            session.recycle();

            return null;
        });
    } catch (Exception e) {
    } finally {
        NotesThread.stermThread();
    }
}

public void kill() {
        System.out.println("Killed!");
        this.running = false;
}

...

Signal.handle(new Signal("TERM"),sig -> runner.kill()); // Signal handler from main-method

我问过朋友和同事,没有人遇到过同样的问题。

解决方法

NotesGC.runWithAutoGC 如我所见,您正在使用Domino JNA,一个辅助项目。 它使用多米诺骨牌CAPI。 它是开源的:https://github.com/klehmann/domino-jna 您可以创建问题单或提出问题。 顺便说一句,函数“ runWithAutoGC”在他的体内调用了initThread()。 此源代码链接:https://github.com/klehmann/domino-jna/blob/master/domino-jna/src/main/java/com/mindoo/domino/jna/gc/NotesGC.java

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。