[KARAF-5286] Create key in background
Project: http://git-wip-us.apache.org/repos/asf/karaf/repo Commit: http://git-wip-us.apache.org/repos/asf/karaf/commit/3b7aef86 Tree: http://git-wip-us.apache.org/repos/asf/karaf/tree/3b7aef86 Diff: http://git-wip-us.apache.org/repos/asf/karaf/diff/3b7aef86 Branch: refs/heads/OPENSSH Commit: 3b7aef86299767db3e2610688321af5b46800772 Parents: 0c76347 Author: Christian Schneider <[email protected]> Authored: Thu Aug 3 13:52:51 2017 +0200 Committer: Christian Schneider <[email protected]> Committed: Thu Aug 3 15:53:23 2017 +0200 ---------------------------------------------------------------------- .../org/apache/karaf/shell/ssh/Activator.java | 28 +++++++++++++------- 1 file changed, 18 insertions(+), 10 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/karaf/blob/3b7aef86/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/Activator.java ---------------------------------------------------------------------- diff --git a/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/Activator.java b/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/Activator.java index fd5458a..1006af7 100644 --- a/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/Activator.java +++ b/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/Activator.java @@ -24,6 +24,8 @@ import java.nio.file.Path; import java.nio.file.Paths; import java.security.KeyPair; import java.util.Collections; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; import org.apache.karaf.shell.api.action.lifecycle.Manager; import org.apache.karaf.shell.api.console.CommandLoggingFilter; @@ -63,6 +65,7 @@ public class Activator extends BaseActivator implements ManagedService { ServiceTracker<Session, Session> sessionTracker; SessionFactory sessionFactory; SshServer server; + ExecutorService executor = Executors.newSingleThreadExecutor(); @Override protected void doOpen() throws Exception { @@ -110,16 +113,21 @@ public class Activator extends BaseActivator implements ManagedService { sessionFactory = sf; sessionFactory.getRegistry().getService(Manager.class).register(SshAction.class); if (Boolean.parseBoolean(bundleContext.getProperty("karaf.startRemoteShell"))) { - server = createSshServer(sessionFactory); - this.bundleContext.registerService(SshServer.class, server, null); - if (server == null) { - return; // can result from bad specification. - } - try { - server.start(); - } catch (IOException e) { - LOGGER.warn("Exception caught while starting SSH server", e); - } + // Start server in background as key generation might take some time + executor.submit(() -> createAndRunSshServer()); + } + } + + private void createAndRunSshServer() { + server = createSshServer(sessionFactory); + this.bundleContext.registerService(SshServer.class, server, null); + if (server == null) { + return; // can result from bad specification. + } + try { + server.start(); + } catch (IOException e) { + LOGGER.warn("Exception caught while starting SSH server", e); } }
