WebLogic自检/查询正在运行的servlet中的域信息

时间:2016-07-27 22:14:55

标签: java-ee weblogic weblogic12c

在运行的Web应用程序中,有没有办法从域中查询有关应用程序的元信息 - 具体来说,我希望能够动态地检测WebLogic管理服务器的端口和主机名,因为它不同从一个环境到另一个环境。

我正在使用WebLogic 12c,但过度版本的信息也很有用。谢谢!

1 个答案:

答案 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);
    }