From ff90daf575067cf03ea38651da14e84045268fa2 Mon Sep 17 00:00:00 2001 From: Gary Russell Date: Wed, 29 Jan 2014 17:46:06 -0500 Subject: [PATCH] INT-3280 Fix SFTP Class Tangle JIRA: https://jira.springsource.org/browse/INT-3280 --- .../session/DefaultSftpSessionFactory.java | 35 ----------- .../sftp/session/JSchSessionWrapper.java | 58 +++++++++++++++++++ .../integration/sftp/session/SftpSession.java | 3 +- 3 files changed, 59 insertions(+), 37 deletions(-) create mode 100644 spring-integration-sftp/src/main/java/org/springframework/integration/sftp/session/JSchSessionWrapper.java diff --git a/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/session/DefaultSftpSessionFactory.java b/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/session/DefaultSftpSessionFactory.java index 9bad196505..b38fbd1ae7 100644 --- a/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/session/DefaultSftpSessionFactory.java +++ b/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/session/DefaultSftpSessionFactory.java @@ -17,7 +17,6 @@ package org.springframework.integration.sftp.session; import java.util.Properties; -import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.locks.ReentrantReadWriteLock; import org.springframework.beans.factory.BeanCreationException; @@ -436,38 +435,4 @@ public class DefaultSftpSessionFactory implements SessionFactory, Share } } - /** - * A wrapper for a JSch session that maintains a channel count and - * physically disconnects when the last channel is closed. - * - */ - public class JSchSessionWrapper { - - private final com.jcraft.jsch.Session session; - - private final AtomicInteger channels = new AtomicInteger(); - - JSchSessionWrapper(com.jcraft.jsch.Session session) { - this.session = session; - } - - public void addChannel() { - this.channels.incrementAndGet(); - } - - public void close() { - if (channels.decrementAndGet() <= 0) { - this.session.disconnect(); - } - } - - public final com.jcraft.jsch.Session getSession() { - return session; - } - - public boolean isConnected() { - return session.isConnected(); - } - - } } diff --git a/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/session/JSchSessionWrapper.java b/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/session/JSchSessionWrapper.java new file mode 100644 index 0000000000..9c7852cfa6 --- /dev/null +++ b/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/session/JSchSessionWrapper.java @@ -0,0 +1,58 @@ +/* + * Copyright 2014 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.integration.sftp.session; + +import java.util.concurrent.atomic.AtomicInteger; + +import com.jcraft.jsch.Session; + +/** + * A wrapper for a JSch session that maintains a channel count and + * physically disconnects when the last channel is closed. + * + * @author Gary Russell + * @since 3.0 + * + */ +class JSchSessionWrapper { + + private final Session session; + + private final AtomicInteger channels = new AtomicInteger(); + + JSchSessionWrapper(Session session) { + this.session = session; + } + + public void addChannel() { + this.channels.incrementAndGet(); + } + + public void close() { + if (channels.decrementAndGet() <= 0) { + this.session.disconnect(); + } + } + + public final Session getSession() { + return session; + } + + public boolean isConnected() { + return session.isConnected(); + } + +} diff --git a/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/session/SftpSession.java b/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/session/SftpSession.java index aadd108ae6..a43c24fb52 100644 --- a/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/session/SftpSession.java +++ b/spring-integration-sftp/src/main/java/org/springframework/integration/sftp/session/SftpSession.java @@ -28,7 +28,6 @@ import org.apache.commons.logging.LogFactory; import org.springframework.core.NestedIOException; import org.springframework.integration.file.remote.session.Session; -import org.springframework.integration.sftp.session.DefaultSftpSessionFactory.JSchSessionWrapper; import org.springframework.util.Assert; import org.springframework.util.FileCopyUtils; @@ -67,7 +66,7 @@ class SftpSession implements Session { this.wrapper = null; } - public SftpSession(DefaultSftpSessionFactory.JSchSessionWrapper wrapper) { + public SftpSession(JSchSessionWrapper wrapper) { Assert.notNull(wrapper, "wrapper must not be null"); this.jschSession = wrapper.getSession(); this.wrapper = wrapper;