RMI demo_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > RMI demo

RMI demo

 2011/12/22 9:21:34  kaobian  http://kaobian.iteye.com  我要评论(0)
  • 摘要:由于公司的项目中用到了java.rmi分布式中的东西,所以就研究了一下,总结给朋友们分享,支持JDK1.6+我们编写的借口类必须要继承java.rmi.Remote接口。好的,不多罗嗦,直接来代码:packagecom.kaobian.rmi;importjava.rmi.Remote;importjava.rmi.RemoteException;publicinterfaceICalextendsRemote{publicintsum(intadd1,intadd2
  • 标签:
由于公司的项目中用到了java.rmi 分布式中的东西,所以就研究了一下,总结给朋友们分享,支持JDK1.6+
我们编写的借口类必须要继承java.rmi.Remote 接口
好的,不多罗嗦,直接来代码:
package com.kaobian.rmi;

import java.rmi.Remote;
import java.rmi.RemoteException;

public interface ICal extends Remote {

	public int sum(int add1, int add2) throws RemoteException;

}

切记我们传输的类 都是必须要实现序列化的,参数的话 也是必须实现了序列化或者是java基本类型
package com.kaobian.rmi;

import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;

public class ICalImpl extends UnicastRemoteObject implements ICal {

	protected ICalImpl() throws RemoteException {
		super();
	}
	private static final long serialVersionUID = 1L;

	@Override
	public int sum(int add1, int add2) throws RemoteException {
		System.out.println("server : add1=" + add1 + ",add2=" + add2);
		return add1 + add2;
	}

}



package com.kaobian.rmi;

import java.rmi.Remote;
import java.rmi.RemoteException;

/**
 * 分布式开发,据说 EJB 就是采用rmi开发的 ,道听途说
 * 如果想要用 远程对象调用 接口必须要继承Remote或者类必须要实现Remote接口 
 */
public interface IHello extends Remote {

	public String sayHello(String name) throws RemoteException;
}



package com.kaobian.rmi;

import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;

public class IHelloImpl extends UnicastRemoteObject implements IHello {
	private static final long serialVersionUID = 1L;

	protected IHelloImpl() throws RemoteException {
		super();
	}
	@Override
	public String sayHello(String name) throws RemoteException {
		System.out.println("server : " + name + " come here ");
		return "hello " + name;
	}

}


Server端 编写,如果有必要 也可以写成多线程
package com.kaobian.rmi;

import java.net.MalformedURLException;
import java.rmi.AlreadyBoundException;
import java.rmi.Naming;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;

public class Server {

	public static void main(String[] args) {
		//声明我要暴露的对象
		try {
			ICal    cal = new ICalImpl();
			IHello  hello = new IHelloImpl();
	        //本地主机上的远程对象注册表Registry的实例,并指定端口为 1100,
			//这一步必不可少(Java默认端口是1099),必不可缺的一步,缺少注册表创建,则无法绑定对象到远程注册表上 
            LocateRegistry.createRegistry(1100); 
            Naming.bind("rmi://192.168.1.244:1100/IHello",hello);
            Naming.bind("rmi://192.168.1.244:1100/ICal",cal);
            
            System.out.println("Server already be started up ");
		} catch (RemoteException e) {
			e.printStackTrace();
		} catch (MalformedURLException e) {
			e.printStackTrace();
		} catch (AlreadyBoundException e) {
			e.printStackTrace();
		}
		
	}

}



客户端调用
package com.kaobian.rmi;

import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;

public class RmiClient {

	public static void main(String[] args) {
		try {
			ICal cal = (ICal)Naming.lookup("rmi://192.168.1.244:1100/ICal");
			IHello hello = (IHello)Naming.lookup("rmi://192.168.1.244:1100/IHello");
			System.out.println(cal.sum(2, 3));
			System.out.println(hello.sayHello("kaobian"));
		} catch (MalformedURLException e) {
			e.printStackTrace();
		} catch (RemoteException e) {
			e.printStackTrace();
		} catch (NotBoundException e) {
			e.printStackTrace();
		}
	}
	
}


将 IHello 、IHelloImpl、ICal、ICalImpl、Server这五个类布置到服务器上,我用的是linux,客户端包含所有的类。

注意:如果在布置到服务器端时出现连接 遭拒绝错误,解决办法:
1: 关闭防火墙
2: 将 /ect/hosts文件中的 localhost 修改为实际的ip,而不是 127.0.0.1

这样启动就没问题了
  • com.zip (2.9 KB)
  • 下载次数: 4
上一篇: javascript 下一篇: rails 上载xls文件
  • 相关文章
发表评论
用户名: 匿名