免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1948 | 回复: 0
打印 上一主题 下一主题

JMX初探_jmx-in-action中RMI连接子示例问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-03-14 10:27 |只看该作者 |倒序浏览

                                                   开博已经十天了,还没有怎么发文章,最近有点忙


   最近因为接触了一个新项目,不得不摸索JMX。Java这语言,规范一大堆,以前也没有做过JAVA方面的东西,现在都在从0开始了。
   JMX,是SUN公司提出来的一个管理体系结构,规定了规范、设计模式与接口等,它可以对网络、应用程序、服务及系统资源等进行监控与管理。JMX体系结构主要分为三层:装配层、代理层和分布式服务层。其它基础及介绍性文字在这里就不多介绍,可以在GOOGLE到很详细的资料。现在主要是讨论一下jmx-in-action RMI连接子的用不了的问题(第三章)。
   在学习jmx-in-action的第三章时,你会发现按书本那样做你是无法编译通过的,主要原因就是它里面提供的类RmiConnectonServer及RmiConnectorClient等类已经不被现在的API支持了,所以要换其它的类或是接口来实现。先来看一下RMIClientFactory类:
package jmxbook.ch3;
import javax.management.*;
import com.sun.jdmk.comm.*;
//红色部分是加进来的
import javax.management.remote.JMXServiceURL;import javax.management.remote.JMXConnector;import javax.management.remote.JMXConnectorFactory;import javax.management.MBeanServerConnection;
import java.rmi.*;
public class RMIClientFactory
{
  public static MBeanServerConnection getClient()
  {
    /**这块代码就不要了
    RmiConnectorClient client = new RmiConnectorClient();
    RmiConnectorAddress address = new RmiConnectorAddress();
    address.setPort( 2099 );
    System.out.println("\t\tTYPE\t= " + address.getConnectorType ());
    System.out.println("\t\tPORT\t= " + address.getPort());
    System.out.println("\t\tHOST\t= " + address.getHost());
    System.out.println("\t\tSERVER\t= " + address.getName());
     **/
   //这是加进来的代码
   MBeanServerConnection mbsc = null;
   
    try
    {
    JMXServiceURL url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:2099/server");  //JMX连接子服务端的地址    JMXConnector jmxc = JMXConnectorFactory.connect(url, null); //创建到服务端的连接     mbsc = jmxc.getMBeanServerConnection();  获得代表远程MBean server的一个MBeanServerConnection 对象
//client.connect( address );
    }
    catch( Exception e )
    {
      ExceptionUtil.printException( e );
    }
    return mbsc;
  }
}
在JMXBookAgent类中也加入
import javax.management.remote.JMXServiceURL;
import javax.management.remote.JMXConnector;
import javax.management.remote.JMXConnectorFactory;
import javax.management.MBeanServerConnection;
然后修改startRMIConnector()方法为:
  protected void startRMIConnector()
  {
    //MBeanServerConnection connector = new MBeanServerConnection();
   // ObjectName connectorName = null;
    try
    {
JMXServiceURL url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:2099/server");
JMXConnectorServer cs = JMXConnectorServerFactory.newJMXConnectorServer(url,null,server);//根据给出的地址创建一个服务端,但并不马启动服务,得调用START方法来启动它。
cs.start();
/*************  这是书本给出的代码,现在已经不支持了   
connector.setPort( 2099 );
      connectorName = new ObjectName( "JMXBookAgent:name=RMIConnector" );
      server.registerMBean( connector, connectorName );
      connector.start();
*****/
    }
    catch(Exception e)
    {
      ExceptionUtil.printException( e );
    }
  }
HelloWorldSetup类也要修改一下
public HelloWorldSetup()
  {
    try
    {
MBeanServerConnection client = RMIClientFactory.getClient();ObjectName hwName = new ObjectName("JMXBookAgent:name=helloWorld");client.createMBean("jmxbook.ch2.HelloWorld",hwName);client.invoke(hwName,"printGreeting",null,null);  //调用hellowaord MBean里的pirntGreating方法
client.unregisterMBean(hwName);      
/***RmiConnectorClient client = RMIClientFactory.getClient();
      ObjectName hwName = new ObjectName( "JMXBookAgent:name=helloWorld");
      client.createMBean( "jmxbook.ch2.HelloWorld", hwName );
      client.invoke( hwName, "printGreeting", null, null );
****/   
}
最后,编译和运行时注意加入远程API的类库,即jmxremote.jar和jmxri.jar,最后运行就可以看一到以下字样了:(在运行前要运行rmiregistry 2099打开端口服务)
CREATE the agent...
        CREATE the MBeanServer.
Agent is Ready for Service...
运行客服端后:
CREATE the agent...
        CREATE the MBeanServer.
Agent is Ready for Service...
Hello World! I am a Standard MBean.
               
               
               
               
               
               
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/93476/showart_1862938.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP