用RMI实现基于Java的分布式计算

小幽米

小幽米

2016-02-19 17:05

今天图老师小编给大家展示的是用RMI实现基于Java的分布式计算,精心挑选的内容希望大家多多支持、多多分享,喜欢就赶紧get哦!

  Java 2 Enterprise Edition(J2EE)远程方法调用(Remote Method Invocation,RMI)框架允许你创建透明的、分布式的服务和应用程序。基于RMI的应用程序由Java对象构成,这些对象相互调用,同时忽略对方的位置。换言之,一个Java对象可调用另一个虚拟机上的某个Java对象的方法,整个过程和调用同一个虚拟机上的某个Java对象的方法无异。驻留在不同虚拟机上的对象为了相互获得引用,可以使用RMI的查找服务,或者将对象引用作为方法调用的一个参数或者返回值来接收。参数和返回值借助Java的对象序列化机制由RMI来进行封送。

  远程对象和接口

  Java提供了一个完全限定名称为java.rmi.Remote的接口。任何对象要想参与和另一个Java对象的远程会话,就必须直接或间接地实现该接口。尤其要注意的是,任何由java.rmi.Remote接口来标识的对象都暗示着它的方法可从其他任何虚拟机进行调用。实现了java.rmi.Remote接口的对象通常称为远程对象,必须采用以下方式来声明它的方法:

  每个支持远程调用的方法都必须在其throws子句中声明java.rmi.RemoteException。

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

  对于一个可远程调用的方法,它的每个非基本(nonprimitive)参数或者返回值都必须直接或间接地声明为实现了java.io.Serializable接口。

  除了实现java.rmi.Remote接口和正确声明任何远程方法之外,远程对象必须提供一个无参数的构造函数,它能引发一个java.rmi.RemoteException异常。这就保证了对象可基于一种序列化状态来远程构造。

  远程对象必须导出,以接收传入的远程方法调用。为此,你通常需要扩展java.rmi.server.UnicastRemoteObject或者java.rmi.activation.Activatable。通过对其中任何一个类进行扩展,远程对象就可在创建时自动导出。

  以下接口定义展示了java.rmi.Remote接口最典型的用法:

  

import java.rmi.Remote;
import java.rmi.RemoteException;
public interface TimeKeeper extends Remote
{
public String currentDate() throws RemoteException;
public String currentTime() throws RemoteException;
}

  由于String类声明为实现了java.io.Serializable接口,所以String是远程方法的有效返回类型。

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

  以下代码展示了如何实现TimeKeeper接口,以便定义一个有效的远程对象:

  

import java.rmi.RemoteException;
import java.util.Calendar;
import java.util.GregorianCalendar;
public class TimeKeeperImpl implements TimeKeeper
{
public TimeKeeperImpl()
throws RemoteException
{
}
public String currentDate() throws RemoteException
{
Calendar cal = new GregorianCalendar();
String retVal = (cal.get(Calendar.MONTH) + "/" +
cal.get(Calendar.DAY_OF_MONTH) + "/" +
cal.get(Calendar.YEAR));
return retVal;
}
public String currentTime() throws RemoteException
{
Calendar cal = new GregorianCalendar();
String retVal = (cal.get(Calendar.HOUR_OF_DAY) + ":" +
cal.get(Calendar.MINUTE) + ":" +
cal.get(Calendar.SECOND));
return retVal;
}
}

展开更多 50%)
分享

猜你喜欢

用RMI实现基于Java的分布式计算

编程语言 网络编程
用RMI实现基于Java的分布式计算

基于Java的企业分布式应用

Java JAVA基础
基于Java的企业分布式应用

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

深入Java分布式计算的使用分析

编程语言 网络编程
深入Java分布式计算的使用分析

用SQL实现分布式数据复制

ASP
用SQL实现分布式数据复制

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

分布式查询和分布式事务

SQLServer
分布式查询和分布式事务

J2EE中用RMI和CORBA进行分布式Java编程

编程语言 网络编程
J2EE中用RMI和CORBA进行分布式Java编程

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

非法关机后重新开机取消扫描和检测硬盘分区的方法

非法关机后重新开机取消扫描和检测硬盘分区的方法

Java常见问题集锦

Java常见问题集锦
下拉加载更多内容 ↓