gpt4 book ai didi

java - 终止 CycAPI Cyc 连接的首选方法是什么?

转载 作者:行者123 更新时间:2023-11-30 08:12:25 27 4
gpt4 key购买 nike

Cyc API 示例代码位于 The Cyc API example code page , System.exit() 用于终止Cyc连接。总的来说,这好像是在用木槌敲鸡蛋。是否有一种更严格的方法来终止维持 Cyc 连接的线程,以便简单地落到 main 的末尾(例如)导致程序终止?

最佳答案

(免责声明:我是 Cyc API 的开发人员之一...)

终止连接比早期版本的 Cyc Core API 更困难,但 1.0.0-rc4 版本增加了一些功能来解决这个问题。

Session API 的 SessionManager 旨在最终负责监督连接池管理。连接可以跨 session 重用,在大多数情况下,您不必担心直接创建、缓存或关闭与 Cyc 服务器的连接。基本原理是这样的:底层的 CycAccess 连接实际上是相当重量级的(创建一个可能需要 100 毫秒或更多),因此您不想随便终止它们,并且您可能不希望直接管理它们的麻烦,例如,多线程环境,如 servlet。

通常,您只需要在完成单个 CycSession 后关闭它们;一旦没有资源依赖它,SessionManager 将关闭底层连接。 CycSession 接口(interface)扩展了 java.io.Closeable,因此您可以执行以下操作:

try {
// Some calls to KB API, Query API, etc...
} finally {
CycSessionManager.getCurrentSession().close();
}

在 Java 7 及更高版本中,这意味着 CycSession 实现了 java.lang.AutoCloseable,因此您可以将它们包装在 try-with-resources 语句中:

try (CycSession session = CycSessionManager.getCurrentSession()) {
// Some calls to KB API, Query API, etc...
}

// The session has been automatically closed. The next call will return a new session:
CycSession newSession = CycSessionManager.getCurrentSession();

也可以关闭 SessionManager,强制它关闭所有 连接。这在例如退出应用程序时很有用:

public static void main(String[] args) throws IOException {
try (SessionManager sessionMgr = CycSessionManager.getInstance()) {
// Some calls to KB API, Query API, etc...
}
}

或者,您可以手动关闭它:

try {
// Some calls to KB API, Query API, etc...
} finally {
CycSessionManager.getInstance().close();
}

一旦 SessionManager 实例被关闭,它就不能再用于创建或检索 session 。但是,您可以指示 CycSessionManager 加载一个新的 SessionManager 实例:

CycSessionManager.getInstance().close();
CycSessionManager.getInstance().isClosed(); // true
CycSessionManager.reloadInstance();
CycSessionManager.getInstance().isClosed(); // false

在 CycSessionManager#reloadInstance() 之前调用 SessionManager#close() 实际上是多余的(尽管无害); reloadInstance 确保先前的 SessionManager 在替换它之前已关闭。无论如何,我通常不建议编写严重依赖重新加载 SessionManager 的代码(出于上述原因),但如果您需要它,它就在那里。

这就是它的要点。这里有更多文档:http://dev.cyc.com/api/core/session/connection-management/

关于java - 终止 CycAPI Cyc 连接的首选方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30506522/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com