获取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