setLastModified не работает с общим ресурсом NFS

У меня есть общий ресурс NFS, установленный на одном из моих серверов Solaris. Путь /appdata/anp монтируется с сервера A на сервер B. Под общим ресурсом:

/appdata/anp

У меня есть папка с именем

/appdata/anp/factory

В указанный выше каталог я помещаю файлы с данными, которые необходимо импортировать/обновлять в базу данных. После импорта данных в базу данных я перемещаю файл в каталог успеха/неудачи в зависимости от результата операции с импортированными данными.

/appdata/anp/factory/success

/appdata/anp/factory/failure

Я перемещаю файл в любой из указанных выше каталогов и обновляю время последнего изменения файла до текущего системного времени, используя:

file.setLastModified

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

Кто-нибудь знает, каковы сценарии, в которых

file.setLastModified

возвращает отказ. Я даже проверил разрешения NFS, и мне кажется, что все в порядке. Можно ли как-то узнать случаи, когда setLastModified может возвращать ошибку?

Пожалуйста, помогите мне, я действительно дергаю себя за волосы на этом!! :(


person Cheshar    schedule 02.02.2011    source источник
comment
Для всех тех, кто пришел к этому сообщению и прочитал это, кажется, что этот API не очень хорошо работает на определенных платформах и операционных системах (в моем случае это монтирование NFS). Наконец, я заканчиваю тем, что использую команду касания Unix, порождая поток системного уровня из Java!   -  person Cheshar    schedule 05.05.2011


Ответы (1)


У меня была аналогичная проблема в файловой системе Unix. В моем случае это произошло из-за того, что unix обрезал последние измененные миллисекунды и устанавливал последнее измененное значение:

System.currentTimeMillis() - System.currentTimeMillis() % 1000

Это влияло на тестовый пример, который манипулировал файлом, а затем проверял наличие обновлений через file.lastModified(). Я просто добавил Thread.sleep(1100) перед обновлением файла в своем тестовом примере, и все было решено.

Надеюсь, это поможет следующему человеку.

person Lance    schedule 24.06.2011
comment
Спасибо, что поделились этим!! Я надеюсь, что это поможет другим, столкнувшимся с подобными проблемами с этим API. - person Cheshar; 26.06.2011