用RMI进行远程方法调用

远程方法调用(RMI)机制可以把面向对象的思想进一步扩展,因为你可以调用的对象不仅可以在本机上,也可以在别的主机上。本文就简单介绍rmi的编程方法。

首先介绍一些简单的rmi的概念。

1,服务器和客户:在rmi中,如果有一个对象进行远程方法调用,这个对象就叫做客户机对象,而远程对象则被称为服务器对象。

2,创建服务器对象的服务器程序:这个程序用来创建服务器对象,注册这个对象,使得客户可以通过注册的名称访问服务器对象。

3,接口(interface),接口可以让客户端了解服务器所能做的工作。更具体的说,就是它列出了可以在服务器上执行的所有方法。客户端程序必须能够找到这个类,否则就不能执行对服务器函数的调用。

4,客户桩(stub),有的书中翻译成为代码存根,它给客户端程序提供一个桩,这个桩上"绑"着服务器对象。当客户程序需要调用远程对象时,这个桩被下载到客户端(如果客户端有这个类,则不需要下载)。然后客户就可以像调用本地方法一样调用远程的方法了。

这个客户桩的作用是将客户向服务器的请求进行编码、进行传输,服务器执行这次调用后将结果返回到客户桩,客户桩进行解码,将解码后的结果传送到客户程序中。对于编写客户端的程序员来说,他不需要知道其中的具体过程。

客户桩不需要自己编写,后面会说明它的生成方法。它实现了前述的接口(interface)。

下面就通过一个例子来说明编写的过程。

1,编写服务器的接口:这一步是最主要的部分,因为接口是连接客户机与服务器的关键部分。在这个例子中,接口很简单,代码如下:

import java.rmi.*;
public interface Product extends Remote
{
  String getDescription() throws RemoteException;
}

在这里应注意的是,远程对象的接口一定要扩展(extend)Java.rmi包的Remote接口。同时接口中的所有的方法都要声明抛出RemoteException异常。这是因为由于网络连接的不可靠性,远程方法调用很可能失败。如果不声明异常,在远程方法调用失败后,应用程序就会无法结束。

2,编写服务器对象:

Java中具有一个可以直接使用的服务器类--UniCastRemoteObject。它存在于Java.rmi.server包中。我们可以直接扩展这个类,使它实现前述的接口。这样就可以使服务器满足我们的需要。

import java.rmi.server.*;
import java.rmi.*;
public class ProductImpl extends UnicastRemoteObject implements Product
{
  public ProductImpl(String name) throws RemoteException
  {
   Desc = name;
  }
  public String getDescription() throws RemoteException
  {
   return "This is "+Desc+" product";
  }
  private String Desc;
}

可以看到,rmi服务器的实现和其他的方法代码没有什么不同。

时间: 2024-11-01 21:33:10

用RMI进行远程方法调用的相关文章

异常-rmi通讯部分方法调用成功,部分调用失败

问题描述 rmi通讯部分方法调用成功,部分调用失败 rmi运行一段时间后,可能是几天也可能是几周.突然rmi客户端出现部分rmi方法调用不通.抛异常java.rmi.unmarshalException:error unmarshlling return;nested exception is; java.io.EOFException at sum.rmi.server.UnicastRef.invoke(UnicastRef.java:173)

Java远程方法调用RMI

前段时间,公司做web service的时候,看了一下资料,当时看见一个叫rmi的东西(远程方法调用),最近闲着,所以看了一下 ,感觉挺简单的!所以写了一个例子提供给大家把! rmi的服务端,必须要使用接口,同时还有接口的实现类!所以下面的两个文件是接口类和接口的实现类! UserDao 接口: /**   * 远程接口     必须继承与Remote对象   * @author spring sky   * date: 2012年2月7日 10:55:05   * Email:vipa1888

为什么要用rmi代理调用远程方法

问题描述 为什么要用rmi代理调用远程方法 为什么要用rmi代理调用远程方法,为什么不直接反序列化远程对象直接调用方法. 求解?

Delphi中idhttp.post方式调用datasnap rest远程方法

idhttp.get方式调用,这种比较简单,大家都会.post方式网上却没有任何成功的代码,本人也是摸索了一个上午才搞定. 分享给大家. (1)post方式调用的远程方法,方法名必须加"update"前缀,不加行不?你试下啦. function TServerMethods1.updateecho(const value: String): String; begin Result := value; end; 更多精彩内容:http://www.bianceng.cnhttp://w

DWR调用远程方法的错误和异常处理

记得以前通常我们在调用 DWR 的远程方法是这样写 Remote.method(params,function(data){ //服务端执行后客户端的逻辑,如 alert("服务端执行后返回的数据:"+data); }); Remote.method(params,function(data){ //服务端执行后客户端的逻辑,如 alert("服务端执行后返回的数据:"+data); }); 第一个至倒数第二个参数为客户端传向服务端的数据,最后一个参数直接就是一个回

javaee-两个GlassFish4.0服务器之间的远程EJB调用

问题描述 两个GlassFish4.0服务器之间的远程EJB调用 两台服务器在不同的机器上,环境为jdk8,javaee7. 当我在一台服务器A上调用服务器B的时候,如果在普通的java main方法中调用 : InitialContext ctx = new InitialContext(); ctx.lookup("corbaname:iiop:192.168.0.210:3700#java:global/RemoteEjb/SayHelloService!rm.SayHelloServic

ASP远程脚本调用

远程脚本调用技术(Remote Scripting)的最大特点是:客户端脚本调用服务器脚本时无需刷新整个页面.一般情况下,Web页面需要与服务器交互时必须提交表单数据,刷新整个页面.这不仅不利于改善浏览效果,也不利于提高服务器效率.利用远程脚本调用技术(Remote Scripting),客户端脚本可以像调用本地函数一样调用远程脚本函数,从而极大地方便了交互式Web应用的开发.使得那些基于浏览器的应用更接近于传统的Win32应用.在复杂的表单验证和频繁的数据库操作中,应用远程脚本调用技术的优点是

android-Android代码调用mysql数据库,怎样调用,webservice方法调用怎么调用

问题描述 Android代码调用mysql数据库,怎样调用,webservice方法调用怎么调用 Android客户端调用远程动态mysql数据库,要求能向里面添加数据,并能把数据库中 的数据显示到Android代码客户端,新手,希望能给点给点demo参考一下! 解决方案 android用httpclient访问的jsp服务器端,jsp得到数据入库. 自己google android 调用web service android httpclient 以及 jsp 访问数据库 jsp 增删改查 j

Android学习之远程绑定调用service

http://blog.csdn.net/q1234456gggg_jkjg/article/details/8479070 远程绑定调用service主要是用来不同进程的信息共享.就比如服务器和客户端,在服务器端设置好一个service提供方法或信息,然后客户端可以直接调用服务器端service提供方法或信息.这里有个前提是客户端必须有和服务器端一份一样的AIDL,然后服务器端在客户端使用的系统上有注册过(也就是安装运行过一次),之后客户端就可以远程绑定调用服务器端的service了. 具体的