- 浏览: 1228933 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (718)
- HTML (13)
- JS基础 (23)
- JS应用 (40)
- AJAX (6)
- JSP相关 (12)
- JAVA基础 (52)
- JAVA应用 (74)
- APPLET (11)
- SWING\RCP (2)
- JAVA反射 (6)
- 设计模式 (26)
- 数据库设计 (20)
- Struts (35)
- Struts2 (12)
- Spring (22)
- Hibernate (45)
- Ibatis (18)
- mybatis (3)
- SSH (8)
- UML (5)
- WebService (3)
- XML (16)
- Log4j (7)
- WEB容器 (26)
- 数据结构 (36)
- Linux (34)
- Ruby on Rails (1)
- 其它技术 (27)
- IDE配置 (15)
- 项目实战 (2)
- Oracle (69)
- JAVA报表 (7)
- Android学习 (2)
- 博客链接 (1)
- 网络基础 (1)
- WEB集群 (1)
- .Net开发 (11)
- PB (4)
- 系统构建 (15)
最新评论
-
jnjeC:
牛逼啊哥们,讲得太好了
Maven仓库理解、如何引入本地包、Maven多种方式打可执行jar包 -
九尾狐的yi巴:
很好 感谢!
Itext中文处理(更新版) -
luweifeng1983:
有用的,重启一下嘛。
设置eclipse外部修改文件后自动刷新 -
Master-Gao:
设置了也不管用,怎么破呢?
设置eclipse外部修改文件后自动刷新 -
aigo_h:
锋子还有时间写博客,还是很闲哈!
Add directory entries问题
RMI软件下载:http://www.genady.net/rmi/v20/demos/
注意下载对应eclipse版本的RMI插件:http://www.genady.net/rmi/v20/downloads.html
因为如果插件版本与eclipse不一样可能会报以下错误:
Unable to use launch shortcut Reason: Plug-in net.genady.rmi was unable to load class net.genady.rmi.launching.ui.RMIServerLaunchShortcut. org/eclipse/jdt/debug/ui/launchConfigurations/JavaApplicationLaunchShortcut
Demo查看:http://www.genady.net/rmi/v20/demos/
对着这个demo一步步操作就会得到三个项目。注意demo中的操作。
先看一下RMI基本原理:
结合实例看一下RMI开发的主要步骤:
一个正常工作的RMI系统由下面几个部分组成: • 远程服务的接口定义 • 远程服务接口的具体实现 • Stub 和 Skeleton 文件 • 一个运行远程服务的服务器 • 一个RMI命名服务,它允许客户端去发现这个远程服务 • 类文件的提供者(一个HTTP或者FTP服务器) • 一个需要这个远程服务的客户端程序
1、编写并且编译接口的Java代码 2、编写并且编译接口实现的Java代码 3、从接口实现类中生成 Stub 和 Skeleton 类文件 4、编写远程服务的主运行程序 5、编写RMI的客户端程序 6、安装并且运行RMI系统
类图如下:
具体构建步骤可以看:http://www.genady.net/rmi/v20/demos/分别创建接口文件,接口的实现文件;以及服务端文件,客户端代码;
再运行注册服务器,最后运行服务端代码,再运行客户端代码看是否成功调用服务端方法。
附件中有rmi相关文章及示例代码。
下面太概列一下自己的步骤方便查看:
首先安装eclipse的rmi插件,下载对应eclipse版本的rmi插件。:
建立公共项目,里面就只有一个接口文件,因为服务端和客户端都要用到,所以建立这个公共项目了。
项目名:print-common
文件:RemotePrinter .java
package demo.rmi.print.common; import java.rmi.Remote; import java.rmi.RemoteException; public interface RemotePrinter extends Remote { public String add(String str1, String str2) throws RemoteException; }
下面建立服务端项目:
项目名:print-server
接口实现类:RemotePrinterImpl.java
package demo.rmi.print.server; import java.rmi.RemoteException; import java.rmi.registry.LocateRegistry; import java.rmi.registry.Registry; import java.rmi.server.UnicastRemoteObject; import demo.rmi.print.common.RemotePrinter; public class RemotePrinterImpl extends UnicastRemoteObject implements RemotePrinter { public RemotePrinterImpl() throws RemoteException{ } @Override public String add(String str1, String str2) throws RemoteException { System.out.print("add method has een called"); return str1 + str2; } }
注意接口实现类继承了UnicastRemoteObject 类,需要定义构造方法并抛出异常。
在服务端新建类PrintServer.java用于启动服务,绑定方法。
package demo.rmi.print.server; import java.rmi.registry.LocateRegistry; import java.rmi.registry.Registry; public class PrintServer { /** * @param args */ public static void main(String[] args) { try{ Registry r = LocateRegistry.getRegistry(); r.bind("printer", new RemotePrinterImpl()); System.out.println("printer server is ready"); }catch(Exception e){ e.printStackTrace(); } } }
完了之后重要的一步:右键点击项目print-server找到RMI里面点Enable Stubs Gerneration,这样在编译后的文件夹目录会多出一个RemotePrinterImpl_Stub.class;
右键点击项目print-server找到Properties,点RMI Compiler Properties.勾选-keep选项,在源代码目录产生RemotePrinterImpl_Stub.java类。此类使用代理模式运用反射机制生成。
下面新建项目print-client
客户端类:PrintClient.java
package demo.rmi.print.client; import java.rmi.Naming; import java.rmi.RMISecurityManager; import demo.rmi.print.common.RemotePrinter; public class PrintClient { /** * @param args */ public static void main(String[] args) { try{ System.setSecurityManager(new RMISecurityManager()); RemotePrinter printer = (RemotePrinter)Naming.lookup("rmi://localhost/printer"); String str = printer.add("good", "str2"); System.out.println(str); }catch(Exception e){ e.printStackTrace(); } } }
注意使用了System.setSecurityManager(new RMISecurityManager());
好了。代码就这么多。如何运行?
1、先运行eclipse工具栏的rmi的start local registry
2、运行PrintServer.java,对该文件点右键Run as RMI Application,可以打开dialog,找到RMI VM Properties
在java.rmi.server.codebase,选择后点compute from classpath,得到相应内容后确定,run
3、运行客户端,PrintClient.java,对该文件点右键Run as RMI Application,可以打开dialog,找到RMI VM Properties在java.security.policy后面选择点create,确认后会在print-client项目下生成 security.policy文件点OK,RUN后打印出goodstr2,结果表明调用了服务器端的方法。远程调用成功。
上面写的是用RMI插件编码产生stub和Skel类文件,用过一段时间之后发现插件过期了,不行那怎么办呢?能不能手动编译呢?参考以下链接:
如何使用RMI:http://download.oracle.com/javase/1.5.0/docs/guide/rmi/hello/hello-world.html
如何编译生成文件:http://download.oracle.com/javase/1.5.0/docs/tooldocs/windows/rmic.html
编译方法:cmd控制台进入src目录,使用命令:rmic -g -keep -vcompat com.customs.GateServer
编译后产生了GateServer_Skel.class,GateServer_Skel.java,GateServer_Stub.class,GateServer_Stub.java文件。
发表评论
-
JAVA短信发送及JAVA发送http请求与处理
2016-06-22 14:34 604JAVA发送HTTP请求与处理参考: http://ww ... -
Java Zip应用
2016-06-22 14:30 642应用系统中使用jdk原生 ... -
模拟tomcat进行http请求及响应处理:BufferedReader类的readLine在socket网络编程应用时发生阻塞
2016-05-11 15:04 1762最近写一个简单的程序模拟tomcat进行http请求及响应 ... -
Castor-xml映射出现节点重复问题解决
2015-08-13 16:24 1210最近在使用Castor-xml生成XML时发现生成的格式不 ... -
Add directory entries问题
2014-08-05 10:24 1897用spring注解的项目,eclipse可以运行,打成jar ... -
BeanUtils.copyProperties与PropertyUtils.copyProperties用法及区别
2013-01-25 16:21 884http://www.cnblogs.com/fayf/ar ... -
java.net.BindException: Cannot assign requested address
2012-06-13 14:10 893转:http://wgkgood.blog.51cto ... -
Duplicate name in Manifest: Depends-On
2012-06-13 13:13 1643解决方法:http://ww2.sjc.edu/faculty ... -
java tree
2011-11-16 02:01 1292import java.util.ArrayList; im ... -
jacob操作word和excel
2011-07-28 17:00 905http://danadler.com/jacob/ -
获得PrepareStatement 的最终执行语句
2011-07-04 10:07 1016方法一:http://www.blogjava.net/ ... -
Non-terminating decimal expansion; no exact representable decimal result
2011-06-24 16:03 2610由于需要处理精度比较高的浮点数,所以弃用double类型,改用 ... -
JXLS应用示例
2011-06-03 01:41 3495JXLS在循环的记录前加序号: <jx:f ... -
月份加减方法处理
2011-06-03 00:52 919private static String monthAdd ... -
JAVA 5.0 后 自带监控工具 jps、jinfo、jstat、jma
2011-05-12 16:25 1241最近有个客户要进行WebLogic性能调优,但因为他们没有性能 ... -
定时器的实现、java定时器介绍与Spring中定时器的配置
2011-04-28 15:05 25421定时器的作用 在实际的开发中,如果项目中需要定时执行或者需 ... -
ClientAbortException,Connection reset by peer: socket write error
2011-03-07 11:24 6104extremetable导出excel,弹出一个下载窗口,这 ... -
java 调ireport (javaBean数据源)保存服务器 生成word
2011-02-24 14:40 1560package com.ztesoft.bidding.con ... -
JAVA包生成EXE应用实例
2011-01-06 15:35 1035相关文章:http://blog.csdn.net/fresh ... -
JAVA jar打包时MANIFEST.MF格式约定
2010-12-10 11:12 2227Manifest-Version: 1.0 Created-B ...
相关推荐
在本例中,"java RMI客户端调用远程服务器系统命令"可能指的是一个实际的应用场景,其中服务器端提供了一个可以执行操作系统命令的远程接口,如`executeCommand`。客户端通过RMI调用这个方法,传递需要执行的命令...
4. **客户端(Client)**:客户端通过` LocateRegistry.getRegistry()` 获取RMI注册表的引用,然后调用`Registry.lookup()` 查找并获取远程对象的引用,最后通过这个引用调用远程方法。 5. **服务器(Server)**:...
在实验中,你可能会学习到如何创建RMI服务接口,实现该接口的服务器端,以及在客户端如何查找和调用远程服务。 具体到实验文件"rmi",这可能是RMI相关代码或者教程的集合,可能包含了服务器端和客户端的示例代码,...
在RMI架构中,客户端能够像调用本地对象一样调用远程服务器上的对象,极大地简化了分布式应用的开发。 RMI的核心概念包括: 1. **远程接口(Remote Interface)**:定义了可以在远程对象上执行的方法。这个接口...
这些方法的实现通常在一个远程服务器上,而客户端通过RMI机制来调用这些方法。RMI会自动处理网络通信、序列化和反序列化等工作。 下面我们将深入探讨RMI的基本概念和工作流程,并通过"RMIClient"和"RMIService"这两...
4. **客户端(Client)**:客户端通过RMI机制获取远程对象的引用,然后调用远程方法。这通常涉及到反序列化过程,因为远程方法的调用结果需要通过网络传输。 5. **服务器端(Server)**:服务器端运行远程对象,...
- 服务器还需要创建该远程对象的实例,并通过`java.rmi.Naming.rebind()`方法将其绑定到Registry,这样客户端就能通过名字查找并调用远程方法。 2. **RMIClient**: - 客户端首先需要通过`java.rmi.Naming.lookup...
接口中声明的方法将在客户端调用,实际上会在服务器端执行。例如: ```java public interface MyRemoteInterface extends Remote { String doSomething(String input) throws RemoteException; } ``` 接下来,...
RMI的核心理念是让开发者能够像调用本地方法一样调用远程对象的方法,简化了分布式系统的设计和实现。 **什么是RMI** RMI(Remote Method Invocation)是一种Java技术,它提供了在不同网络节点上的Java虚拟机之间...
- **远程对象**:实现了远程接口的类,实例化后运行在服务器JVM上,可供客户端调用。 - **注册表**:RMI注册表是一个服务,用于将远程对象的引用与名称关联起来,使得客户端可以通过名称查找并调用远程对象。 2. ...
- **调用远程方法**:客户端通过获取的引用调用远程方法,实际的调用会被RMI系统转化为网络通信。 5. **安全性与性能** - **安全性**:RMI可以通过SSL/TLS加密通信,以及使用JAAS进行身份验证和授权,以提高安全...
4. ** stub 和 skeleton**:stub是远程对象的代理,它在客户端运行,负责调用远程方法并将参数通过网络发送到服务器。skeleton在服务器端运行,接收到请求后调用远程对象的相应方法。在Java RMI的新版本中,stub和...
4. **客户端调用**:客户端获取到远程对象的引用后,就可以像调用本地方法一样调用远程方法。 ### 方式二:Spring框架集成 Spring框架提供了对RMI的简化支持,使得RMI的使用更加便捷和灵活: 1. **配置Spring ...
RMI的主要优点是其透明性,即开发者可以像调用本地方法一样调用远程方法,而无需关心方法的实际执行位置。 ### 一、RMI的原理与工作流程 RMI的基本工作流程包括以下几个步骤: 1. **服务器端**: - 创建并实现一...
以上就是RMI客户端和服务端例子程序的基本工作原理。在实际开发中,我们还需要考虑异常处理、安全性、网络通信效率等因素。RMI是Java中构建分布式系统的一种强大工具,尤其适用于Java EE应用,例如EJB(Enterprise ...
4. **客户端**:客户端通过RMI的`Naming.lookup()`方法获取远程对象的引用,然后就可以像调用本地对象一样调用远程对象的方法。 5. **RMI注册表**:RMI注册表(RMID或Java Naming and Directory Interface,JNDI)...
3. **调用远程方法**:客户端使用获取的引用调用远程方法,RMI会将调用封装成一个消息,通过网络发送到服务器。 4. **执行远程方法**:服务器接收到消息后,RMI系统会在服务器端的JVM上激活远程对象,执行相应的...
首先,RMI的核心概念是远程接口,它是本地接口的一个子类,声明了可以在远程服务器上执行的方法。在银行系统的上下文中,可能有一个`BankService`接口,定义了诸如存款、取款、查询余额等操作。这些方法的实际实现...