获取WebSphere app Server的实例名称

时间:2012-05-16 12:54:44

标签: java websphere

我的Web服务将在Jboss App Server或Websphere app Server上运行。对于他们两个我需要知道实例名称,对于Jboss,我可以使用System.getProperty("jboss.server.name"),但是我可以将哪些用于WebSphere?我不能使用特定于WebSphere的方法,我需要调用System.properties

由于

5 个答案:

答案 0 :(得分:15)

至少对于WebSphere来说,另一种选择是在JNDI树中查找它。 这就是我使用的:

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

这样我就不需要配置任何东西,因为WebSphere会为我绑定这些信息。

也可以使用“thisNode / cell / cellname”和“thisNode / nodename”检索单元格和节点名称。在群集中有用的东西。

答案 1 :(得分:9)

我同意将服务器名称指定为环境变量(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

答案 2 :(得分:8)

要使其保持平台中立,您可以将变量设置为Websphere服务器的JVM参数(如果每个节点都是群集,则为一个)。对于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来查询节点名称,但是你要在服务器上键入代码,这使得单元测试变得困难并且不可移植。我更喜欢这种方法。

答案 3 :(得分:6)

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();
}

答案 4 :(得分:3)

布拉德提出的方法很好,但我会以不同的方式做到这一点。

在Server JVM的custom属性中,我将添加一个属性Server-Name,并将其值指定为WAS_SERVER_NAME。

这是面包屑:

服务器 - &gt; - &GT;流程定义 - &gt; Java虚拟机&gt;自定义属性

使用值为$ {WAS_SERVER_NAME}

的ServerName添加一个新的

每个WAS Server实例都将此WebSphere Variable设置为Server实例的名称。您不必担心拼写错误(或类似错误),这种方法适用于所有WAS服务器。

您可以使用设置为模板的值创建服务器,并在创建新服务器时始终为您提供这些服务器。

HTH