我使用SSH Maverich Library进行SFTP调用,并使用apache commons pool封装了maverick对象和池连接对象。
我实现了commons pool Factory方法来创建对象。
当空闲对象有资格驱逐时,如何关闭传输层连接?
工厂中的P.S.destroyObject不起作用。 Apache commons pool版本:1.6
答案 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():
}
}