您的位置:首页 > 编程语言 > Java开发

java RMI学习笔记之HelloWorld

2013-09-02 15:17 519 查看
1:首先编写Server端,需要四个类
Employees.java类--------
import java.io.Serializable;
public class Employees implements Serializable {
private static final long serialVersionUID = -8202439972511838105L;
private String id;
private String name;

public void setName(String name) {
this.name = name;
}

public String getName() {
return name;
}

public void setId(String id) {
this.id = id;
}

public String getId() {
return id;
}
}
RemoteInterface.java类------------
import java.rmi.Remote;
import java.rmi.RemoteException;

import com.ws.rmi.Employees;

//定义接口,声明方法,继承Remote接口
public interface RemoteInterface extends Remote{

public abstract String say(String str) throws RemoteException;

public abstract Employees getEmployeesById(String str) throws RemoteException;
}
RemoteInterfaceImpl.java类------------
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
import com.ws.rmi.Employees;

//实现RemoteInterface接口中的所有方法,还要继承UnicastRemoteObject这个特殊的类(没研究为什么)
public class RemoteInterfaceImpl extends UnicastRemoteObject implements
RemoteInterface {

private static final long serialVersionUID = -3491749919079349917L;

public RemoteInterfaceImpl() throws RemoteException {
super();
}

@Override
public Employees getEmployeesById(String id) throws RemoteException {
Employees employees = new Employees();
employees.setId(id);
employees.setName("无业游民");
return employees;
}

@Override
public String say(String str) throws RemoteException {
return "hello:" + str;
}
}
RmiServer.java类------------
import java.net.MalformedURLException;
import java.rmi.AlreadyBoundException;
import java.rmi.Naming;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;

public class RmiServer{

private static final long serialVersionUID = 1L;
private static final int PORT = 8888;

//运行方法注册这个接口,开始提供服务,这个应该是可以和Spring集成的,和Tomcat一起启动,来提供服务
public static void main(String[] args) throws AlreadyBoundException, RemoteException, MalformedURLException{
RemoteInterface impl = new RemoteInterfaceImpl();
//本地主机上的远程对象注册表Registry的实例,并指定端口为8888,这一步必不可少(Java默认端口是1099),必不可缺的一步,缺少注册表创建,则无法绑定对象到远程注册表上
LocateRegistry.createRegistry(PORT);
Naming.bind("rmi://localhost:8888/remoteInterface", impl);
}
}
写完之后要做一步重要的操作,把这个服务打个jar包,客户端需要调用....
打jar包方法很简单,在项目中右键>>Export>>选JAR file>>



服务端完成

----------------------------------------------------------------------------------------
写Client端RmiClient.java不要忘了导入刚才导出的jar包
import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;

import com.ws.rmi.Employees;
import com.ws.rmi.RemoteInterface;

public class RmiClient {

public static void main(String[] args){
try {
RemoteInterface rif = (RemoteInterface) Naming.lookup("rmi://localhost:8888/remoteInterface");
//调用RemoteInterface的getEmployeesById方法
Employees e = rif.getEmployeesById("2");
System.out.println(e.getName());
//调用RemoteInterface的say方法
System.out.println(rif.say("yu"));
} catch (RemoteException e) {
e.printStackTrace();
} catch (NotBoundException e) {
e.printStackTrace();
} catch (MalformedURLException e) {
e.printStackTrace();
}
}

/**注意
* 1:RMI对服务器的IP地址和端口依赖很紧密,但是在开发的时候不知道将来的服务器IP和端口如何,但是客户端程序依赖这个IP和端口。
* (这个问题有两种解决途径:一是通过DNS来解决,二是通过封装将IP暴露到程序代码之外。)
* 2:RMI是Java语言的远程调用,两端的程序语言必须是Java实现
* (RMI的局限性之二是RMI是Java语言的远程调用,两端的程序语言必须是Java实现,对于不同语言间的通讯可以考虑用Web Service或者公用对象请求代理体系(CORBA)来实现。)
*/
}
客户端完成

-----------------------------------------------------------------------------------------
开始测试
先运行服务端的RmiServer.java,再运行客户端的RmiClient.java
附件中有完整的源码...
本文参考了:http://www.cnblogs.com/ninahan0419/archive/2009/06/25/javarmi.html

附件:http://down.51cto.com/data/2363426
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java RMI