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