1

多数のサーバーで実行されるJavaWebアプリケーションがあります。このアプリケーションのサーブレットの一部は、起動時にロードしてデータをプリロードします。このデータをロードするためのプロトコルは、アプリケーションがデプロイされているサーバーに基づいて変更されます。(ロードされるファイルのパスが変更されます。また、セキュリティにも違いがあるため、一部のファイルの取得は他のファイルよりも複雑になります)。Javaサーブレットのinit関数で、アプリケーションが稼働しているサーバー/マシンを一意に識別できる方法はありますか?私はもともと一緒に働いていましたHttpServletRequest.getServerName(),これで十分でしたが、initでは使用できません。私は怠惰な初期化について知っているので、そうするように言わないでください。これらのファイルのロード時間はかなり長いので、可能であればそれを避けようとしています。完璧なマシン名を見つけることができたとしても、APIからこれを取得する方法がわかりません。必要なのは、initからマシンを一意に識別する方法だけです。

助けてくれてありがとう。

4

3 に答える 3

2

アプリケーションを(ハードコードされた)IPのセットに依存させるのではなく、JNDIにバインドされた単純なStringプロパティを使用して、各サーバーを識別します。

通常、IP/ホスト名をハードコーディングすることはお勧めできません。インフラストラクチャの変更は、アプリケーションをデプロイした直後に発生する可能性があります:)

一方、JNDIは、appserverのリソースを取得するための標準的な方法です。リソース(文字列プロパティ)のJNDIへのバインドは、WAS管理コンソールで実行でき、JNDIからプロパティ値を取得するのは簡単です。そしてIBMはそれについてのチュートリアルさえ公開しました。

于 2012-07-31T16:15:05.843 に答える
1

おそらく1つの方法は、次を使用してホストの名前を確認することです。

java.util.InetAddress.getLocalHost().getHostName()
于 2012-07-31T15:40:21.187 に答える
1

かつてこれと同様の要件があり、システムプロパティを使用しました。基本的に、サーバーのスタートアップコマンドで-D引数を使用してプロパティを定義します。

-DserverId=serverA

次に、サーブレットで次を使用してアクセスできます。

System.getProperty("serverId")

各サーバーの起動に異なるIDを与えるだけです。

お役に立てれば。

于 2012-07-31T15:48:09.930 に答える