Java远程方法调用
,即Java RMI
(Java Remote Method Invocation)是Java编程语言里,一种用于实现远程过程调用
的应用程序编程接口
。它使客户机上运行的程序可以调用远程服务器上的对象。远程方法调用特性使Java编程人员能够在网络环境中分布操作。RMI全部的宗旨就是尽可能简化远程接口对象的使用。
Java RMI极大地依赖于接口。在需要创建一个远程对象的时候,程序员通过传递一个接口来隐藏底层的实现细节。客户端得到的远程对象句柄正好与本地的根代码连接,由后者负责透过网络通信。这样一来,程序员只需关心如何通过自己的接口句柄发送消息。(此段摘自Wiki)
RMI其实是一个远程代理模式,程序员在本地调用的代码实质上是交给了服务器处理接口的请求,并将结果返回。对于程序而言看到的如同在本地调用接口一样的效果。
在这里,我将重点结合Eclipse来讲解如何编写Java RMI。
在讲解之前我们需要以下几个工具 :
Eclipse
3.0 or above
RMIC Eclipse Plugin
-- 此工具用来生成RMI的Stub类,下载地址:https://rmic-eclipse-plugin.dev.java.net/
对于需要访问传入到接口的参数的对象都应使他成为一个序列化的对象,即实现Serializable接口,否则数据是无法传入到服务器中。接下来开始代码的讲解
一、首先编写一个接口中的参数类型,此类型也是一个接口
package remote.test;
public interface HelloTask {
public String execute();
}
二、实现这个接口,记住,实现的时候一定要实现Serializeable接口
package remote.test;
import java.io.Serializable;
public class HelloTaskImpl implements HelloTask,Serializable{
private static final long serialVersionUID = 1L;
public String execute() {
return "Hello World";
}
}
三、编写Remote接口
package remote.test;
import java.rmi.RemoteException;
public interface IHello extends java.rmi.Remote{
String say(HelloTask task) throws RemoteException;
}
四、编写Server类
package remote.test.server;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import remote.test.IHello;
import remote.test.HelloTask;
public class HelloServer extends java.rmi.server.UnicastRemoteObject implements
IHello{
private static final long serialVersionUID = 2279096828129284306L;
public HelloServer() throws RemoteException {
super();
}
public String say(HelloTask task) throws RemoteException {
String result = task.execute();
System.out.println("execute say,task.execute : " + result);
return result;
}
public static void main(String[] args) {
try {
HelloServer h = new HelloServer();
Registry registry = LocateRegistry.createRegistry(2500);
registry.bind("hello", h);
System.out.println("Start...");
} catch (Exception e) {
e.printStackTrace();
}
}
}
您看到在HelloServer将会实现IHello中的接口,并执行HelloTask的接口,HelloTask是从客户端那边传送过来,所以执行任务的逻辑将在say方法中由服务端来实现,客户端是不知道服务端如何执行这个HelloTask,他只需要知道执行的结果。
对于服务端代码的编写,这里需要注意的是Registry,Registry是由Java Security管理,如果没有权限getRegistry将会报错,如果使用如下方法获得
Registry registry = LocateRegistry.getRegistry(2500);
就需要注意,在Jar中需要有个*.policy策略文件,如果没有设置这些将会抛出"Access Denied
"异常。此方式的编写这里不详细讲解,请搜索网络需找资料。
接下来registry只需要绑定一个名字空间和对象即可开启2500端口开始监听。
五、生成Stub对象
在java环境中生成这个对象需要使用rmic命令以及rmiregistry,这两个命令的用法其实也比较简单,但是无论如何使用起来还是会觉得有点麻烦,在Spring中也有rmi的功能,其实他也就是包装了一下rmi的类,但是他最大的优点在于它可以自动生成这些托管类,那么使用RMIC - Eclipse - Plugin也可以帮助我们自动生成。
装好RMIC - Eclipse之后,对着项目的根目录点击右键,您将会看到"Rmic Marcar/Desmarcar para Auto-Gerar Stubs
"的选项,点击它,这时你将会在Bin文件夹下看到Hello_Stub
类,如果有接口继承了Remote
类,那么他将会自动搜索并生成。
六、编写Client类
package remote.test.client;
import java.rmi.Naming;
import remote.test.HelloTask;
import remote.test.HelloTaskImpl;
import remote.test.IHello;
public class HelloClient {
public static void main(String[] args) {
try {
IHello hi = (IHello) Naming.lookup("rmi://127.0.0.1:2500/hello");
HelloTask task = new HelloTaskImpl();
for (int i = 0; i < 10; i++) {
System.out.println(hi.say(task));
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
在Client类中,首先需要使用JNDI的Naming来需找服务,并从服务中返回对象。URL的格式可以参考JDK中RMI URL。
七、运行
先运行Server类,成功以后,运行Cient类,您将会看到Server类接收到Client的请求,并将请求打印出来,同时Client类获得Server返回的结果,并打印出来。
分享到:
相关推荐
《基于RMI的Java商品管理系统实现详解》 在IT领域,远程方法调用(Remote Method Invocation,简称RMI)是Java编程语言中一种强大的分布式计算技术。本项目“RMI商品管理系统”即利用了RMI特性,实现了商品信息的...
通过本次实验,学生能够深入了解 Java RMI 的工作原理,并能够熟练地使用 RMI 开发简单的分布式应用程序。实验不仅涉及了远程接口的设计与实现,还涵盖了服务器端与客户端程序的编写、编译以及运行过程中的注意事项...
Java是一种广泛使用的面向对象的编程语言,由Sun Microsystems(现为Oracle公司)于1995年发布。它的设计目标是具有高可移植性、健壮性和安全性,使其能够跨平台运行,从移动设备到大型服务器,都能找到Java的身影。...
11.4.6 编写具体的业务逻辑类RegeditImpl.java 11.4.7 编写Struts的配置文件struts-config.xml 11.4.8 编写Spring的配置文件spring-config.xml 11.4.9 配置web.xml 11.4.10 启动Tomcat运行示例 11.5 小结 第十二章 ...
11.4.6 编写具体的业务逻辑类RegeditImpl.java 11.4.7 编写Struts的配置文件struts-config.xml 11.4.8 编写Spring的配置文件spring-config.xml 11.4.9 配置web.xml 11.4.10 启动Tomcat运行示例 11.5 小结 第十二章 ...
11.4.6 编写具体的业务逻辑类RegeditImpl.java 11.4.7 编写Struts的配置文件struts-config.xml 11.4.8 编写Spring的配置文件spring-config.xml 11.4.9 配置web.xml 11.4.10 启动Tomcat运行示例 11.5 小结 第十二章 ...
- **Eclipse IDE**:掌握如何使用Eclipse进行Java程序的编写、调试和部署。Eclipse是一款广泛使用的Java集成开发环境(IDE),支持代码编辑、调试、构建等多种功能。 - **Linux下的Java开发**:在Linux环境下编写和...
JAVA 调用 SAP SOAP webservice 详解 在本文中,我们将详细介绍如何使用 JAVA 调用 SAP SOAP webservice,包括配置 SAP 登录信息、创建 java 项目、添加 web 服务客户端、生成 JAVA 类、调用接口等步骤。 配置 SAP...
11.4.6 编写具体的业务逻辑类RegeditImpl.java 11.4.7 编写Struts的配置文件struts-config.xml 11.4.8 编写Spring的配置文件spring-config.xml 11.4.9 配置web.xml 11.4.10 启动Tomcat运行示例 11.5 小结 第十二章 ...
### Eclipse开发Web Service详解 #### 一、理解Web Service与Eclipse Web Service是一种通过网络进行数据交换和服务交互的标准方式,允许不同系统间基于XML的数据通信。Eclipse是一款开源的集成开发环境(IDE),...
- 在Eclipse或其他IDE中新建一个Java Web项目。 - 配置项目的类路径,添加Axis1相关的库文件。 2. **编写服务接口**: - 定义一个接口,例如`HelloWorldService`,其中包含一个方法`sayHello(String name)`。 -...
【EJB2.0开发详解:使用Eclipse和MyEclipse】 企业级JavaBeans(Enterprise JavaBeans,简称EJB)是Java平台上的一个核心组件,主要用于构建可扩展、安全且可移植的企业级应用。EJB2.0是EJB规范的一个重要版本,它...
JAVA远程控制是利用JAVA的RMI(Remote Method Invocation,远程方法调用)或JMX(Java Management Extensions,Java管理扩展)等技术,使得运行在不同计算机上的程序能够相互通信,进行数据交换和操作控制。...
- **可移植**:Java程序可以在任何支持JVM的平台上运行,实现了一次编写,到处运行的理念。 - **高性能**:虽然Java最初被认为性能较差,但随着JIT编译器的发展,其执行效率已显著提高。 #### 三、Java的应用平台...
### Java访问C#开发的Webservice详解 #### 一、引言 在现代软件开发过程中,尤其是对于大型项目而言,采用分布式系统架构已经成为一种常态。分布式应用能够将复杂的业务逻辑分解并部署到不同的服务器上,从而提高...
### Java技术体系详解 #### 一、Java技术体系概览 Java作为一种广泛使用的编程语言,在IT行业中占有举足轻重的地位。为了帮助那些希望在Java领域发展的技术人员更好地理解和掌握Java的相关知识和技术,本文将根据...
1. Java技术基础:Java以其“一次编写,到处运行”的特性闻名,具有跨平台性、安全性、稳定性和高性能。在远程视频会议系统中,Java主要负责后台服务的处理,如用户管理、会话管理、数据传输等。 2. Java网络编程:...
Lunar Eclipse 的 RMI 生成插件简化了 RMI 应用程序的开发过程,自动创建远程接口、服务器端实现、客户端存根等必要组件。这极大地减少了手动编写这些代码的时间和可能出现的错误,使得开发者可以更专注于业务逻辑。...