在J2EE中我們經常需要獲取到當前server的host和port等信息,比如在結構復雜的EJB程序中,進行一些remote調用,或者訪問本機中的一個webservice組件,在weblogic中,如果設置了ListenAddress,那麼localhost這個主機名是不可訪問的,我們可以通過MBean去獲取到server的信息,以獲取server的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"));
由於ListenAddress獲取到的可能是weblogic的t3的url,所以應該對該address進行拆分,取最後一部分可用的地址即可。
通過獲取的ServerReference,我們可以得到更多的server信息,可參考weblogic的相關文檔:
http://download.oracle.com/docs/cd/E11035_01/wls100/wlsmbeanref/core/index.html
http://e-docs.bea.com/wls/docs81/jmx/overview.html