Попытка sftp localhost с использованием spring/java

У меня есть многоступенчатая весенняя пакетная работа. Последний из которых является шагом sftp. Я пытаюсь выполнить модульное тестирование всей работы (я знаю, что могу выполнять модульное тестирование каждого шага, но в любом случае мне придется столкнуться с этой проблемой). Я определил тестовый профиль в контексте своего приложения, который содержит bean-компоненты, которые я использую для тестирования. Мой нетестовый sftp успешно работает и корректно передает файлы. Тем не менее, при попытке использовать локальный хост для тестирования что-то идет не так. Я читал подобные вопросы, такие как Использование Apache Mina в качестве фиктивного/в памяти SFTP-сервера для модульного тестирования, что было полезно, но не совсем то, что я ищу.

Что в настоящее время происходит, когда я запускаю свой тест, так это то, что программа останавливается, когда достигает следующей строки в моем коде:

sftpChannel.send(message);

Приложение все еще работает, но по отладке я вижу, что ничего не происходит.

Моя проблема не связана с подключением, как показывают мои журналы:

2813 [main] INFO com.jcraft.jsch  - Connecting to localhost port 9000
2813 [main] INFO com.jcraft.jsch  - Connection established

Вот мой код sftp из контекста моего приложения:

    <bean id="sftpSessionFactory" class="org.springframework.integration.sftp.session.DefaultSftpSessionFactory">
        <property name="host" value="localhost"/>
        <property name="user" value="user"/>
        <property name="password" value="password"/>
        <property name="port" value="9000"/>
    </bean>

    <int:channel id="outputChannel" />

    <int-sftp:outbound-channel-adapter id="sftpOutboundAdapter"
         session-factory="sftpSessionFactory"
         channel="outputChannel"
         charset="UTF-8"
         remote-directory="testFolder/ftp"
         remote-filename-generator="fileNameGenerator"
        />

    <bean id="fileNameGenerator" class="org.springframework.integration.file.DefaultFileNameGenerator"/>

Любые идеи, почему мой файл не доставляется?

Заранее спасибо!

ОБНОВЛЕНИЕ

Позвольте мне добавить больше кода... Мой весенний пакетный шаг просто вызывает тасклет, который принимает:

p:sftpChannel-ref="outputChannel"

Мой тасклет устанавливает sftpChannel следующим образом

public void setSftpChannel(MessageChannel sftpChannel) {
    this.sftpChannel = sftpChannel;
}

Проведя еще несколько исследований, моя проблема, безусловно, заключается в том, что MessageChannel блокируется на неопределенный срок, что задокументировано в весенних документах здесь

По какой-то причине, когда я использую перегруженный метод send(Message, long), он по-прежнему блокируется на неопределенный срок, даже когда он достигает времени, которое я указываю в long.

У меня остается вопрос, почему блокируется MessageChannel? И почему даже когда я указываю таймаут?


person user821863    schedule 27.12.2013    source источник
comment
1. Вы действительно уверены, что sftpChannel это именно ваш outputChannel из конфига? 2. Попробуйте включить ведение журнала DEBUG для org.springframework.integrationcategory и просмотреть журналы результатов после отправки сообщения.   -  person Artem Bilan    schedule 27.12.2013
comment
@ArtemBilan 1. Да. В отладке я вижу, что у него есть bean-компонент outputChannel. Кроме того, он работает вне теста. 2. Как включить ведение журнала? Он не включается автоматически? Спасибо за помощь!   -  person user821863    schedule 27.12.2013
comment
Нет, это не по умолчанию. Вы должны создать log4j.properties (или соответствующий вашей структуре ведения журнала) в тестовых ресурсах и настроить DEBUG для пакета SI.   -  person Artem Bilan    schedule 27.12.2013
comment
@ArtemBilan Ну, я добавил отладку. И нет никаких сообщений после сообщения об установлении соединения, которое я написал выше. Он не доходит до фазы отправки сообщения... Однако я заметил это в журналах отладки, которые мне нужно изучить... ResourcelessTransactionManager - Creating new transaction with name [null]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT   -  person user821863    schedule 27.12.2013
comment
Ну покажи свой юнит-тест, пожалуйста   -  person Artem Bilan    schedule 27.12.2013
comment
@ArtemBilan Я обновил свой вопрос. Мой модульный тест просто вызывает весеннее пакетное задание. И шаг sftp просто вызывает тасклет, проходящий в выходном канале выше. Тасклет работает до этой send(Message) строки моего кода. В очередной раз благодарим за помощь.   -  person user821863    schedule 28.12.2013
comment
Что ж, поскольку это ваш код и ваш тестовый пример, просто поставьте точку останова в Taskelt и попытайтесь выяснить, что происходит.   -  person Artem Bilan    schedule 28.12.2013
comment
@ArtemBilan У меня есть. Все, что он делает, это останавливается на методе отправки. никогда не достигает следующей строки кода. Ничего не регистрируется. Но программа продолжает работать, просто ждет в этот момент.   -  person user821863    schedule 28.12.2013
comment
Как насчет того, чтобы «вступить» в channel.send() и копнуть дальше, где ваш тред заблокирован?..   -  person Artem Bilan    schedule 28.12.2013