gpt4 book ai didi

java - 如何在 Java 中设置与 jackrabbit 存储库的连接超时

转载 作者:太空宇宙 更新时间:2023-11-04 07:14:44 25 4
gpt4 key购买 nike

我需要浏览 JackRabbit 存储库。我使用以下代码进行连接:

Repository repository = JcrUtils.getRepository(url);
SimpleCredentials credentials = new SimpleCredentials(user, password.toCharArray());
session = repository.login(credentials, workspace);

但是,如果由于某种原因某些参数不正确,我的 web 应用程序将会卡住。我需要做的是设置一个超时连接(比如 30 秒),但我在 jcr API 中找不到任何方法。
关于如何做到这一点的任何建议或代码示例?

PS:我使用的jackrabbit版本是2.2.10。

最佳答案

因此,我设法使用 FutureTask 添加连接超时。
我创建了一个实现 Callable 接口(interface)的类,并在 call() 方法中放置了连接逻辑:

public class CallableSession implements Callable<Session> {

private final String url;
private final String user;
private final String password;
private final String workspace;

public CallableSession(String url, String user, String password, String workspace) {
this.url = url;
this.user = user;
this.password = password;
this.workspace = workspace;
}

@Override
public Session call() throws Exception {

Repository repository = JcrUtils.getRepository(url);
SimpleCredentials credentials = new SimpleCredentials(user, password.toCharArray());
Session session = repository.login(credentials, workspace);

return session;
}

接下来,在 getSession() 函数内的连接器类中,我创建了一个 FutureTask,执行它并设置连接超时:

public Session getSession() {

if (session == null) {
try {
CallableSession cs = new CallableSession(url, user, password, workspace);
FutureTask<Session> future = new FutureTask<Session>(cs);
ExecutorService executor = Executors.newSingleThreadExecutor();
executor.execute(future);
session = future.get(CONNECTION_TIMEOUT, TimeUnit.MILLISECONDS);

} catch (InterruptedException ex) {
Logger.getLogger(JackRabbitConnector.class.getName()).log(Level.SEVERE, null, ex);
} catch (ExecutionException ex) {
Logger.getLogger(JackRabbitConnector.class.getName()).log(Level.SEVERE, null, ex);
} catch (TimeoutException ex) {
Logger.getLogger(JackRabbitConnector.class.getName()).log(Level.SEVERE, null, ex);
}
}
return session;
}

关于java - 如何在 Java 中设置与 jackrabbit 存储库的连接超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20120753/

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