2009-06-15 10 views
3

多くの異なる顧客に同じWebアプリケーションを導入したいと思います。各デプロイメントでは、web.xml構成ファイルのいずれかの要素に異なる値が必要です。web.xmlの設定をカスタマイズするには

カスタマーごとに異なる.warファイルを作成せずに(各.warのweb.xmlに異なる値を設定)、異なる顧客の値を設定することは可能ですか?たとえば、web.xmlファイルは、デプロイメントプロパティファイルから値を取得できますか?

サーブレットコンテナとしてTomcatを使用しています。

答えて

1

TomcatのJNDI supportを使用すると、web.xmlの外部で変更するプロパティを指定できます。

<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> 

そして、あなたのコードから呼び出す

例えば、Context要素内の環境エントリを指定します(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あなたは、Springを使ってあなたのアプリケーションにあなたの価値を注入することができます。<jndi-lookup />

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

短い答え:戦争を変えずにはできません。

さらに複雑なバージョン:warには、アプリケーションサーバーまたはWebサーバーのコンソールを使用して変更できるパラメータとデフォルト値が含まれていることがあります。それはあなたが設定したいもの、これらの標準的なコンテキスト/サーブレット/ ...のパラメータですか?

1

この要素をweb.xmlの外に移動できますか?プロパティファイルから読み込むことができれば、各顧客ごとに異なるプロパティファイルを作成し、各顧客のプロパティファイルで戦争をパッケージ化することができます。次に、実行時に、環境変数に基づいて適切なプロパティー・ファイルを読み取ることができます。

関連する問題