Как реализовать Java-класс будущего для достижения параллелизма, чтобы вызвать сценарий оболочки для нескольких одновременных соединений
Я использую будущий класс Java для достижения параллельного программирования. Я вызываю сценарий оболочки, как показано ниже. Я вызываю функцию ниже из моего контроллера Java
String NodeResult=restartNodes(HostName);
В реализации контроллера будущего класса
public static String restartNodes(final String hostName){
ExecutorService executor = Executors.newFixedThreadPool(threadNum);
List<FutureTask<Integer>> taskList = new ArrayList<FutureTask<Integer>>();
// Start thread for the first half of the numbers
FutureTask<Integer> futureTask_1 = new FutureTask<Integer>(new Callable<Integer>() {
@Override
public Integer call() throws Exception {
restartScript(hostName);
return SUCCESS;
}
});
taskList.add(futureTask_1);
executor.execute(futureTask_1);
return "successfully done";
}
код для вызова скрипта:
public static void restartScript(String hostName) {
SSHExec ssh = null;
// Wrap the whole execution jobs into try-catch block
try {
// Initialize a ConnBean object, parameter list is ip, username,
// password
ConnBean cb = new ConnBean(IP_Add, User_Name,
Password);
ssh = SSHExec.getInstance(cb);
CustomTask ct2 = new ExecShellScript("/root/",
"./restartScript.sh",""+ hostName+"" );
// Connect to server
ssh.connect();
Result res = ssh.exec(ct2);
// Check result and print out messages.
if (res.isSuccess) {
System.out.println("Return code in success: " + res.rc);
System.out.println("sysout: " + res.sysout);
} else {
System.out.println("Return code: " + res.rc);
System.out.println("error message: " + res.error_msg);
}
} catch (TaskExecFailException ex) {
System.out.println(ex.getMessage());
ex.printStackTrace();
} catch (Exception e) {
System.out.println(e.getMessage());
e.printStackTrace();
} finally {
ssh.disconnect();
}
}
Я вызываю несколько сценариев, и я хочу, чтобы они выполнялись параллельно, но при выполнении я получаю ошибку ниже
com.jcraft.jsch.JSchException: session is down
at com.jcraft.jsch.Session.openChannel(Session.java:752)
at net.neoremind.sshxcute.core.SSHExec.exec(SSHExec.java:164)
at com.controller.UserLoginController.isNodeLive(UserLoginController.java:1620)
at com.controller.UserLoginController$3.call(UserLoginController.java:1724)
at com.controller.UserLoginController$3.call(UserLoginController.java:1)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:744)
Есть ли у них какой-либо максимальный предел для получения ssh-сессии, т.е. (параллельная сессия, так как я буду выполнять 5 таких сценариев с разной целью, и я хочу, чтобы все они пошли параллельно.) Если мы будем использовать будущий класс?