web-dev-qa-db-ja.com

WebSphereアプリサーバーのインスタンス名を取得する

私のWebサービスは、JBoss AppServerまたはWebsphereAppServerで実行されます。どちらの場合もインスタンス名を知る必要があります。Jbossの場合はSystem.getProperty("jboss.server.name"),を使用できますが、WebSphereには何を使用できますか? WebSphere固有のメソッドを使用できません。System.propertiesを呼び出す必要があります

ありがとう

13

プラットフォームをニュートラルに保つために、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が必要であると確信していますが、サーバーにコードを入力しているため、単体テストが難しく、移植性がありません。私はこのアプローチを好みます。

8
Brad

少なくともWebSphereの場合の代替手段は、JNDIツリーで検索することです。これは私が使用するものです:

InitialContext ic = new javax.naming.InitialContext();
String serverName = ic.lookup("servername").toString();

このように、WebSphereがその情報をバインドするので、何も構成する必要はありません。

セル名とノード名は、「thisNode/cell/cellname」と「thisNode/nodename」を使用して取得することもできます。クラスターで役立つもの。

17
IsidroGH

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();
}
6
Domenic D.

ブラッドによって提案されたアプローチは良いですが、私はそれを微妙に異なる方法で行います。

サーバーJVMのカスタムプロパティで、プロパティServer-Nameを追加し、その値をWAS_SERVER_NAMEとして指定します。

これがこのためのパン粉です:

サーバー->->プロセス定義-> Java仮想マシン>カスタムプロパティ

値が$ {WAS_SERVER_NAME}のServerNameを使用して新しいものを追加します

すべてのWASサーバーインスタンスでは、このWebSphere変数がサーバーインスタンスの名前に設定されています。タイプミス(またはここで同様のエラー)を心配する必要はありません。このアプローチはすべてのWASサーバーで機能します。

このような値をテンプレートとして設定してサーバーを作成できます。新しいサーバーを作成すると、これらの値が常に表示されます。

HTH

3
Manglu