When the code below is complete, netstat -a|grep sftp shows an open SFTP connection. It also appears as an open connection in JProfiler.
channel.isConnected() in the finally block prints false. Any ideas why the connections are not closing as I am at a loss?
public static void clean() { com.jcraft.jsch.ChannelSftp channel = null; try { channel = Helper.openNewTLSftpChannel(); channel.connect(); channel.cd(remoteFileDirectory); List<ChannelSftp.LsEntry> list = channel.ls("*." + fileType); for (ChannelSftp.LsEntry file : list) { String fileName = file.getFilename(); DateTime fileDate = new DateTime(parseDateFromFileName(fileName)); //if this file is older than the cutoff date, delete from the SFTP share if (fileDate.compareTo(cleanupCutoffdate) < 0) { channel.rm(fileName); } } } catch (Exception exception) { exception.printStackTrace(); } finally { if (channel != null) { channel.disconnect(); System.out.println(channel.isConnected()); } } }
Adding openNewTLSftpChannel() below:
public static ChannelSftp openNewSftpChannel(String privateKeyFileName, String password, String username, String host, int port) throws ConfigurationErrorException { JSch jsch = new JSch(); File sftpPrivateFile = new File(privateKeyFileName); Channel channel; try { if (!sftpPrivateFile.canRead()) { throw new ConfigurationErrorException("File access error: " + sftpPrivateFile.getAbsolutePath()); } jsch.addIdentity(sftpPrivateFile.getAbsolutePath(), password); Session session = jsch.getSession(username, host, port); java.util.Properties config = new java.util.Properties(); config.put("StrictHostKeyChecking", "no"); session.setConfig(config); session.connect(); channel = session.openChannel("sftp"); } catch (JSchException jschException) { throw new ConfigurationErrorException("File access error: " + sftpPrivateFile.getAbsolutePath()); } return (ChannelSftp) channel; }
source share