그래서 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;
}
다음, 나는
FutureTask
을 만들어
getSession()
함수 내에서 내 커넥터 클래스에서, 그것을 실행 넣어
거기 연결 시간 초과 :
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;
}