我的 Web 服务将在 Jboss 应用服务器或 Websphere 应用服务器上运行。对于他们两个,我都需要知道实例名称,对于 Jboss 我可以使用System.getProperty("jboss.server.name"),
,但是对于 WebSphere,我可以使用什么?我不能使用特定于 WebSphere 的方法,我需要调用 System.properties
谢谢
至少对于 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
为了保持平台中立,您可以将变量设置为 Websphere 服务器的 JVM 参数(如果节点是集群的,则每个节点一个)。对于 Websphere 7,您将在 Admin Console 中找到以下内容...
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 来查询节点名称,但是随后您将代码输入到服务器,这使得单元测试变得困难并且不可移植。我更喜欢这种方法。
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 的自定义属性中,我将添加一个属性 Server-Name 并将其值指定为 WAS_SERVER_NAME。
这是面包屑:
服务器 -> -> 进程定义 -> Java 虚拟机 > 自定义属性
添加一个新的服务器名称,其值为 ${WAS_SERVER_NAME}
每个 WAS 服务器实例都将此 WebSphere 变量设置为服务器实例的名称。您无需担心会出现拼写错误(或此处的类似错误),并且此方法适用于所有 WAS Server。
您可以创建一个将这些值设置为模板的服务器,当您创建一个新服务器时,这些值始终为您呈现。
高温高压