2016-07-27 44 views
0

有沒有一種方法,從一個正在運行的Web應用程序內查詢有關來自域—的應用程序的元信息,我希望能夠檢測端口和動態地使用WebLogic管理服務器的主機名,因爲它隨環境而變化。從正在運行的servlet的WebLogic自檢/查詢域信息

我正在使用WebLogic 12c,但超過版本的信息也會有用。謝謝!

回答

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