来自 运行 servlet 的 WebLogic Introspection/Query 域信息

WebLogic Introspection/Query domain information from a running servlet

有没有办法在 运行 网络应用程序中从域中查询有关应用程序的元信息——具体来说,我希望能够检测到 WebLogic 管理员的端口和主机名动态服务器,因为它因环境而异。

我使用的是 WebLogic 12c,但更多版本的信息也很有用。谢谢!

您可以从传入请求中查询此信息,在 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);
    }