2009-06-15 6 views
3

Я хотел бы развернуть одно и то же веб-приложение для нескольких разных клиентов. Для каждого развертывания требуется другое значение в одном из элементов файла конфигурации web.xml.Как настроить мою настройку web.xml

Не создавая другой файл .war для каждого клиента (с различными значениями, установленными в файле web.xml в каждом .war), можно ли настроить значения для разных клиентов? Например, может ли файл web.xml извлекать значения из файла свойств развертывания?

Мы используем Tomcat как контейнер для сервлетов.

ответ

1

Вы можете указать изменяемое свойство за пределами web.xml, с помощью команды Tomcat's JNDI support.

Например, укажите запись среды в пределах Context элемента:

<Context ...> 
    ... 
    <Environment name="maxExemptions" value="10" 
     type="java.lang.Integer" override="false"/> 
    ... 
</Context> 

Затем укажите ссылку на эту переменную окружения в вашем web.xml:

<env-entry> 
    <env-entry-name>maxExemptions</param-name> 
    <env-entry-type>java.lang.Integer</env-entry-type> 
</env-entry> 

И затем вызвать из кода используя (от Professional Apache Tomcat 6):

private final Object lock = new Object(); 
... 
synchronized (lock) { 
    Context initCtx = new InitialContext(); 
    Context envCtx = initCtx.lookup("java:comp/env"); 
    Integer maxExemptions = (Integer) envCtx.lookup("maxExemptions"); 
} 

O r вы можете ввести свою ценность в свое приложение весной, используя <jndi-lookup />

<bean id="someBean"> 
    <property name="maxExemptions"> 
     <jndi-lookup jndi-name="xxx" /> 
    </property> 
</bean> 
0

Короткий ответ: без изменения войны это невозможно.

Более сложная версия: война может содержать некоторые параметры и значения по умолчанию, которые вы часто можете изменить, используя консоль сервера приложений или веб-сервера. Это зависит от того, что вы хотите настроить, являются ли эти стандартные параметры context/servlet/...?

1

Вы можете перемещать этот элемент за пределы web.xml? Если вы можете прочитать его из файла свойств, вы можете создать другой файл свойств для каждого клиента и упаковать войну с файлом свойств для каждого клиента. Затем во время выполнения вы можете прочитать соответствующий файл свойств на основе переменной среды.