我在程序中加了几个Mbean想通过jconsole调用。使用JMXConnectorServerFactory生成JMXConnectorServer。通过JMXServiceURL设置,将server绑定到registry。然后,我在本地用jconsole访问发现不能访问。我自己通过程序去查服务器上registry中注册的对象,发现rmiServer的stub中的endpoint使用的是外网地址。我需要通过内网地址才能访问服务器。
我想解决的方法可能有两个:
1.是否可以设置让服务器程序在生成stub的时候使用服务器内网ip?
2.修改路由器的路由设置,如果内网访问该服务器的外网地址也能路由到该机器。请高手解答,谢谢!

解决方案 »

  1.   

    监听的网络地址是通过JMXServiceURL设置
      

  2.   

    地址我设置了内网地址,但是stub中使用的还是外网地址。我想这个还是会以java底层获取的地址为准吧。
      

  3.   

    前阵子做项目也同样使用了MBean,似乎并没有涉及到stub。
    以下是我的register 和 unregister 方法。public class BeansManager {    
        public static void unregister(String type, String name) {
            try {
                MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
                mbs.unregisterMBean(new ObjectName("label:type=" + type + (name == null ? "" : ",name=" + name)));
            } catch (Exception ex) {
                // ignore;
                ex.printStackTrace();
            }        
        }
        
        
        public static void register(Object object, String type, String name) {
            try {
                MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
                ObjectName mbeanName = new ObjectName("label:type=" + type + (name == null ? "" : ",name=" + name));
                mbs.registerMBean(object, mbeanName);
            } catch (Exception ex) {
                // ignore;
                ex.printStackTrace();
            }        
        }
    }有了MBeans的实现后,简单的调用一下就行了。[code]BeansManager.register(mbeanImpl, "MBeanSample", null);[/code]
      

  4.   

    你这种写法只能在同一个jvm里访问mbServer。我要实现远程用jconsole访问。
      

  5.   

    一样的哇。 运行的时候加点参数就好了java -jar xxx.jar -Dcom.sun.management.jmxremote.port=8999 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false
      

  6.   

    在路由器上的做nat的地方改动一下规则就可以了这样解决会简单一些,适应性更好