私の Web サービスは、Jboss App Server または Websphere app Server で実行されます。どちらもインスタンス名を知る必要があります。Jboss では使用できますSystem.getProperty("jboss.server.name"),
が、WebSphere では何を使用できますか? WebSphere 固有のメソッドを使用できません。System.properties を呼び出す必要があります。
ありがとう
少なくとも WebSphere の場合は、JNDI ツリーで検索することもできます。これは私が使用するものです:
InitialContext ic = new javax.naming.InitialContext();
String serverName = ic.lookup("servername").toString();
この方法では、WebSphere がその情報をバインドするので、何も構成する必要はありません。
セルおよびノード名は、「thisNode/cell/cellname」および「thisNode/nodename」を使用して取得することもできます。クラスターで役立つもの。
サーバー名を環境変数として指定することに同意します(Mangluのタッチも問題ありません)。議論を完全にするために、ランタイムを介してインスタンス名を取得する方法を次に示します(このAPIは最近のバージョンでは非推奨ですが、まだ使用されています)。
import com.ibm.websphere.runtime.ServerName;
System.out.println("Display name: " + ServerName.getDisplayName());
System.out.println("Full name: " + ServerName.getFullName());
サンプル出力は次のようになります
表示名:server1
氏名:was7host01Node01Cell \ was7host01Node01 \ server1
プラットフォームをニュートラルに保つために、変数を Websphere サーバーの JVM 引数として設定できます (クラスター化されている場合はノードごとに 1 つ)。Websphere 7 の場合、管理コンソールに以下が表示されます ...
Servers > Server Types > Websphere application servers > [your cluster node] >
> Java and Process Management > Process Definition > Java Virtual Machine >
> Generic JVM arguments
このような変数を追加します...
-DServerName=serverNodeA
その後、コード内の値に次のようにアクセスできます...
String serverName = System.getproperty("ServerName");
この手法は、JVM に引数を追加するアクセス権がある限り、すべてのアプリケーション サーバーで使用できます。ノード名を照会する Websphere 固有の API が必要だと確信していますが、コードをサーバーに入力しているため、単体テストが難しく、移植性がありません。私はこのアプローチを好みます。
kurtcebe ソリューションはうまく機能します。Maven を使用している場合、jar をプロジェクトに簡単に取り込むことはできません。このため、Class.forname... を使用します。
try {
Class<?> c = Class.forName("com.ibm.websphere.runtime.ServerName");
LOGGER.debug("Class found" + c);
Method m = c.getMethod("getFullName", new Class<?>[0]);
LOGGER.debug("Method found" + m);
Object o = m.invoke(DeliveryServiceUtils.class, new Object[0]);
LOGGER.debug("Method invoked, response is " + o);
processName = o.toString();
}
catch (Exception ex) {
processName = "unknown - " + ex.getClass().getName() + ": " + ex.getMessage();
}
ブラッドが提案したアプローチは良いですが、私はそれを微妙に異なる方法で行います.
サーバー JVM のカスタム プロパティで、プロパティ Server-Name を追加し、その値を WAS_SERVER_NAME として指定します。
これがパンくずリストです。
サーバー -> -> プロセス定義 -> Java 仮想マシン > カスタム プロパティ
値が ${WAS_SERVER_NAME} の ServerName と言う新しいものを追加します
すべての WAS サーバー インスタンスには、この WebSphere 変数がサーバー インスタンスの名前に設定されています。入力ミス (または同様のエラー) について心配する必要はなく、このアプローチはすべての WAS サーバーで機能します。
このような値をテンプレートとして設定してサーバーを作成できます。新しいサーバーを作成すると、これらは常に表示されます。
HTH