2011-12-18 3 views
2

Есть ли переносимый способ мониторинга файла для изменений из развернутого приложения?Как отслеживать изменения файлов в приложении Java EE?

В качестве практического примера предположим, что у меня есть приложение, развернутое в AS Glassfish. Затем, когда приложение запускается, я развертываю файл конфигурации внутри/META-INF, который будет прочитан некоторым Thread из моего приложения.

Итак, как реализовать это? Как контролировать файл (или каталог, если на то пошло) для изменений?

ответ

1

Я думаю, что было бы невозможно обеспечить такой механизм. Вы предполагаете, что «/ META-INF» находится в файловой системе, но я не верю, что для приложения Java EE необходимо взорвать файловую систему. (да, многие серверы приложений делают это по целому ряду веских причин, но я уверен, что это не является обязательным требованием).

+0

Есть ли способ получить файлы в META-INF без вызова getClass(). GetResourceAsStream()? – EdMelo

+0

не использует J2EE API. – jtahlborn

+0

ОК, спасибо. :-) – EdMelo

0

Пожалуйста, проверьте ответ от @jtahlborn. Если у вас есть доступ к файловой системе, то у вас есть два варианта:

  • Портативный неэффективный способ периодически опрашивать файловую систему и проверить изменения, либо путем проверки даты изменения или CRCins файл (медленнее)

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

3

Java7 имеет платформу независимое решение для мониторинга файлов в файловой системе:

http://docs.oracle.com/javase/7/docs/api/java/nio/file/WatchService.html

Вот краткое руководство о том, как использовать его:

http://docs.oracle.com/javase/tutorial/essential/io/notification.html

Но как правильно сказал jtahlborn, если контейнер не взрывает файл .war, смотреть нечего.

1

Кэш загрузчиков классов сильно загружен, а ресурс при первом чтении больше не обновляется из базовой файловой системы.

Независимо от этого вам не разрешается доступ к файловой системе и управление ею в чистой Java EE. Причина проста: если ваш поток переносится на другой узел (для кластерных серверов), ваши файлы больше не будут доступны. Контейнер должен знать об этих вещах, чтобы он мог правильно их обрабатывать, а файловые системы не являются «этими вещами».

Смежные вопросы