在 J2EE 開發中,常需要動態獲取當前 WebLogic Server 的監聽地址與埠號,例如進行 EJB 遠程調用、呼叫本機 Web Service 組件等。特別是當 Server 設定了 ListenAddress 時,localhost 可能無法訪問,此時必須透過 JMX MBean 取得真實的 IP 與 Port。
ObjectName rs = null;
MBeanServer mbeanServer = (MBeanServer) context.lookup("java:comp/env/jmx/runtime");
String RUNTIME_SERVICE_MBEAN = "com.bea:Name=RuntimeService,Type=weblogic.management.mbeanservers.runtime.RuntimeServiceMBean";
rs = new ObjectName(RUNTIME_SERVICE_MBEAN);
ObjectName serverrt = (ObjectName) mbeanServer.getAttribute(rs, "ServerRuntime");
String listenAddr = (String) mbeanServer.getAttribute(serverrt, "ListenAddress");
String[] tempAddr = listenAddr.split("/");
if (tempAddr.length == 1) {
listenAddr = tempAddr[0];
} else if (tempAddr[tempAddr.length - 1].trim().length() != 0) {
listenAddr = tempAddr[tempAddr.length - 1];
} else if (tempAddr.length > 2) {
listenAddr = tempAddr[tempAddr.length - 2];
}
String listenPort = String.valueOf(mbeanServer.getAttribute(serverrt, "ListenPort"));
java:comp/env/jmx/runtime 獲得運行時 MBeanServer。ServerRuntime。t3://ip:port 格式,需分割取最後有效段作為 IP。透過 ServerRuntime 還可獲取更多 Server 狀態資訊(如健康狀態、啟動時間、部署應用列表等),詳細屬性請參考官方文檔:
代碼需運行於 WebLogic 容器內部(如 Servlet、EJB 中),且應用需具備 JMX 權限。若在叢集環境下,建議結合 ClusterRuntime 獲取所有節點資訊。