在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