私のアプリケーションは、任意のOSで実行されている任意のアプリケーションサーバーに展開できる汎用エンタープライズアプリケーションです。
アプリケーションサーバーにデータソースとして保存されているデータベース情報を除いて、アプリケーションを構成する方法/場所がわかりません。
簡単なことですが、データベースを構成コンテナとして使用することもできますが、データベースには構成要素を含めないでください。どの環境(dev、test、acceptance、production)でも任意のデータベースを使用できるようにしたい)。
Java EEは、データソースに提供されるものと同様の構成管理を提供しますか?はいの場合、それは何ですか?そうでない場合、これについてのベストプラクティスは何ですか?
私は次のアドバイスをよく読みます。これらのアイテムをサーバーのプロパティファイルに配置します。結構ですが、その場合、プロパティファイルの場所がそれ自体で構成アイテムになるので、そのプロパティファイルの場所をどこでどのように定義し、その情報をアプリケーションに送信しますか?
この場合、いくつかのオプションがあります。
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つは文字列です。