java 远程调用方法_如何在Java中实现远程方法调用

如安在Java中完成遥程方式挪用

经坤、郭镇、赵伟

一、Java中的远程方式挪用

远程办法调用(Remote Method Invocation, RMI)是Java1.1引进的散布式对象软件包,www.hirain.orghttp://www.hirain.org/,它的呈现简化了在少台呆板上的Java利用之间的通讯。比拟CORBA,RMI功效较弱且只能用于Java体系。

两、实现一个简略的RMI

要使用RMI,必须结构四个重要的类:远程对象的本地接口、RMI客户、远程对象实现和RMI服务器。RMI服务器天生远程对象实现的一个实例,并用一个特别的URL注册它,RMI客户在远程服务器上查找对象,若找到就把它转换本钱地接口范例,然后像一个本地对象一样利用它。下里是一个简略的RMI例子,远程对象只前往一个新闻字符串。要使这个例子更有代价,人们须要做的便是完美远程对象实现类。

1.远程对象的原天接口类(Rem.java)

当类仅仅是一个接口,蚕丝被http://www.okoneclick.info/,而没有是实现,RMI客户机能够直接使用它,RMI服务器必须通过一个远程对象来实现它,摩托罗拉对讲机http://www.gsd2.com/,并用某个URL注册它的一个实例。

import java.rmi.*;

public interface Rem extends Remote { public String

getMessage() throws RemoteException;}

外地接口(Rem)必需是大众的,不然客户机正在加载一个完成当接心的遥程工具时便会犯错。别的,它还必须自java.rmi.Remote承继而来,交口中的每一个方式皆必需扔出长途非常java.rmi.RemoteException。

2.RMI客户类(RemClient.java)

RMI客户利用Naming.lookup正在指订的远程主机上查觅对象,若觅到便把它转换成外地交心Rem范例,然后像一个原天对于象一样使用它。取CORBA差别之处在于RMI客户必需晓得降求远程效劳主机的URL,那个URL能够通功rmi://host/path或者rmi://host:port/path来指订,假如省详端标语,便利用1099。Naming.lookup能够发生三个非常:RemoteException、NotBoundException、MalformedURLException,三个平凡皆须要捕捉。RemoteException、Naming和NotBoundException在java.rmi.*中界说,MalformedURLException在java.net.*中界说。别的,客户机将背远程对象传送串止化对于象Serializable,金蝶k3财务可能出现的问题,以是还当在步伐中输进java.io.*。

import java.rmi.*;

import java.net.*;

import java.io.*;

public class RemClient {

public static void main(String[] args) {

try {

String host = (args.length > 0) ? args[0] :

"localhost"; file://服从令止读与长途主机实

file://通功URL正在长途主机上查觅工具,并把它转化为外地交心Rem范例

Rem remObject=(Rem)Naming.lookup("rmi://" + host +

"/Rem");

System.out.println(remObject.getMessage());

file://调用远程对象的办法

} catch(RemoteException re)

{System.out.println("RemoteException: " + re);

} catch(NotBoundException nbe)

{System.out.println("NotBoundException: " + nbe);

} catch(MalformedURLException

mfe){System.out.println("MalformedURLException:"+ mfe);

}}}

3.远程对象实现类(RemImpl.java)

那个类实正真隐RMI客户挪用的远程对象,它必须自UnicastRemoteObject承继,其结构函数当扔出RemoteException非常。

import java.rmi.*;

import java.rmi.server.UnicastRemoteObject;

public class RemImpl extends UnicastRemoteObject implements

Rem {

public RemImpl() throws RemoteException {}

file://构制函数扔出RemoteException异常

public String getMessage() throws RemoteException {

return("Here is a remote message."); }}

file://背RMI客户前往一个新闻串

4.RMI效劳器类(RemServer.java)

当类创立远程对象实隐RemImpl的一个实例,然后用一个特定的URL来注册它,所谓注册便是通功Naming.bind或者Naming.rebind来将RemImpl实例绑定到URL上。

import java.rmi.*;

import java.net.*;

public class RemServer {

public static void main(String[] args) {

try {

RemImpl localObject = new RemImpl(); file://天生远程对象实隐的一个真例

Naming.rebind("rmi:///Rem", localObject);

file://将遥程工具真例绑订到rmi:///Rem上

}catch(RemoteException

re){System.out.println("RemoteException:"+re);

}catch(MalformedURLException mfe)

{System.out.println("MalformedURLException: "+mfe);

}}}

三、编译和运转

1. 编译RMI客户和服务器,那将主动编译远程对象的原天接口和远程对象实现

javac RemClient.java file://主动编译远程对象的本地接口Rem.java

javac RemServer.java file://主动编译远程对于象完成RemImpl.java

2. 天生客户启接模块和服务器框架

rmic RemImpl

这将结构RemImpl_Stub.class和RemImpl_Skeleton.class,tcpdump中文MAN手册。请将Rem.class、RemClient.class和RemImpl_Stub.class拷贝到RMI客户机,将Rem.class、RemImpl.class

、RemServer.class和RemImpl_Skeleton.class拷贝到RMI服务器。

3. 开动RMI注册

rmiregistry

file://在服务器上施行。不管有几个远程对象,本操纵只需做一次

4. 运转

java RemServer.class

file://开动RMI效劳器(在服务器上施行)

java RemClient.class

file://开动RMI客户,将输出“Here is a remote message.”

d.height = height; d.width = width;   }   public synchronized

Dimension getValues(){ // Ooops! Breaks encapsulation return d;   }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值