我在 Notes 代理中使用 okhttp3,每次运行时,我都会在控制台中收到消息“清理代理线程时出错”。
如果我在 Notes 14 客户端或 Domino 服务器 12.02.FP2 上运行代理,我会收到相同的消息。 jar 文件位于 jar 设计对象中
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
public class JavaAgent extends AgentBase {
OkHttpClient client;
public void NotesMain() {
try {
Session session = getSession();
AgentContext agentContext = session.getAgentContext();
client = new OkHttpClient();
Response response = null;
Request request = new Request.Builder().url("https://www.cnn.com").build();
try {
response = client.newCall(request).execute();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (response != null) {
response.close();
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
如何解决此错误?
IME 如果在代理中运行的代码中创建新线程,则必须在代理结束之前清理它们,否则您会收到确切的错误消息。忽略此消息足够长的时间将会导致服务器瘫痪。
如果您使用一些第三方事物来创建新线程,但不清理它们,您可以调查一下是否可以提供自己的线程并自己进行清理。
我不知道 okhttp3 或是否有 okhttp3 的方法,但类似的东西多年来一直在特定的第三方库中运行良好,在 Domino v9 到 v12 上运行的代理中:
ExecutorService executorService = null;
try {
Thing thing = Thing.getInstance();
if (thing.hasThingsToDo()) {
executorService = Executors.newFixedThreadPool(4);
thing.setThreadExecutor(executorService);
thing.doThings();
}
} finally {
if (executorService != null) {
executorService.shutdownNow();
executorService.awaitTermination(3, TimeUnit.SECONDS);
}
}
PS。在 XPage 中更复杂,但也可以在那里完成。