0

我正在使用 SSH Maverich Library 进行 SFTP 调用,并且我使用 apache commons pool 封装了 maverick 对象和池化连接对象。

我实现了公共池工厂方法来创建对象。

当空闲对象有资格被驱逐时,如何关闭传输层连接?

工厂中的 PSdestroyObject 不起作用。Apache 公用池版本:1.6

4

2 回答 2

1

您使用的是什么版本的 J2SSH Maverick?

然而,在所有情况下,在 SshClient 上调用 disconnect 是必不可少的。或者根据版本,您可以配置空闲超时。

于 2016-03-04T10:24:52.640 回答
0

必须调用 SshClient.disconnect 和 SftpClient.quit 来关闭传输通道。

以下几点解决了我的问题。

1.使用mavericks和apache commons pool最重要的是调用正确的生命周期方法。

2.将SshClient和SftpClient封装到pool下的Object中。SshClient 和 SftpClient 必须是池下对象的实例成员。因此 BaseKeyedObjectPoolableFactory 的 destroyObject 方法是通过对象退出和断开连接来实现的。

class SFTPConnection{
private SshClient sshClient;
private SftpClient sftpClient;

------

public void destroyObject(){
sshClient.disconnect();
sftpClient.quit()
}


class SFTPConnectionFactory extends BaseKeyedObjectPoolableFactory{

----
public void destroyObject(Object Key,Object arg){

SFTPConnection sftpConnection = (SFTPConnection)arg;
sftpConnection.destroyObject():

}

}
于 2016-03-07T03:46:53.520 回答