• 1. Java网络编程 —— RMIInstructor : Teaching Assistants: ?
  • 2. 主要内容 6-1 RMI基本概念 6-2 RMI的使用 Java网络编程 - Fall 2007 – RMI - 2
  • 3. 主要内容 6-1 RMI基本概念 6-2 RMI的使用 Let's go to ...Java网络编程 - Fall 2007 – RMI - 3
  • 4. 问题的提出 我们如何去调用网络上其他对象的方法? ClientServerABb.fun()Java网络编程 - Fall 2007 – RMI - 4
  • 5. RMI技术RMI (Remote Method Invocation)是一种分布式系统技术,它允许一个Java虚拟机调用运行在网络中另一处的JVM上的对象方法。 设计RMI的目的就是要让Java程序员能够采用与开发本地程序一样的语法与方式去开发分布式应用程序。 Java网络编程 - Fall 2007 – RMI - 5
  • 6. 行为定义与行为实现的分离Java网络编程 - Fall 2007 – RMI - 6
  • 7. 以接口为核心Java网络编程 - Fall 2007 – RMI - 7
  • 8. RMI体系结构Java网络编程 - Fall 2007 – RMI - 8
  • 9. Stub与Skeletons层stub具体的实现对象Skeleton(JDK1.2以后)Java网络编程 - Fall 2007 – RMI - 9
  • 10. 远程引用层远程引用层定义并支持RMI连接中的方法调用。 该层提供了一个RemoteRef对象来代表与远程服务实现对象之间的链接。Stub对象可以通过执行该对象的invoke()方法来完成对远程方法的调用。StubRemoteRefInvoke()Java网络编程 - Fall 2007 – RMI - 10
  • 11. 传输层传输层维持JVM之间的连接,所有的连接均采用TCP/IP协议,且均为基于流的网络连接。 RMI在TCP/IP协议的基础上采用了JRMP(Java Remote Method Protocol) 协议本地连接也采用TCP/IP协议Java网络编程 - Fall 2007 – RMI - 11
  • 12. 命名远程对象如何寻找远程对象?ServerClientRMI RegistryJava网络编程 - Fall 2007 – RMI - 12
  • 13. 命名远程对象启动RMI Registry 服务。ServerClientRMI RegistryJava网络编程 - Fall 2007 – RMI - 13
  • 14. 命名远程对象创建服务对象并启动服务,准备接受调用。ServerClientRMI RegistryJava网络编程 - Fall 2007 – RMI - 14
  • 15. 命名远程对象向RMI Registry服务注册该对象。ServerClientRMI RegistryregisterJava网络编程 - Fall 2007 – RMI - 15
  • 16. 命名远程对象客户端在RMI Registry服务中查找远程对象。ServerClientRMI RegistrylookupJava网络编程 - Fall 2007 – RMI - 16
  • 17. 命名远程对象在RMI Registry服务中查找远程对象。ServerClientRMI RegistryinvokeJava网络编程 - Fall 2007 – RMI - 17
  • 18. 主要内容 6-1 RMI基本概念 6-2 RMI的使用 Let's go to ...Java网络编程 - Fall 2007 – RMI - 18
  • 19. 准备工作设置环境变量Java网络编程 - Fall 2007 – RMI - 19
  • 20. 接口public interface Calculator extends java.rmi.Remote { public long add(long a, long b) throws java.rmi.RemoteException; public long sub(long a, long b) throws java.rmi.RemoteException; public long mul(long a, long b) throws java.rmi.RemoteException; public long div(long a, long b) throws java.rmi.RemoteException; } Java网络编程 - Fall 2007 – RMI - 20
  • 21. 接口的实现public class CalculatorImpl extends java.rmi.server.UnicastRemoteObject implements Calculator { public CalculatorImpl() throws java.rmi.RemoteException { super(); } public long add(long a, long b) throws java.rmi.RemoteException { return a + b; } ………… }Java网络编程 - Fall 2007 – RMI - 21
  • 22. 生成stub类工程目录接口实现class文件最终生成的stubJava网络编程 - Fall 2007 – RMI - 22
  • 23. 准备工作设置环境变量Java网络编程 - Fall 2007 – RMI - 23
  • 24. 服务程序import java.rmi.Naming; public class CalculatorServer { public CalculatorServer() { try { Calculator c = new CalculatorImpl(); Naming.rebind("rmi://localhost:1099/CalculatorService", c); } catch (Exception e) { System.out.println("Trouble: " + e); } } public static void main(String args[]) { new CalculatorServer(); } }Java网络编程 - Fall 2007 – RMI - 24
  • 25. 客户程序 public static void main(String[] args) { try { Calculator c = (Calculator) Naming.lookup("rmi://localhost/CalculatorService"); System.out.println( "4-3="+c.sub(4, 3) ); System.out.println( "4+5="+c.add(4, 5) ); System.out.println( "3*6="+c.mul(3, 6) ); System.out.println( "9/3="+c.div(9, 3) ); } catch (MalformedURLException murle) { ……} catch (RemoteException re) { ……} catch (NotBoundException nbe) { ……} catch (java.lang.ArithmeticException ae) { ……} }Java网络编程 - Fall 2007 – RMI - 25
  • 26. 运行在工程目录中运行rmiregistry程序; 运行服务程序; 运行客户程序。Java网络编程 - Fall 2007 – RMI - 26
  • 27. 下一章: Java安全THE ENDJava网络编程 - Fall 2007 – RMI - 27