Java远程方法调用(Java Remote Method Invocation,简称RMI)是实现RPC的一种机制。Java RMI实现过程可分为以下几个步骤:
1. 创建远程接口及声明远程方法;
2.
创建远程对象及实现远程方法;
3.
服务器端启动RMI注册服务,注册远程对象;
4.
客户端查找远程对象并调用远程方法。
远程接口具有如下特点:
1. 远程接口必须为public属性。如果不这样,除非客户端与远程接口在同一个包内,否则 当试图装入实现该远程接口的远程对象时,调用会得到错误结果。
2. 远程接口必须扩展接口java.rmi.Remote。
3. 除与应用程序本身特定的例外之外,远程接口中的每个方法都必须在自己的throws从句中 声明java.rmi.RemoteException。(或 RemoteException 的父类)。
4. 作为参数或返回值传递的一个远程对象(不管是直接,还是本地对象中嵌入)必须声明为远 程接口,而不应声明为实施类。
5. 参数或返回值若为对象,该对象必须实行序列号接口 Serializable
其代码如下:
1)
创建远程接口及声明远程方法
package com.server;
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface RmiSample extends Remote{
public int sum(int a, int b) throws RemoteException;
public void save(Student s) throws RemoteException;
public Student get() throws RemoteException;
}
2) 创建远程对象及实现远程接口方法
package com.server;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
public class RmiSampleImpl extends UnicastRemoteObject implements RmiSample{
/**
*
*/
private static final long serialVersionUID = -7851182277085789517L;
protected RmiSampleImpl() throws RemoteException {
super();
}
@Override
public int sum(int a, int b) throws RemoteException {
return a + b;
}
@Override
public void save(Student s) throws RemoteException {
System.out.println("student id is :"+s.getId());
System.out.println("student name is :"+s.getName());
}
@Override
public Student get() throws RemoteException {
Student s = new Student();
s.setId(2);
s.setName("学生2");
return s;
}
}
3) 服务器端启动RMI注册服务,将远程对象进行注册
package com.server;
import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
public class RmiSampleServer {
public static void main(String[] args) {
try{
LocateRegistry.createRegistry(8808);
//LocateRegistry.createRegistry(1099);
RmiSampleImpl server= new RmiSampleImpl();
Naming.rebind("//localhost:8808/SAMPLE-SERVER" , server);
//Naming.rebind("server" , server);
}catch (MalformedURLException me){
System.out.println("Malformed URL: " + me.toString());
}catch(RemoteException re){
System.out.println("Remote Exception: "+re.toString());
}
}
}
4) 客户端查找远程对象并调用远程方法
package com.client;
import java.rmi.RemoteException;
import java.rmi.Naming;
import com.server.RmiSample;
import com.server.Student;
public class RmiSampleClient {
public static void main(String[] args) {
try {
String url = "//localhost:8808/SAMPLE-SERVER";
//RmiSample RmiObject = (RmiSample) Naming.lookup("server");
RmiSample RmiObject = (RmiSample) Naming.lookup(url);
System.out.println(" 3 + 2 = " + RmiObject.sum(3, 2));
Student s = new Student();
s.setId(1);
s.setName("学生1");
RmiObject.save(s);
Student student = RmiObject.get();
System.out.println("student id is :"+student.getId());
System.out.println("student name is :"+student.getName());
} catch (RemoteException rex) {
System.out.println("Error in lookup: " + rex.toString());
} catch (java.net.MalformedURLException me) {
System.out.println("Malformed URL: " + me.toString());
} catch (java.rmi.NotBoundException ne) {
System.out.println("NotBound: " + ne.toString());
}
}
}
分享到:
相关推荐
在提供的压缩包文件中,"三种方式(原始方式_spring_jndi)实现java远程调用(rmi)"包含了相关的示例代码,帮助开发者理解并实践这三种RMI实现方法。在MyEclipse或其他Java开发环境中导入这些代码,可以进行调试和...
Java 远程方法调用(Remote Method Invocation,RMI)是一种在分布式环境中调用对象方法的技术,它使得Java应用程序能够透明地调用运行在不同 JVM 上的远程对象的方法。RMI 包含了一系列的参数,这些参数对于优化...
Java 远程方法调用(Java RMI,Remote Method Invocation)是Java平台提供的一种用于构建分布式应用程序的技术。它允许一个对象在某个Java虚拟机(JVM)上执行的方法调用另一个在不同JVM上的对象的方法,仿佛它们是...
### Java远程方法调用(RMI):深入解析与实践 #### 一、RMI概念与原理 Java远程方法调用(Remote Method Invocation,简称RMI)是Java平台提供的一种分布式计算模型,允许一个Java虚拟机(JVM)上的对象通过网络...
Java RMI(Remote Method Invocation,远程方法调用)是Java平台提供的一种分布式计算技术,它允许在不同的Java虚拟机之间透明地调用对象的方法。在RMI架构中,客户端能够像调用本地对象一样调用远程服务器上的对象...
Java RMI(Remote Method Invocation,远程方法调用)是Java平台提供的一种分布式计算技术,它允许在不同的Java虚拟机之间进行方法调用,仿佛这些方法是在本地对象上执行一样。这个技术极大地简化了构建分布式应用的...
首先,我们需要定义一个实现了`java.rmi.Remote`接口的类,比如`MyRemoteInterface.java`,并在这个接口中声明所有需要远程调用的方法。这些方法必须抛出`java.rmi.RemoteException`,因为网络通信可能会出现异常。...
在Windows环境下,同样需要JRE,运行客户端程序来执行远程调用。 注意,RMI的安全性、异常处理和网络通信细节也是开发者需要考虑的问题。例如,需要处理可能的`RemoteException`,以及配置JVM的安全策略文件以允许...
2. **类型安全**:由于使用Java语言,RMI提供了类型安全的远程调用。 3. **高性能**:RMI可以利用Java的自动内存管理和垃圾收集机制,减少资源消耗。 ### RMI的劣势 1. **平台依赖**:虽然Java有“一次编写,到处...
1. **创建远程接口**:定义一个继承自Remote的接口,声明需要远程调用的方法。 2. **实现远程接口**:编写一个类实现这个接口,提供具体的方法实现。 3. **注册远程对象**:在服务器端创建远程对象实例,然后将其...
JAVA远程调用RMI与应用 一、RMI(Remote Method Invocation)概念解析 RMI,即远程方法调用,是Java平台提供的分布式计算模型,它允许Java对象跨网络进行方法调用,如同本地调用一样。RMI的实现基于Java的面向对象...
接下来,`getMemberAccountCount`方法实现了远程调用逻辑,通过`this.ref.invoke`方法调用了远程方法,并处理了可能抛出的异常。 #### 2. 客户端代码分析 客户端通过`Naming.lookup`方法获取远程服务的引用,然后...
1. **远程接口**:定义了可以被远程调用的方法,这个接口需要继承自`java.rmi.Remote`。 2. **远程实现**:实现了远程接口的具体逻辑,它通常包含实际业务功能的代码。 3. **Stub**:客户端调用的代理对象,它负责将...
Java远程方法调用(Remote Method Invocation,简称RMI)组件是一种关键的技术,它允许Java应用程序在不同的网络节点之间透明地调用对象的方法,仿佛这些对象都在本地进程中一样。这种技术在构建分布式系统、大型...
1. 远程接口(Remote Interface):定义了可以被远程调用的方法,这些方法必须声明抛出`java.rmi.RemoteException`。接口需要使用`@Remote`注解标记。 2. 远程实现类(Remote Implementation):实现了远程接口,并...