有没有办法在运行时从JBoss server.xml读取jvmRoute值?

bra*_*rry 2 java apache jboss

我们的JBoss server.xml文件有这一行:

 <Engine name="jboss.web" defaultHost="localhost" jvmRoute="app_server_01">
Run Code Online (Sandbox Code Playgroud)

有没有办法app_server_01在运行时使用Java 获取jvmroute值(在本例中)?

背景

我们的应用服务器和Apache服务器之间配置了会话关联(粘性会话).JBoss将jvmroute(app_server_01)附加到JSESSIONID.我们在一台主机上配置了多个应用,但在不同的应用服务器上运行.我们希望使用servlet过滤器将适当的jvmroute附加到JSESSIONID.

Mat*_*nit 5

JMX版本

您可以查询Engine的MBean以获取此信息:

  MBeanServer server = org.jboss.mx.util.MBeanServerLocator.locateJBoss();
  String jvmRoute = (String)server.getAttribute(new ObjectName("jboss.web:type=Engine"), "jvmRoute");
Run Code Online (Sandbox Code Playgroud)

XML解析版

另一种选择是使用"jboss.server.home.dir"系统属性来查找server.xml文件的完整路径,然后使用XML解析器打开它.

例如,在JBoss 4.2.2中,server.xml文件位于:

System.getProperty("jboss.server.home.dir") + File.separator +
  "deploy" + File.separator +
  "jboss-web.deployer" + File.separator +
  "server.xml"
Run Code Online (Sandbox Code Playgroud)

您可以将此文件加载到您喜欢的任何XML解析器中.

在JBoss 5.1.0中,目录结构已经改变,因此它将是:

// Incompatible with JBoss 4.x:
System.getProperty("jboss.server.home.dir") + File.separator +
  "deploy" + File.separator +
  "jbossweb.sar" + File.separator +
  "server.xml"
Run Code Online (Sandbox Code Playgroud)