It seems that the channel close causes the session to close as well.

I will see if I can work up a simple, short, contained example and open a
defect.

Claude

On Thu, Nov 17, 2016 at 9:23 PM, Guillaume Nodet <gno...@apache.org> wrote:

> It's a valid use case and it should work.
>
> However, if you stack your sessions for too long, the client or server may
> consider the session idle for too long and close it.
> Before reusing the session, check the session state with a call isOpen().
> You can change the timeout on the client or server (if using sshd) with the
> following code.  The default value is FactoryManager.DEFAULT_IDLE_TIMEOUT
> with
> is 10 minutes.
>
> final long idleTimeoutValue = TimeUnit.SECONDS.toMillis(5L);
> PropertyResolverUtils.updateProperty(sshd,
> FactoryManager.IDLE_TIMEOUT, idleTimeoutValue);
>
>
> 2016-11-17 15:57 GMT+01:00 Claude Warren <cla...@xenei.com>:
>
> > I am attempting to create a client session and then use it to send
> multiple
> > commands.  Is this possible?
> >
> > {noformat}
> >
> >            ConnectFuture connect = client.connect(cred.getUserName(),
> >                     socketAddress);
> >             if (connect.await(10000)) {
> >                 session = connect.getSession();
> >                 if (session != null) {
> >                     session.addPasswordIdentity(cred.getPassword());
> >                     AuthFuture future = session.auth();
> >                     future.await(config.getConnectionTimeout());
> >                     if (future.isFailure()) {
> >                         if (LOG.isDebugEnabled()) {
> >                             LOG.debug(String.format(
> >                                     "Login to %s with id '%s' failed",
> >                                     socketAddress, cred.getUserName()));
> >                             session.close(false);
> >                         }
> >                     } else {
> >
> >                         return session;
> >                     }
> >                 } else {
> >                     LOG.info(String.format("Unable to create session with
> > %s",
> >                             socketAddress));
> >                 }
> >
> >  === snip ===
> >
> >               ClientChannel channel =
> > session.createChannel(Channel.CHANNEL_EXEC,
> >                         command.getSend());
> >                 ByteArrayOutputStream out = new ByteArrayOutputStream();
> >                 ByteArrayOutputStream err = new ByteArrayOutputStream();
> >                 channel.setOut(out);
> >                 channel.setErr(err);
> >
> >                 channel.open().await(10000);
> >                 channel.waitFor(EnumSet.of(ClientChannelEvent.CLOSED),
> 0);
> >
> > {noformat}
> >
> > Basically I call the first part to create the session and then execute
> the
> > command in the second part.  I process the results and depending on
> output
> > I run other commands by calling the second part again. (same session,
> and I
> > have closed the previous channel).
> >
> > The issue I see is that the session is closed when the channel is closed.
> > The implementation is using the NIO2 packages.
> >
> > I am not certiain if this is a bug,
> > a misconfiguraiton on my part,
> > or patently not possible.
> >
> > Any assistance would be appreciated.
> >
> > Claude Warren
> > --
> > I like: Like Like - The likeliest place on the web
> > <http://like-like.xenei.com>
> > LinkedIn: http://www.linkedin.com/in/claudewarren
> >
>
>
>
> --
> ------------------------
> Guillaume Nodet
> ------------------------
> Red Hat, Open Source Integration
>
> Email: gno...@redhat.com
> Web: http://fusesource.com
> Blog: http://gnodet.blogspot.com/
>



-- 
I like: Like Like - The likeliest place on the web
<http://like-like.xenei.com>
LinkedIn: http://www.linkedin.com/in/claudewarren

Reply via email to