`

Java远程方法调用(RMI)

阅读更多

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());   
	        }
	  
	    }   
}
 
分享到:
评论

相关推荐

    三种方式实现java远程调用(rmi),绝对可用

    在提供的压缩包文件中,"三种方式(原始方式_spring_jndi)实现java远程调用(rmi)"包含了相关的示例代码,帮助开发者理解并实践这三种RMI实现方法。在MyEclipse或其他Java开发环境中导入这些代码,可以进行调试和...

    Java-远程方法调用RMI参数详解.docx

    Java 远程方法调用(Remote Method Invocation,RMI)是一种在分布式环境中调用对象方法的技术,它使得Java应用程序能够透明地调用运行在不同 JVM 上的远程对象的方法。RMI 包含了一系列的参数,这些参数对于优化...

    java 远程方法调用(java rmi)

    Java 远程方法调用(Java RMI,Remote Method Invocation)是Java平台提供的一种用于构建分布式应用程序的技术。它允许一个对象在某个Java虚拟机(JVM)上执行的方法调用另一个在不同JVM上的对象的方法,仿佛它们是...

    java远程方法调用

    ### Java远程方法调用(RMI):深入解析与实践 #### 一、RMI概念与原理 Java远程方法调用(Remote Method Invocation,简称RMI)是Java平台提供的一种分布式计算模型,允许一个Java虚拟机(JVM)上的对象通过网络...

    java rmi远程方法调用 客户端

    Java RMI(Remote Method Invocation,远程方法调用)是Java平台提供的一种分布式计算技术,它允许在不同的Java虚拟机之间透明地调用对象的方法。在RMI架构中,客户端能够像调用本地对象一样调用远程服务器上的对象...

    Java RMI 远程方法调用

    Java RMI(Remote Method Invocation,远程方法调用)是Java平台提供的一种分布式计算技术,它允许在不同的Java虚拟机之间进行方法调用,仿佛这些方法是在本地对象上执行一样。这个技术极大地简化了构建分布式应用的...

    Java RMI远程方法调用详解-例子代码

    首先,我们需要定义一个实现了`java.rmi.Remote`接口的类,比如`MyRemoteInterface.java`,并在这个接口中声明所有需要远程调用的方法。这些方法必须抛出`java.rmi.RemoteException`,因为网络通信可能会出现异常。...

    java远程调用rmi实例

    在Windows环境下,同样需要JRE,运行客户端程序来执行远程调用。 注意,RMI的安全性、异常处理和网络通信细节也是开发者需要考虑的问题。例如,需要处理可能的`RemoteException`,以及配置JVM的安全策略文件以允许...

    rmi java 远程方法调用

    2. **类型安全**:由于使用Java语言,RMI提供了类型安全的远程调用。 3. **高性能**:RMI可以利用Java的自动内存管理和垃圾收集机制,减少资源消耗。 ### RMI的劣势 1. **平台依赖**:虽然Java有“一次编写,到处...

    Java RMI(远程方法调用)Demo

    1. **创建远程接口**:定义一个继承自Remote的接口,声明需要远程调用的方法。 2. **实现远程接口**:编写一个类实现这个接口,提供具体的方法实现。 3. **注册远程对象**:在服务器端创建远程对象实例,然后将其...

    JAVA远程调用RMI与应用

    JAVA远程调用RMI与应用 一、RMI(Remote Method Invocation)概念解析 RMI,即远程方法调用,是Java平台提供的分布式计算模型,它允许Java对象跨网络进行方法调用,如同本地调用一样。RMI的实现基于Java的面向对象...

    JAVA RMI远程调用方法代码

    接下来,`getMemberAccountCount`方法实现了远程调用逻辑,通过`this.ref.invoke`方法调用了远程方法,并处理了可能抛出的异常。 #### 2. 客户端代码分析 客户端通过`Naming.lookup`方法获取远程服务的引用,然后...

    RMI远程方法调用RMI远程方法调用

    1. **远程接口**:定义了可以被远程调用的方法,这个接口需要继承自`java.rmi.Remote`。 2. **远程实现**:实现了远程接口的具体逻辑,它通常包含实际业务功能的代码。 3. **Stub**:客户端调用的代理对象,它负责将...

    自己的Java远程方法调用组件

    Java远程方法调用(Remote Method Invocation,简称RMI)组件是一种关键的技术,它允许Java应用程序在不同的网络节点之间透明地调用对象的方法,仿佛这些对象都在本地进程中一样。这种技术在构建分布式系统、大型...

    java rmi 远程方法调用 服务端

    1. 远程接口(Remote Interface):定义了可以被远程调用的方法,这些方法必须声明抛出`java.rmi.RemoteException`。接口需要使用`@Remote`注解标记。 2. 远程实现类(Remote Implementation):实现了远程接口,并...

Global site tag (gtag.js) - Google Analytics