在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进行拆分,取最后一部分可用的地址即可。 (责任编辑:admin) |