[b][color=red]1. Name[/color][/b]
RMI是Romote Method Invocation的缩写,就是远程方法调用。
[b][color=red]2. Intent[/color][/b]
具体的说,就是能够通过这种机制,实现在一个JVM上调用另一个JVM上的Java对象的方法。
[b][color=red]3. Structure[/color][/b]
[b][color=darkblue]
(1)RMI Interface and Class[/color][/b]
第一步:继承了Remote的interface
定义一个继承了Remote的interface,命名为TestRMIService。在其中有我们期望在Client端调用的方法testHello(),注意要抛出RemoteException。
第二步:继承了UnicastRemoteObject且实现了TestRMIService的class
定义一个继承了UnicastRemoteObject且实现了TestRMIService的class,命名为TestRMIServiceImpl。在其中实现testHello方法。
[b][color=darkblue](2)RMI Server[/color][/b]
第一步:
定义一个class,命名为TestServer,其中有main方法。在main方法中实例化TestRMIService一个远程对象,命名为testRMI。
第二步:
创建一个Registry,并向远程对象testRMI注册,注册名为“rmi://locahost:1234/testrmi”。
[b][color=darkblue](3)RMI Client[/color][/b]
第一步:
定义一个class,命名为TestClient,其中有main方法。查询注册
第二步:
查询注册名为“rmi://locahost:1234/testrmi”的TestRMIService远程对象,查询结果为testRMI。
第三步:
调用远程对象testRMI的方法testHello。
[b][color=red]4. Sample Code[/color][/b]
[b][color=darkblue](1)TestRMIService[/color][/b]
[b][color=darkblue](2)TestRMIServiceImpl[/color][/b]
[b][color=darkblue](3)TestServer[/color][/b]
[b][color=darkblue](4)TestClient[/color][/b]
[b][color=red]5. Test[/color][/b]
[b][color=darkblue](1)运行TestServer[/color][/b]
在Eclipse主界面的Package Explorer中你所创建的测试RMI的工程中的com.sinosuperman包中,右击TestServer,选择Run As,选择Java Application。
这时界面上会显示:
“注册远程对象成功”
[b][color=darkblue](2)运行TestClient[/color][/b]
在Eclipse主界面的Package Explorer中你所创建的测试RMI的工程中的com.sinosuperman.rmi包中,右击TestClient,选择Run As,选择Java Application。
这时界面上会显示:
“I'm RMI, Hello World!”
RMI是Romote Method Invocation的缩写,就是远程方法调用。
[b][color=red]2. Intent[/color][/b]
具体的说,就是能够通过这种机制,实现在一个JVM上调用另一个JVM上的Java对象的方法。
[b][color=red]3. Structure[/color][/b]
[b][color=darkblue]
(1)RMI Interface and Class[/color][/b]
第一步:继承了Remote的interface
定义一个继承了Remote的interface,命名为TestRMIService。在其中有我们期望在Client端调用的方法testHello(),注意要抛出RemoteException。
第二步:继承了UnicastRemoteObject且实现了TestRMIService的class
定义一个继承了UnicastRemoteObject且实现了TestRMIService的class,命名为TestRMIServiceImpl。在其中实现testHello方法。
[b][color=darkblue](2)RMI Server[/color][/b]
第一步:
定义一个class,命名为TestServer,其中有main方法。在main方法中实例化TestRMIService一个远程对象,命名为testRMI。
第二步:
创建一个Registry,并向远程对象testRMI注册,注册名为“rmi://locahost:1234/testrmi”。
[b][color=darkblue](3)RMI Client[/color][/b]
第一步:
定义一个class,命名为TestClient,其中有main方法。查询注册
第二步:
查询注册名为“rmi://locahost:1234/testrmi”的TestRMIService远程对象,查询结果为testRMI。
第三步:
调用远程对象testRMI的方法testHello。
[b][color=red]4. Sample Code[/color][/b]
[b][color=darkblue](1)TestRMIService[/color][/b]
package com.sinosuperman.rmi;
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface TestRMIService extends Remote {
public String testHello() throws RemoteException;
}
[b][color=darkblue](2)TestRMIServiceImpl[/color][/b]
package com.sinosuperman.rmi;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
public class TestRMIServiceImpl extends UnicastRemoteObject implements TestRMIService {
private static final long serialVersionUID = -9039976499370682232L;
public TestRMIServiceImpl() throws RemoteException {
}
@Override
public String testHello() throws RemoteException {
return "I'm RMI, Hello World!";
}
}
[b][color=darkblue](3)TestServer[/color][/b]
package com.sinosuperman.server;
import java.net.MalformedURLException;
import java.rmi.AlreadyBoundException;
import java.rmi.Naming;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import com.sinosuperman.rmi.TestRMIService;
import com.sinosuperman.rmi.TestRMIServiceImpl;
public class TestServer {
public static void main(String[] args) {
try {
/* Create a Remote object. */
TestRMIService testRMI = new TestRMIServiceImpl();
/* Create a registry object with 1234 port. */
LocateRegistry.createRegistry(1234);
/* Register the Remote object to RMI registry server, and name it as testrmi. */
Naming.bind("rmi://localhost:1234/testrmi", testRMI);
System.out.println("注册远程对象成功");
} catch (RemoteException e) {
System.out.println("远程对象创建异常");
e.printStackTrace();
} catch (MalformedURLException e) {
System.out.println("URL畸形异常");
e.printStackTrace();
} catch (AlreadyBoundException e) {
System.out.println("重复绑定异常");
e.printStackTrace();
}
}
}
[b][color=darkblue](4)TestClient[/color][/b]
package com.sinosuperman.rmi;
import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;
public class TestRMIClient {
public static void main(String[] args) {
try {
TestRMIService testService = (TestRMIService) Naming.lookup("rmi://localhost:1234/testrmi");
System.out.println(testService.testHello());
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (RemoteException e) {
e.printStackTrace();
} catch (NotBoundException e) {
e.printStackTrace();
}
}
}
[b][color=red]5. Test[/color][/b]
[b][color=darkblue](1)运行TestServer[/color][/b]
在Eclipse主界面的Package Explorer中你所创建的测试RMI的工程中的com.sinosuperman包中,右击TestServer,选择Run As,选择Java Application。
这时界面上会显示:
“注册远程对象成功”
[b][color=darkblue](2)运行TestClient[/color][/b]
在Eclipse主界面的Package Explorer中你所创建的测试RMI的工程中的com.sinosuperman.rmi包中,右击TestClient,选择Run As,选择Java Application。
这时界面上会显示:
“I'm RMI, Hello World!”