Java 7 Watch Service не может правильно определять события - PullRequest
0 голосов
/ 28 января 2019

Я создал приложение Java службы часов, используя WatchService от nio2 для сервера Linux, в результате чего он просматривает некоторые каталоги на подключенном диске NAS.Файлы будут доставляться по NFS, MQ или SFTP.

В других местах я читал, что WatchService не сможет работать на удаленных дисках, однако, похоже, он работает, когда я его тестирую.

Мои тесты представляют собой смесь копирования или «прикосновения» новых файлов в каталог отслеживания в качестве пользователя, которого я использовал для запуска службы java.

Проблема: My WatchService не обнаруживает ЛЮБЫЕ события в этих конкретных каталогах во время оперативного развертывания.При дальнейшей проверке файлы принадлежат другому пользователю / группе, чем тот, который использовался для выполнения моей Java-программы.

Таким образом, я выполнил тест, в результате которого я создал нового пользователя из новой группы, а затем коснулся / скопировал в каталог, и это работает!Разрешения ВСЕХ файлов по крайней мере читаются для ВСЕХ.(и даже тестирование без чтения для всех, моя программа, по крайней мере, будет регистрировать CREATE_EVENT независимо)

Я не могу получить доступ для пользователей, которые использовались для NFS / MQ / SFTP, чтобы проверить этопроблема.Поэтому я ищу какую-то помощь или хотя бы ясность по проблеме, с которой я здесь сталкиваюсь.

1 Ответ

0 голосов
/ 28 января 2019

Служба наблюдения Java часто не может обнаружить события в удаленной файловой системе.Это то, что javadoc говорит:

Если просматриваемый файл не находится на локальном устройстве хранения, то это зависит от реализации, если изменения в файле могут быть обнаружены.В частности, не требуется обнаруживать изменения в файлах, выполненных на удаленных системах.

Почему?Поскольку базовая функциональность ОС, которую использует Java для реализации службы часов, тоже не может этого сделать 1 .

Почему?Потому что протоколы удаленной файловой системы не поддерживают это.Конечно, NFS нет.И ни один не делает SMB .

Почему?Потому что это не будет надежно, не будет эффективно и не будет масштабироваться!

Если вам действительно нужно реализовать просмотр файлов для удаленных файловых систем, вам нужно будет сделать это в системе.где файлы на самом деле находятся.


1 - Неправильно указывать поведение, которое невозможно реализовать!

...