2013-08-22 5 views
0

Есть ли способ изменить значение глобальной переменной java во время выполнения в сервере приложений websphere? Я использую файл свойств в своем приложении java, чтобы указать значения глобальных переменных. Но иногда мне нужно менять значения переменных во время выполнения. Например, если у меня есть переменная с именем «fileServerLocation», а значение «C: \ Users \ test \ Downloads» и если я хочу изменить ее на «C: \ Users \ test \ Desktop», есть способ изменить значение переменной без необходимости повторного развертывания приложения на сервере?изменить значение глобальной переменной во время выполнения

+3

Что такое переменная _java global_? –

+0

Для этого вам следует использовать JNDI. Проверьте http://stackoverflow.com/questions/8259181/configuring-and-looking-up-a-simple-string-via-jndi-in-websphere. – fnt

+0

Значит, вы не имеете в виду глобальное значение? Вы имеете в виду какое-то значение конфигурации? – Raedwald

ответ

0

Вы можете создать веб-службу или вызов EJB, который запускается через HTTP-запрос, и все, что он делает, это изменить значение поля во время выполнения. Возможно, вам понадобится сделать этот «запрос администратора» требуемым для аутентификации (например, имя пользователя/пароль). Кроме того, вам может потребоваться объявить это поле как volatile, чтобы быть видимым во всех случаях после изменения.

Помните, что каждое ClassLoader имеет собственное значение статического поля (глобальная переменная). Обычно все EJB имеют один и тот же загрузчик классов, но каждый модуль war имеет свой собственный загрузчик классов.

+0

нужно ли передавать значение переменной в качестве параметра запроса веб-службы каждый раз? –

+0

@Learner Это зависит от вас. Вы можете передать простое целое число, в котором оно соответствует строковому значению. –

0

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

+0

клиент не должен ничего знать о переменной. переменная используется для представления папки на стороне сервера. –

0

Я не буду пытаться понять детали глобальной переменной, но я полагаю, что глобальная переменная является глобальной переменной приложения.

Я сосредоточусь на динамическом обновлении того, каким образом должно выполняться изменение состояния.
Я думаю, что правильным способом сделать это обычно является управление с использованием стандарта JMX. Вы должны выставить MBean с операцией для динамического обновления значения во время выполнения. Обновление значения должно быть «потокобезопасным» с использованием каких-либо барьеров памяти.

Обновление значения будет выполнено с использованием какого-либо средства управления (клиент JMX).

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