hello world

随笔 - 2, 文章 - 63, 评论 - 0, 引用 - 0
数据加载中……

RMI连接的简单例子

自己依照已有的源代码,主要是在JMX框架下,实现了RMI远程调用的一个简单的例子,主要是为了验证RMI调用时文件的配置情况。
主要有forPlay类及对应的MBean,Server端以及client端,其中,clint端是和其他文件异地配置的,在同一台机子上更没问题了。通过RMI远程连接,我们可以实现一个瘦客户端的,即主要的MBean是放在Server端,客户端使用相应的类时,只需要通过RMI调用就行了,另外,MBean只需和服务器同包放置或者服务器能够找到的位置,无须显式的注册,这是我实现这个程序的主要目的。
server端的源代码和JMX下RMI远程调用的入门(环境变量的设置)里面的Server.java文件是一样的,涉及到环境变量以及如何运行,这篇文章里也有详细介绍。这里只给出我今天写的一段代码
整个程序一共有四个文件
forReplay.java、forReplayMBean.java、Client.java以及前面说到的Server.java,这里给出前三个文件的代码:
***********************************************************
forReplay.java
***************************************
public class forReplay

 implements forReplayMBean{
 
 private String State="待调用";
 
 public void play(){
  System.out.println("play函数调用成功!");
  
 }

 public String getState() {
  
  return State;
 }

 public void setState(String s) {
  State=s;
  
 }

}
***********************************************************
***********************************************************
forReplayMBean.java
***************************************
public interface forReplayMBean {
 
 public String getState();
 public void setState(String s);
 public void play();

}
***********************************************************
***********************************************************
Client.java
***************************************
import javax.management.MBeanServerConnection;
import javax.management.ObjectName;
import javax.management.remote.JMXConnector;
import javax.management.remote.JMXConnectorFactory;
import javax.management.remote.JMXServiceURL;

public class Client {

    public static void main(String[] args) {
        try {
         
            // 创建RMI连接客户端到RMI连接服务器
            JMXServiceURL url = new JMXServiceURL(
        "service:jmx:rmi:///jndi/rmi://localhost:9999/server");
            JMXConnector jmxc = JMXConnectorFactory.connect(url, null);

            // 获得一个MBean服务器连接
            MBeanServerConnection mbsc = jmxc.getMBeanServerConnection();

            //创建一个forPlay类
            ObjectName mbeanName = new ObjectName("chengang:name=forReplay");
            mbsc.createMBean("forReplay", mbeanName, null, null);

           
            System.out.println("\nMBean数量为" + mbsc.getMBeanCount());// 获得Mbean的数量
            mbsc.invoke(mbeanName,"play", null, null);//调用forPlay类中的play()函数

            Thread.sleep(2000);//挂起2000毫秒,等待服务器反应.
         
            mbsc.unregisterMBean(mbeanName); //注销MBean的注册,不是必要的
            jmxc.close();// 关闭连接,不是必要的
           
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

***********************************************************
***********************************************************

posted on 2008-04-03 21:47 听风 阅读(507) 评论(0)  编辑  收藏 所属分类: JAVA


只有注册用户登录后才能发表评论。


网站导航: