簡體   English   中英

如何在Java中設置與Jackrabbit存儲庫的連接超時

[英]How to set a connection timeout to a jackrabbit repository in Java

我需要瀏覽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接口的類,並在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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM