Почему DefaultFileMonitor продолжает перечислять файлы в моем расположении FTP в цикле?
Отредактированная версия кода Java:
FileSystemOptions opts = new FileSystemOptions();
DefaultFileSystemConfigBuilder.getInstance().setUserAuthenticator(opts, auth);
// fileToMonitor is the FTP folder.
LOG.debug("Trying to resolve file " + fileToMonitor + "...");
FileObject fo = fileSystemManager.resolveFile(fileToMonitor, opts);
LOG.debug("File resolved, attempting to add to DefaultFileMonitor...");
DefaultFileMonitor monitor = createFileMonitor(processor);
// This line causes PORT and LIST commnads to be sent to the FTP server
monitor.addFile(fo);
LOG.debug("File successfully, added to DefaultFileMonitor");
Я наблюдал за сетевым трафиком, и, похоже, что при добавлении местоположения FTP к монитору он отправляет команды PORT и LIST в две папки на сервере. Проблема в том, что он продолжает это делать (предположительно, до тех пор, пока у него не закончатся клиентские порты для вызова?).
Вот выдержка из сетевого трафика FTP:
50 0.312500 {TCP:2, IPv4:0} FTP FTP:Request from Port 12620,'PORT xxx,xxx,xxx,xxx,49,114'
51 0.312500 {TCP:2, IPv4:0} FTP FTP:Response to Port 12620, '200 PORT command successful.'
52 0.312500 {TCP:2, IPv4:0} FTP FTP:Request from Port 12620,'LIST tmp/dump'
<snipped>
270 1.750000 {TCP:2, IPv4:0} FTP FTP:Request from Port 12620,'PORT xxx,xxx,xxx,xxx,49,115'
271 1.750000 {TCP:2, IPv4:0} FTP FTP:Response to Port 12620, '200 PORT command successful.'
272 1.750000 {TCP:2, IPv4:0} FTP FTP:Request from Port 12620,'LIST tmp'
<snipped>
343 2.296875 {TCP:2, IPv4:0} FTP FTP:Request from Port 12620,'PORT xxx,xxx,xxx,xxx,49,116'
344 2.312500 {TCP:2, IPv4:0} FTP FTP:Response to Port 12620, '200 PORT command successful.'
345 2.312500 {TCP:2, IPv4:0} FTP FTP:Request from Port 12620,'LIST tmp/dump'
<snipped>
560 3.687500 {TCP:2, IPv4:0} FTP FTP:Response to Port 12620, '226 Transfer complete.'
566 4.031250 {TCP:2, IPv4:0} FTP FTP:Request from Port 12620,'PORT xxx,xxx,xxx,xxx,49,118'
567 4.031250 {TCP:2, IPv4:0} FTP FTP:Response to Port 12620, '200 PORT command successful.'
568 4.031250 {TCP:2, IPv4:0} FTP FTP:Request from Port 12620,'LIST tmp'
<repeat>
Часть является ответом от команды LIST. Обратите внимание, что команды повторяются для одних и тех же папок, но порт меняется каждый раз. Это не происходит, если в этих местах нет файлов.
Что вызывает такое поведение и как я могу изменить его, чтобы отправка получала данные только один раз?
Редактировать: я сузил проблему до метода getChildren() в FileObject.
Это единственная ссылка в Интернете, которую я смог найти: http://mail-archives.apache.org/mod_mbox/commons-user/201005.mbox/%3C4c03ed10.0d01df0a.53c3.059c@mx.google.com%3E
1 ответ
Я обнаружил, что это ошибка в FTPFileObject в VFS.
Я построил еще одну банку из последнего исходного кода, и проблема ушла.