2

非開発環境でのスタック トレースを抑制するために facelets.development を false に設定したいのですが、デバッグのために dev で true に設定したいと考えています。

私たちのデプロイ プロセスでは、環境から本番環境まで移行される 1 つの CI ビルドが指定されているため、環境ごとにアプリの再構築や web.xml の書き換えを必要とするアプローチを使用することはできません。プロパティ ファイルの設定に基づいて、アプリケーションから値を変更したいと考えています。これは可能ですか?アプリケーションは facelets.development にどのようにアクセスできますか?

4

3 に答える 3

3

最も簡単な方法は、Context パラメーターを web.xml に入れることだと思います。

<context-param>
  <param-name>facelets.DEVELOPMENT</param-name>
  <param-value>false</param-value>
</context-param>

開発デプロイメントでそれをオーバーライドします。これは通常、WAR を変更しなくても可能です。<Context>Tomcat では、次の行 ( ...内</Context>)を使用して、WAR に META-INF/context.xml を含めます。

<Parameter name="facelets.DEVELOPMENT" value="true" override="false" />

Tomcat は、起動時にこのファイルを $CATALINA_BASE/conf/[enginename]/[hostname]/[context-path-name].xml にコピーします。これを使用して、WAR の外部で webapp を構成できます。これは各環境で発生し、管理者は次のように一度だけ変更する必要があります。

<Parameter name="facelets.DEVELOPMENT" value="false" override="false" />

その後、新しい /META-INF/context.xml を持つ新しい WAR がデプロイされても、Tomcat はそれを上書きしません。コンテキスト パラメータの名前は、WEB-INF/web.xml の宣言と一致する必要があります。

詳細については、 http://tomcat.apache.org/tomcat-6.0-doc/config/context.htmlを参照してください (「概要」および「コンテキスト パラメータ」セクション)。

于 2010-11-09T16:20:47.987 に答える
2

これを行う方法はいくつか考えられますが、どれもあまり快適ではありません。

  • FacesContextを装飾して、 init パラメーターをプログラムで制御します。これは、わずかな利益のための多くの作業です。
  • FaceletViewHandlerクラスにパッチを適用して、必要な動作を取得します。これにより、Facelets ライブラリをアップグレードすると、メンテナンスのオーバーヘッドが増える可能性があります。本番環境でアプリを管理する人々を不幸にする可能性があります。
  • パッチ アプローチのバリエーションは、パッチを適用した JAR を開発/テスト マシンで使用し、それらをサーバー ライブラリに配置することです。次に、PARENT_FIRST クラスローディングを使用して、アプリの JAR にそれらをロードします (アプリ サーバーがすべてをサポートしていると仮定します)。これの欠点は、クラスローディング ポリシーが課せられ、JAR をあちこちで管理しなければならないことです。

私は他のアプローチを好むでしょう。この設定がテスト マシンで必要な場合は、それらのサーバーへのインストール中に展開スクリプトによってアプリが変更される可能性があります。ソース管理で true に設定する場合、ビルド スクリプトはビルド プロセスの一部としてこれを削除できます。このアプローチは、ランタイム コードには影響しません。

于 2009-06-17T09:34:11.337 に答える