获取WebSphere app Server的实例名称

Mic*_*ato 13 java websphere

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

谢谢

Isi*_*oGH 17

至少对于WebSphere来说,另一种方法是在JNDI树中查找它.这是我使用的:

InitialContext ic = new javax.naming.InitialContext();
String serverName = ic.lookup("servername").toString();
Run Code Online (Sandbox Code Playgroud)

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

也可以使用"thisNode/cell/cellname"和"thisNode/nodename"检索单元和节点名称.集群中有用的东西.


Kur*_*glu 9

我同意将服务器名称指定为环境变量(Manglu的触摸也很好).为了使讨论完整,以下是如何通过运行时获取实例名称(此API在最近的版本中已弃用但仍在使用中);

import com.ibm.websphere.runtime.ServerName;

System.out.println("Display name: " + ServerName.getDisplayName());
System.out.println("Full name: " + ServerName.getFullName());
Run Code Online (Sandbox Code Playgroud)

样本输出就像

显示名称:server1
全名:was7host01Node01Cell\was7host01Node01\server1


Bra*_*rad 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 
Run Code Online (Sandbox Code Playgroud)

并添加这样的变量......

-DServerName=serverNodeA
Run Code Online (Sandbox Code Playgroud)

然后,您可以访问代码中的值...

String serverName = System.getproperty("ServerName");
Run Code Online (Sandbox Code Playgroud)

只要您有权向JVM添加参数,此技术就可以与所有应用程序服务器一起使用.我确信必须有Websphere特定的API来查询节点名称,但是你要在服务器上键入代码,这使得单元测试变得困难并且不可移植.我更喜欢这种方法.


Dom*_* D. 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();
}
Run Code Online (Sandbox Code Playgroud)