如何解决使用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 举报,一经查实,本站将立刻删除。