在 HCL Domino 代理中使用 okhttp3 清理代理线程时出错

问题描述 投票:0回答:1

我在 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();
        }
    
    }

}

如何解决此错误?

java xpages okhttp hcl-domino
1个回答
0
投票

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 中更复杂,但也可以在那里完成。

© www.soinside.com 2019 - 2024. All rights reserved.