質問

私の努力が払われてきたが、現在、j2eeプロジェクトとしてベーターです。に関しては、まさに今だけを打ち出して、一部の問題を展開します。具体的には、複数のファイルに埋め込戦争(一部のxmlファイルと.性を必要とするアプリケーションを展開かどうかに応じていdev、試験または動作します。もののようにloglevels、接続プール、等

いたという開発者はこの構造はその工程を展開webapps.いまや日陰ものとして構成できるアプリケーションサーバ?交換はしてくれまでの設定ファイルのプログラムを配備する前に?送迎バージョンの中で構築す。手動で編集を行ー戦争。

またどこまでいくのでは提供する依存関係を通じて、アプリケーションサーバ'static図書館だけの戦すか?すべてのことだけでも一部メディアネットワーク活用双方の共通の(おそらく最高の練習があるのが現状です。

役に立ちましたか?

解決

私は別のサーバーのチームが我々のアプリケーションのためのQAと生産のサーバーの構成を実行環境で動作します。各アプリケーションは、一般的にQAに2台のサーバと生産における3つのサーバにデプロイされます。私の開発チームは、それが戦争(または耳)にできるだけ多くの構成を置くことによって、サーバー上で必要な設定の量を最小限にするために最善であることを発見しました。これは、サーバーの構成が容易になり、また、サーバーチームが誤ってサーバーを設定する可能性を最小限に抑えます。

私たちは、マシン固有の設定を持っていないが、我々は、環境固有の設定(DEV、QA、および生産を)持っています。私たちは、環境によって命名されているwarファイル(例。dev.properties、qa.properties、prod.properties)に保存された設定ファイルを持っています。私たちは、環境(例:javaの-Dapp.env = PRODを...)を指定するために、サーバVMのjavaコマンドラインで-Dプロパティを置きます。アプリケーションはapp.envシステムプロパティを探し、使用するファイルのプロパティの名前を決定するために使用することができます。

あなたは、あなたが同様に-Dの特性として、それらを指定することができ、マシン固有のプロパティの数が少ない場合は、

私は考えます。コモンズの設定は、システムプロパティでプロパティファイルを結合する簡単な方法を提供します。

私たちは、サーバー上の接続プールを設定します。私たちは、すべての環境で同じ接続プールに名前を付け、単に適切なデータベースに、それぞれの環境に割り当てられているサーバーをポイントします。アプリケーションは、1つの接続プールの名前を知っている必要があります。

他のヒント

私は、プロパティは、マシン/特定の展開であれば、その後、彼らがマシンに属していると思います。私は戦争で物事をラップするつもりなら、それはドロップinnable、それが実行しているマシンに固有の何を意味されなければなりません。戦争がそれで、マシンに依存する性質を持っている場合は、このアイデアは解除されます。

私は何をしたいとすると、各マシンはどこかに戦争がそれにアクセスすることができます住んで.propertiesファイルを持っている、properties.exampleファイルでプロジェクトをビルドです。

別の方法は、例えば、Antタスクを持っているだろうDEV-戦争、ステージ戦争、PROD-戦争と戦争ビルドにで焼いたプロジェクトのプロパティの一部のセットを持っています。あなたのプロジェクトのビルドの一部として、個々のサーバ上のファイルの場所のようなものを持って終了するつもりだので、私はこれほど好きではありません。

WRTの設定ファイルは、私が考える<のhref = "https://stackoverflow.com/questions/582248/how-do-you-manage-embedded-configuration-files-and-libraries-in-java-webapps/ 582279#582279" >はスティーブのの答えは、これまで最高の一つです。私は、warファイルのインストールパスの外部ファイルが相対的な作りの提案追加します - 。あなたは異なる構成と一つのサーバに戦争の複数のインストールを持つことができ、そのように

例えば。私dev.war/opt/tomcat/webapps/devに展開されます場合は、私は<のhref = "http://java.sun.com/javaee/5/docs/api/javax/servlet/ServletContext.html#getRealPath(java.lang.Stringを使用します)」のrel = 『nofollowをnoreferrer』> ServletContext.getRealPath のように、構成ファイルが../../config/dev戦争に対する、または絶対のため/opt/tomcat/config/devに住んで、ベースフォルダと戦争フォルダ名を検索する。

私も、<のhref = "https://stackoverflow.com/questions/582248/how-do-you-manage-embedded-configuration-files-and-libraries-in-java-webapps/584589#に同意します584589" は>ビルは、これらの外部の設定ファイルにできるだけ置くことについてを。それは理にかなってできるだけ多くを保存するために、ご使用の環境に応じて、データベースまたはJMXを使用しました。 Apacheのコモンズ設定のための素敵なオブジェクトを持っていますデータベーステーブルに裏打ちされた構成を取り扱います。

ライブラリについては、私は<のhref = "https://stackoverflow.com/questions/582248/how-do-you-manage-embedded-configuration-files-and-libraries-in-java-webapps/に同意します584504#584504" >不明には、warファイル(自己パッケージ)でWEB-INF/libフォルダ内のすべてのLIBSを持っています。利点は、アプリケーションの各インストールは自律的であるということです、あなたは異なるが同時にライブラリの異なるバージョンを使用して、戦争のビルドがあります。

欠点は、各Webアプリケーションは、クラスの独自のコピーを持つことになりますと、それは、独自のクラスローダによってロードされ、より多くのメモリを使用するということです。

これは現実的な懸念を提起した場合、あなたはあなたのサーブレットコンテナ(Tomcatの$CATALINA_HOME/lib)のための共通ライブラリフォルダ内のjarファイルを置くことができます。同じサーバ上で実行されているWebアプリケーションのすべてのインストールは、しかしライブラリの同じバージョンを使用する必要があります。 (実際には、必要に応じて、個々のWEB-INF/libフォルダに上書きバージョンを置くことができるようそれは厳密には正しくないのですが、それは維持するためにかなり厄介になっています。)

私は、InstallShieldまたは NSISするまたは同等を使用して、この場合、共通のライブラリの自動インストーラを構築しますお使いのオペレーティングシステム用の。あなたはライブラリの日付セットまでのほとんどを持っている場合、それは簡単に伝えるために作る、およびアップグレードすることができます何か、ダウングレード、など。

いることは通常、二つのプロパティファイル:

  • 一のためのアプリ詳細メッセージ内の"魔法の言葉")のアプリ
  • その他の環境内容(dbアクセスログレベル-パ...)に露出している各サーバのクラスパスは、"sticked"(届かないっていない。いただいたメール"mavenise"または"anttise"これらの一つで入れる特定の値によっては、対象の環境
  • 涼しい利用JMXを維持するアプリconf(confを変更可能なオシロスコープのリアルタイムでなく、再デプロイがあまりにも複雑なものになります。

サーバの(静?) 図:私は強く意欲をそぐようなサーバーの図書館の自分のアプリとしてで依存関係のサーバー:

  1. IMOに、私のアプリ"ものでなければならな自パッケージ:下が私の戦争は、まることはありません。れによって戦争20Mbsの瓶に囲まれた高原地帯に位置し、その伝達を妨げない。
  2. 共通の最も現実に示すように、この外部の依存関係は、J2EEセントラルドグマ:にJ2EEのAPI利用のサーブレット,Ejbs,Jndi、JMX,JMS...).アプリは"サーバー agnostic".
  3. 入依存関係が存アプリ(戦争、耳wathever)は自己記録:システムについての図書館アプリです。サーバー libは、明確に文書これらの依存関係していると言っても過言ではあり明らかで、すぐにおdevelopers忘れてしまことクラシック、ポップス).
  4. 場合はアップグレードappserverチャンスをサーバlibきに依存して増減します。AppServer編集してはいけませんの互換性を維持その内部libバージョン(ほとんどの時間もするものらしいです。
  5. ご利用の場合は現在広く用いられているlib組み込みおappServer(ジャカルタ-コモンズ-ロギング、通称jclまっているにもかかわらず、心にあたって、ugradeでのバージョンを特徴する巨大なリスクおappServerンストラクトをサポートします。
  6. 場合に依存して静的なサーバオブジェクト(staticフィールドのサーバクラスなどプログとして再起動おappserver浄このオブジェクトです。ゆったりのホット-再おースのアプリケーション(旧サーバオブジェクトが存在するとredeployments).使用appServerの全オブジェクト(以外で定義されるJ2EE)で微妙なバグの場合、このオブジェクトでは複数のアプリとなります。そこで私が強く意欲をそぐのオブジェクトに存在する静磁場のappServer lib.

合することが必要となり"このオブジェクトがこのappserverのjar"、コピーのjarアプリもありませんへの依存その他のサーバーの壺の確認アプリのclassloading政策に乗ってくるようになったから習慣れ親前"classloading方針を全てのアプリ思いる"汚染"によるサーバのjarでもないわからない場合は"ベストプラクティス").

私は、データベース内のすべての設定を置きます。コンテナ(Tomcatのは、WebSphereなどが)私の最初のデータベース接続にして、上からのアクセスを提供し、すべてがデータベースから出てきます。これは、ダウンタイムなしで複数の環境、クラスタリング、および動的な変更を可能にする(または少なくとも再デプロイせず)。特に素敵(変更を拾うために、管理画面や背景復習のいずれかが必要ですが)その場でログレベルを変更することができることです。アプリを取得するために必要とされていないもののために明らかにこれだけの作品が始めたが、一般的には、起動後にかなり迅速にデータベースに取得することができます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top