如何关闭使用Apache Commons Pool的SSH Maverick Connection对象

时间:2016-03-03 17:05:27

标签: apache ssh apache-commons-pool

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

我实现了commons pool Factory方法来创建对象。

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

工厂中的P.S.destroyObject不起作用。 Apache commons pool版本:1.6

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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

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

1.使用apache commons池中的小牛最重要的是调用适当的生命周期方法。

2.将SshClient和SftpClient封装到池下的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():

}

}