web-dev-qa-db-ja.com

エンタープライズアプリケーションの環境固有の構成にアクセスする方法

私のアプリケーションは、任意のOSで実行されている任意のアプリケーションサーバーに展開できる汎用エンタープライズアプリケーションです。

アプリケーションサーバーにデータソースとして保存されているデータベース情報を除いて、アプリケーションを構成する方法/場所がわかりません。

簡単なことですが、データベースを構成コンテナとして使用することもできますが、データベースには構成要素を含めないでください。どの環境(dev、test、acceptance、production)でも任意のデータベースを使用できるようにしたい)。

Java EEは、データソースに提供されるものと同様の構成管理を提供しますか?はいの場合、それは何ですか?そうでない場合、これについてのベストプラクティスは何ですか?

私は次のアドバイスをよく読みます。これらのアイテムをサーバーのプロパティファイルに配置します。結構ですが、その場合、プロパティファイルの場所がそれ自体で構成アイテムになるので、そのプロパティファイルの場所をどこでどのように定義し、その情報をアプリケーションに送信しますか?

4

この場合、いくつかのオプションがあります。

1つ目はプロパティファイルです。その場所はsomewhereであり、通常はクラスパス内にあります。通常、それは getResource 呼び出しのファミリーと組み合わせて表示されます。

_Properties prop = new Properties();
prop.load(this.getClass().getResourceAsStream("stuff.properties");
_

ここで、クラスパスにプロパティファイルがない場合は、Systemクラス here

_Java -Dtest="true" -jar myApplication.jar_を呼び出すと、値はSystem.getProperty("test")で抽出され、他のリソースを指定するために使用されるか、リソース自体になります。多くのアプリケーションサーバーではすぐには表示されませんが、どこかにまだあります。 Eclipseでは、実行構成に移動してVM引数を確認することで、簡単に確認できます。

システムプロパティと同様に、 System.getenv を介してアクセスされるenvironmentプロパティがあります。その一連のドキュメントの残りの部分はよく読んでください- The Platform Enviroment 。それは主にJava SEに話しますが、その中のほぼすべてがまだ適用可能であり、Java EEのオプションが(あなたが見ているとは思わないJava Web StartまたはJavaアプレット)。

アプリケーションサーバーの領域に移ると、アプリケーションまたはサーバーのコンテキストに格納されている名前が表示されます。

_InitialContext ic = new InitialContext();
loc = (String) ic.lookup("Java:com/env/app/location");
_

この値は実際にはサーバー構成自体に格納されます。 Tomcat のドキュメント。アプリサーバーはそれぞれ異なるため、そこで醜さを感じる可能性があることに注意してください。 JNDIのデータベースと文字列の唯一の違いは、データベースが提示するタイプです。 1つはDataSourceで、もう1つは文字列です。

3
user40980