我正在使用 SSH Maverich Library 进行 SFTP 调用,并且我使用 apache commons pool 封装了 maverick 对象和池化连接对象。
我实现了公共池工厂方法来创建对象。
当空闲对象有资格被驱逐时,如何关闭传输层连接?
工厂中的 PSdestroyObject 不起作用。Apache 公用池版本:1.6
我正在使用 SSH Maverich Library 进行 SFTP 调用,并且我使用 apache commons pool 封装了 maverick 对象和池化连接对象。
我实现了公共池工厂方法来创建对象。
当空闲对象有资格被驱逐时,如何关闭传输层连接?
工厂中的 PSdestroyObject 不起作用。Apache 公用池版本:1.6
您使用的是什么版本的 J2SSH Maverick?
然而,在所有情况下,在 SshClient 上调用 disconnect 是必不可少的。或者根据版本,您可以配置空闲超时。
必须调用 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():
}
}