LINUX.ORG.RU

AppServ, Java, Resource


0

0

Доброе время суток.

В WEB-INF лежит конфигурационный XML для приложения - customization.xml. В процессе работы приложения файл считывается один раз. Собственно он считывется, когда создается объектик изображающий из себя интерфейс для настроек приложения.

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

Я вижу два пути реализации такого динамического поведения:

1. Постоянно при обращении к настройкам приложения перечитывать файл. Худший вариант. Делать так точно не буду.

2. При обращении приложения к своим настройкам проверить, а не изменился ли файлик, и если да, то перечитать его.

Возникла проблема при реализации второго варианта. Версию файла получать просто - метод lastModified() класса File. Проблема в получении собственно самого объекта класса File.

application.getResource(/WEB-INF/customization.xml) c JSP возвращает вполне себе рабочий URL. Но вот URI из этого URL совсем не file:// естественно, а jndi:/.

Подскажите как можно организвать такую вот хотелку.

★★

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

LamerOk ★★★★★
()
Ответ на: комментарий от LamerOk

Да, пожалуйста. Вопрос про реализацию такого интерфейса, а не про то что нужен ли он.

Ian ★★
() автор топика
Ответ на: комментарий от Ian

То есть меня интересует, как, основываясь на тех предпосылках, что я привел выше, можно реализовать такую вот динамику.

Ian ★★
() автор топика
Ответ на: комментарий от Ian

Если делаешь не для себя, а для людей - такой "динамики" делать не надо. Надо сделать "пункт меню" "перечитать настройки".

LamerOk ★★★★★
()
Ответ на: комментарий от LamerOk

То что ты говоришь сделать невозможно. Нет никакого меню. Это расширение уже существующей системы и работать это должно автоматически. Либо в ином случае отказаться от динамики вообще.

Прочитай второй пункт в моем самом первом сообщении. Мне кажется, что так сделать вполне реально.

Ian ★★
() автор топика
Ответ на: комментарий от Ian

Так делать _нельзя_. Нельзя ни в коем случае. Сделал ты так, как хочешь. Я (или программа) открыла файл конфига, чтобы изменить два (прописью - два) значения. Изменил(а) одно, сохранил(а) файл. Твоя чудо-прога перечитала конфиг и запуситалась с одним старым и одним новым значением. Я (или программист той программы) хочу(ет) найти тебя, чтобы оторвать тебе конечности одну за другой, пока они (конечности) не закончатся.

По этой тривиальной причине самодеятельная перечитка конфигов не делается нигде никогда и никем.

По соглашению, конфиги в WEB-INF для неизменяемых во время работы приложения настройках. Хочешь менять райнайм - открывай самопальный ini файл и читай его. ИМХО контроль за "файлами" из веб-инф из нутри жсп контейнеров вообще не возможен. Особенно, если учесть, что весь веб-инф может быть упакован в вар.

LamerOk ★★★★★
()
Ответ на: комментарий от LamerOk

> Так делать _нельзя_. Нельзя ни в коем случае. Сделал ты так, как хочешь. Я (или программа) открыла файл конфига, чтобы изменить два (прописью - два) значения. Изменил(а) одно, сохранил(а) файл. Твоя чудо-прога перечитала конфиг и запуситалась с одним старым и одним новым значением. Я (или программист той программы) хочу(ет) найти тебя, чтобы оторвать тебе конечности одну за другой, пока они (конечности) не закончатся.

Это все правильно. Но не для всех задач.

Ты когда-нибудь лез в развернутый war и редактировал там jsp? Замечал, что в итоге, например, glassfish подхватывал эти изменения и перекомпилировал измененную jsp?

В принципе, я то могу и не делать, но этого хотят сверху. Значит нужно придумать как грамотно менеджеру объяснить, что так делать плохо.

Ian ★★
() автор топика
Ответ на: комментарий от Ian

Естественно объяснить на таком языке, что бы ему было понятно.

Ian ★★
() автор топика
Ответ на: комментарий от Ian

И глассфиш, и томкат уже давно пересобирают изменные вресии джсп. Это как бы новости пятилетней (или около того) давности. Но джсп/сервлет.equal конфиг == false.

Менеджеру объяснить на пальцах - нет транзакционного механизма передачи _всех_ параметров одновременно. Даже в рамках одного параметра возможна передача не полностью. Пусть хочет чего-нибудь другого. Лучше всего самому подобрать подходящее техническое решение и ткнуть в него пальцем.

LamerOk ★★★★★
()

jndi, для этого его и придумали

Pi ★★★★★
()

Вообще, для таких штук придумали не JNDI, а JMX.

svr69 ★★
()
Ответ на: комментарий от LamerOk

Ну-ну. Можно сколько угодно на лету писать в веб-инф, даже заменять классы приложения (Tapestry так и работает). Даже если вар упакован, приложение (сюрприз!) все равно будет работать с ним как с директорией и сможет туда писать, потому что аппсервер или веб-контейнер один хрен распакует этот вар в свою временную директорию.

svr69 ★★
()
Ответ на: комментарий от svr69

Ага! Вот за это спасибо! Попробую.

Ian ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.