获取WebSphere app Server的实例名称

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

谢谢

要使其保持平台中立,您可以将变量设置为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来查询节点名称,但是你要在服务器上键入代码,这使得unit testing变得困难并且不可移植。 我更喜欢这种方法。

至少对于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

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

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

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

这是面包屑:

服务器 – > – >流程定义 – > Java虚拟机>自定义属性

使用值为$ {WAS_SERVER_NAME}的ServerName添加一个新的

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

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

HTH