一直都不太清楚rmi是什么,今天花了点点时间初步照着个例子做了,有了个大致的了解,还有待继续学习。测试的例子如下:
1.创建了个maven的工程
2.创建I_Hello 接口:
package com.rmi;
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface I_Hello extends Remote {
public String SayHello() throws RemoteException; //需要抛出remote异常
}
3.创建实现类Hello.java:
package com.rmi;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
public class Hello extends UnicastRemoteObject implements I_Hello {
public Hello() throws RemoteException //需要一个抛出Remote异常的默认初始化方法
{
}
public String SayHello() //这个是实现I_Hello接口的方法
{
return "Hello world !!";
}
public static void main(String args[])
{
System.out.println("hello");
}
}
4.执行mvn clean install命令编译,生成对应的Hello.class文件。
在改文件路径下执行dos命令:
(1)临时增加classpath路径,否则会出现找不到Hello类错误
D:\WebApp\rmi.test\target\rmi.test\WEB-INF\classes>set classpath=%classpath%;D:\WebApp\rmi.test\target\rmi.test\WEB-INF\classes
ps:1.可以使用echo %classpath%来查看当前类路径。
2.也可直接在环境变量中修改classpath增加类路径(永久)
(2)
用RMIC命令来生成残根Stub
D:\WebApp\rmi.test\target\rmi.test\WEB-INF\classes>rmic com.rmi.Hello
执行完改命令会在D:\WebApp\rmi.test\target\rmi.test\WEB-INF\classes路径下生成Hello_Stub.class文件。
5.创建一个服务用于发布服务
package com.rmi;
import java.rmi.Naming;
public class RMI_Server {
/**
* @param args
*/
public static void main(String[] args) {
try
{
Hello hello = new Hello(); //实例化要发布的类
Naming.rebind("RMI_Hello", hello); //绑定RMI名称 进行发布
System.out.println("=== Hello server Ready === ");
}
catch(Exception exception)
{
exception.printStackTrace();
}
}
}
6.创建客户端调用rmi服务
package com.rmi;
import java.rmi.Naming;
public class RMI_Client {
/**
* @param args
*/
public static void main(String[] args) {
try
{
I_Hello hello = (I_Hello) Naming.lookup("RMI_Hello"); //通过RMI名称查找远程对象
System.out.println(hello.SayHello()); //调用远程对象的方法
} catch (Exception e)
{
e.printStackTrace();
}
}
}
到此 我们 所有的代码编写都完成了,不过不要急着去运行,请跟随第7点去运行
7.
1)服务器的运行
先在DOS下运行 rmiregistry 这个命令是开启RMI的注册服务,开启以后我们的server程序才能调用rebing方法发布我们的类
然后,运行我们的server程序 RMI_Server
2) 客户端的运行
运行RMI_Client 打印:Hello world !! 即可,调用服务成功。