在运行的Web应用程序中,有没有办法从域中查询有关应用程序的元信息 - 具体来说,我希望能够动态地检测WebLogic管理服务器的端口和主机名,因为它不同从一个环境到另一个环境。
我正在使用WebLogic 12c,但过度版本的信息也很有用。谢谢!
答案 0 :(得分:1)
您可以从传入的请求中查询此信息,在Servlet中它可以像这样工作:
@Override
public void service(final HttpServletRequest req, final HttpServletResponse res)
throws ServletException, IOException {
System.out.println("Server name " + req.getServerName());
System.out.println("Server port " + req.getServerPort());
}
或者您可以直接从域中通过JMX获取它(无需请求。另请参阅http://docs.oracle.com/middleware/1212/wls/JMXCU/accesswls.htm#JMXCU144):
private void printHostAndPort() throws Exception {
final InitialContext ctx = new InitialContext();
final MBeanServerConnection server = (MBeanServerConnection) ctx.lookup("java:comp/env/jmx/domainRuntime");
final ObjectName runtimeservicebean = new ObjectName(
"com.bea:Name=DomainRuntimeService,Type=weblogic.management.mbeanservers.domainruntime.DomainRuntimeServiceMBean");
// Here can be several
final ObjectName[] serverRuntimeMBeans = (ObjectName[]) server.getAttribute(runtimeservicebean,
"ServerRuntimes");
final String name = (String) server.getAttribute(serverRuntimeMBeans[0], "Name");
System.out.println(name);
final String address = (String) server.getAttribute(serverRuntimeMBeans[0], "ListenAddress");
System.out.println(address);
final Integer port = (Integer) server.getAttribute(serverRuntimeMBeans[0], "ListenPort");
System.out.println(port);
}