2009-06-15 6 views
3

Je souhaite déployer la même application Web pour un certain nombre de clients différents. Chaque déploiement a besoin d'une valeur différente dans l'un des éléments du fichier de configuration web.xml.Comment personnaliser ma configuration web.xml

Sans construire un fichier .war différent pour chaque client (avec les différentes valeurs définies dans le fichier web.xml dans chaque fichier .war), est-il possible de configurer les valeurs pour les différents clients? Par exemple, un fichier web.xml peut-il récupérer des valeurs d'un fichier de propriétés de déploiement?

Nous utilisons Tomcat comme un conteneur de servlet.

Répondre

1

Vous pouvez spécifier la propriété de modification en dehors du fichier web.xml à l'aide de JNDI support de Tomcat.

Par exemple, spécifier une entrée d'environnement dans un élément Context:

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

Indiquez ensuite un lien vers cette variable d'environnement dans votre web.xml:

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

Et puis appeler depuis votre code en utilisant (de 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 vous pouvez injecter votre valeur dans votre application avec Spring en utilisant <jndi-lookup />

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

La réponse courte: sans changer la guerre, ce n'est pas possible.

Une version plus élaborée: la guerre peut contenir des paramètres et des valeurs par défaut que vous pouvez souvent changer en utilisant la console du serveur d'application ou du serveur web. Cela dépend de ce que vous voulez configurer, sont ces paramètres standard context/servlet/...?

1

pouvez-vous déplacer cet élément en dehors du web.xml? Si vous pouvez peut-être le lire à partir d'un fichier de propriétés, vous pouvez créer un fichier de propriétés différent pour chaque client et empaqueter la guerre avec le fichier de propriétés pour chaque client. Ensuite, au moment de l'exécution, vous pouvez lire le fichier de propriétés approprié en fonction d'une variable d'environnement.