- 浏览: 829515 次
- 性别:
- 来自: 哈尔滨
文章分类
最新评论
-
doloveme:
$sudo cp MONACO_Linux.ttf /usr/ ...
terminator 的配置 -
腾讯rep:
lowser
RSA加密算法c++简单实现 -
csuhanyong:
好YD啊,好YD
一图流:机械键盘各轴区别 -
doloveme:
1。其中:extman ,extmail下载http://ww ...
Ubuntu下安装postfix+extmail邮件服务器 -
doloveme:
repo sync出现“fatal: '../platform ...
Android 编译环境配置搭建(Ubuntu 12.04)及环境导致编译错误QA
Spring提供类用于集成各种远程访问技术。这种对远程访问的支持可以降低你在用POJO实现支持远程访问业务时的开发难度。目前,Spring提供对下面四种远程访问技术的支持:
远程方法调用(RMI)。通过使用RmiProxyFactoryBean和RmiServiceExporter,Spring支持传统的RMI(使用java.rmi.Remote interfaces 和 java.rmi.RemoteException)和通过RMI调用器(可以使用任何Java接口)的透明远程调用。
Spring的HTTP调用器。Spring提供一种特殊的远程调用策略支持任何Java接口(象RMI调用器一样),它允许Java序列化能够通过HTTP传送。对应的支持类是HttpInvokerProxyFactoryBean和HttpInvokerServiceExporter。
Hessian。通过使用HessianProxyFactoryBean和HessianServiceExporter,你可以使用Caucho提供的轻量级基于HTTP的二进制协议透明地提供你的业务。
Burlap。Burlap是基于XML的,它可以完全代替Hessian。Spring提供的支持类有BurlapProxyFactoryBean和BurlapServiceExporter。
JAX RPC (TODO).
RMI是不能够穿越防火墙的,在网上也查了一些资料,但根据其提供的方法都没有成功,唉,功夫不负有心人,经过一番努力,还是把它实现了,其实这东西就是一层窗纸,捅破了也没有什么太难得,废话不说了,我们开始吧。(不好意思,还得再说一句废话:得益于罗士飞的那本spring教程代码)。
在此之前,我先把目录结构抓取个图像给大家看看。
当然首先要把spring的相关依赖的jar包引入了。这里就不能描述了。
先写服务器段代码:
1. 定义接口 ILogPerson.java
package com.openv.spring; public interface ILogPerson { public String getPersion(PersonVO personVO); }
2. 定义POJO PersonVO.java
package com.openv.spring; import java.io.Serializable; public class PersonVO implements Serializable { private String firstname; private String lastname; public String getFirstname() { return firstname; } public void setFirstname(String firstname) { this.firstname = firstname; } public String getLastname() { return lastname; } public void setLastname(String lastname) { this.lastname = lastname; } }
注意:这里的PersonVO.java 必须继承Serializable 以实现序列化,不然会抱错,谨记!
3. 定义实现:LogPerson.java
package com.openv.spring; public class LogPerson implements ILogPerson{ public String getPersion(PersonVO personVO) { return personVO.getFirstname()+" @#@ "+personVO.getLastname(); } }
4. 定义spring的依赖注入的文件appcontextrmiserver.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans> <bean id="logPerson" class="com.openv.spring.LogPerson"/> <bean id="logPersonService" class="org.springframework.remoting.rmi.RmiServiceExporter"> <!-- RmiServiceExporter 对服务名没有特殊要求 --> <property name="serviceName"> <value>LogPerson</value> </property> <property name="service"> <ref bean="logPerson"/> </property> <property name="serviceInterface"> <value>com.openv.spring.ILogPerson</value> </property> <!-- 避免与默认的RMI注册端口冲突,因此修改为1200 --> <property name="registryPort"> <value>1200</value> </property> </bean> </beans>
5. 定义运行rmi服务的类: LogPersonRmiServer.java
package com.openv.spring; import org.springframework.core.io.Resource; import org.springframework.core.io.ClassPathResource; import org.springframework.beans.factory.xml.XmlBeanFactory; import org.springframework.beans.factory.BeanFactory; import java.io.Serializable; public class LogPersonRmiServer{ public static void main(String[] args) { //初始化appcontextrmiserver.xml Resource sresource = new ClassPathResource("appcontextrmiserver.xml"); BeanFactory sfactory = new XmlBeanFactory(sresource); //注册RMI sfactory.getBean("logPersonService"); } }
运行main函数,rmi服务就启动了。
下面写客户调用端的代码了。
大家从目录图中看一下,为了调试方便,我把服务端和客户端写在了一起。在实际的项目中,客户端的代码是不可能和服务器端在一起的,那样还叫什么远程调用呀,呵呵。在实际的项目中,我们应该把接口ILogPerson.java和POJO PersonVO.java 文件打成jar包给客户端引用即可,而实现是在服务器端完成。
下面我们可以在另外一台计算机(为了强调远程嘛,呵呵)上新建立一个客户端调用的工程。客户端很简单
1. 引入spring的依赖文件和 接口ILogPerson.java和POJO PersonVO.java 文件打成jar包
2. spring的依赖注入的文件 appcontextrmiclient.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans> <bean id="LogPerson" class="org.springframework.remoting.rmi.RmiProxyFactoryBean"> <property name="serviceUrl"><value>rmi://77.20.64.237:1200/LogPerson</value></property> <property name="serviceInterface"><value>com.openv.spring.ILogPerson</value></property> </bean> </beans>
3. 调用文件 LogPersonRmiClient.java
package com.openv.spring; import org.springframework.beans.factory.BeanFactory; import org.springframework.beans.factory.xml.XmlBeanFactory; import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.Resource; public class LogPersonRmiClient { public static void main(String[] args) { //初始化appcontextrmiclient.xml Resource cresource = new ClassPathResource("appcontextrmiclient.xml"); BeanFactory cfactory = new XmlBeanFactory(cresource); //实例化Person值对象 PersonVO personVO = new PersonVO(); personVO.setFirstname("Luo2"); personVO.setLastname("Shifei"); //获得RMI服务 ILogPerson clientLog = (ILogPerson) cfactory.getBean("LogPerson"); //调用RMI服务 System.out.println("==>> " + clientLog.getPersion(personVO)); } }
客户端很简单的,呵呵。看看运行结果吧。
虽然简单,但是也有四五个文件,其实每个文件不是很复杂,只要耐着心思把其一个个写出来,就能成功,如果运行结果出来了,你对rmi的各种疑惑也就形如冰释了。我也搞了大半天才将其实现,愿能给参看的朋友一些提示。
经过spring的封装,rmi的复杂过程得到了很大的简化,基本变成了配置的过程,什么rmi手工注册和声成什么乱七八糟的文件都省略了。不过不能穿越防火墙,下面我们在介绍一种可以穿越防火墙的spring远程调用hissian。
发表评论
-
JAVA代码混淆
2016-05-05 18:24 1453JAVA代码混淆 <!--[if !supportL ... -
android 监听状态栏被下拉
2015-12-25 17:23 3478Activity的onWindowFocusChange()方 ... -
android使用mount挂载/system/app为读写权限,删除或替换系统应用
2015-11-27 14:13 4030注意:以下代码中#开头的则为需要执行的shell命令,其他的 ... -
Ubuntu 14.04 文件服务器--samba的安装和配置
2015-11-10 10:49 640jingyan.baidu.com/album/00a07f ... -
intellij 打开工程在每个java文件上 有个红色的无效符
2015-07-24 13:52 1757说明该类不是可编译文件。在project Structure中 ... -
logcat命令详解
2015-07-22 16:34 985Android日志系统提供了记录和查看系统调试信息的功能。日 ... -
gradle打包遇到的错误汇总
2015-07-21 11:32 0错误1:A problem occurred ... -
Android读写XML(下)——创建XML文档
2015-04-29 11:02 618在前面的2篇文章Android读写XML(上)—— pack ... -
Android读写XML(中)——SAX
2015-04-29 10:54 625在Android读写XML(上) ... -
Android读写XML(下)——创建XML文档
2015-04-29 10:52 705在前面的2篇文章Android读写XML(上)—— pack ... -
android:configChanges locale 改语言后,该配置不起作用的原因
2015-03-23 14:38 2518@Override public void on ... -
android.app.Fragment$InstantiationException 解决办法
2015-03-23 13:46 1415android.app.Fragment$Instantia ... -
linux 查看内存
2015-02-10 13:08 7471、free监控内存使用情况 #free 2、watc ... -
android fastboot 刷机 指令
2015-01-19 18:31 1531原生bootloader:bootloader-gro ... -
[Android实例] android中进行https连接的方式的详解 (转发)
2015-01-09 15:50 699x 如果不需要验证服务器端证书, ... -
编译android源码apk是否生成odex方法
2014-10-20 17:19 1649其实Android系统默认的配置是,如果没有指定DISABL ... -
关于android源码中的APP编译时引用隐藏的API出现的问题
2014-10-20 15:36 844今天在编译android源码中的计算器APP时发现,竟然无法 ... -
Android系统进程Zygote启动过程的源代码分析
2014-09-17 10:09 506在Android系统中, ... -
Handler和HandlerThread
2014-09-16 16:58 6971.什么是Handler? SDK中关于Handler的说 ... -
怎样识别三洋18650锂电池电芯
2014-09-01 09:52 1119浏览:20384 | 更新:2011-03 ...
相关推荐
这个压缩包文件“Spring+RMI”很可能包含了实现这样一个远程调用示例的所有必要组成部分,包括配置文件、接口定义、服务器端实现以及客户端调用代码。 首先,我们来理解一下Java RMI。RMI是Java提供的一种原生的...
可以创建一个Bean,其类型为远程接口,Spring会自动处理远程调用。 - **调用远程方法**:一旦获取了远程引用,客户端就可以像调用本地方法一样调用远程服务的方法。所有的网络通信和对象序列化都在幕后自动处理。 ...
3. **事务管理**:Spring 的 AOP 支持可以在 RMI 调用中添加事务管理,确保跨远程调用的一致性。 4. **异常处理**:Spring 可以帮助封装 RMI 调用中可能出现的异常,提供统一的错误处理策略。 通过这个 "java ...
在IT行业中,Spring框架是Java领域最常用的轻量级应用框架之一,而RMI(Remote Method Invocation)则是Java提供的一种远程方法调用机制,用于构建分布式应用程序。将Spring与RMI结合,可以实现非本地部署的服务,...
《构建基于Spring+Hibernate+MySQL+RMI+Swing的登录Demo详解》 在软件开发领域,集成多种技术来构建高效、稳定的应用是常见的实践。本项目“基于Spring+Hibernate+MySQL+RMI+Swing的登录Demo”就充分展示了这种技术...
而Spring-RMI(Remote Method Invocation)和HTTP调用是Spring框架中两种不同的远程通信机制,它们使得分布式系统间的交互变得简单易行。 **Spring-RMI** RMI是Java中的一种远程方法调用技术,允许对象在不同JVM...
- **远程调用**:支持JMS、RMI、JCA、EJB等远程调用技术。 - **任务调度和缓存**:提供了任务调度和缓存抽象。 - **集成技术**:支持电子邮件、任务调度、Caching等集成技术。 - **编程语言支持**:支持Kotlin、...
在提供的压缩包文件中,"三种方式(原始方式_spring_jndi)实现java远程调用(rmi)"包含了相关的示例代码,帮助开发者理解并实践这三种RMI实现方法。在MyEclipse或其他Java开发环境中导入这些代码,可以进行调试和...
1. 远程调用RMI(Remote Method Invocation): 通过使用 RmiProxyFactoryBean 和 RmiServiceExporter,并且,Spring支持两个传统的RMI(使用 java.rmi.Remote接口和java.rmi.RemoteException)和通过RMI调用器实现的...
Spring RMI(Remote Method Invocation)远程接口调用是Spring框架提供的一个特性,它允许你在分布式环境中调用对象的方法,使得应用程序能够跨越网络边界操作远程对象。这个技术在大型企业级应用中尤其有用,因为它...
4.3 错误处理:远程调用可能会遇到网络中断、超时等问题,应适当地处理异常。 总结,Spring整合RMI提供了一种方便、灵活的方式来实现分布式系统中的远程方法调用。通过"SpringRMIClient"和"SpringRMIServer"示例,...
Spring支持多种远程调用协议,如RMI(Remote Method Invocation)、Hessian、 Burlap以及HTTP Invoker等。这些协议允许我们跨越网络边界,像调用本地方法一样调用远程服务。 在本实例中,我们关注的是HTTP Invoker...
**RMI远程调用详解** 远程方法调用(Remote Method Invocation,简称RMI)是Java平台提供的一种机制,它允许一个Java对象调用另一个在不同Java虚拟机(JVM)上的对象的方法。RMI是Java分布式计算的核心技术,主要...
RMI是Java平台提供的一种技术,用于在不同Java虚拟机(JVM)之间进行对象间的远程调用。Spring框架则是一个强大的轻量级应用框架,它提供了依赖注入、面向切面编程等功能,极大地简化了企业级Java应用的开发。 当...
Spring RMI(Remote Method Invocation)是Java平台上的远程方法调用技术,结合Spring框架,能够帮助开发者轻松地创建分布式应用程序。在这个"Spring RMI小例子"中,我们将深入理解Spring如何简化RMI的使用,以及...
- **透明性**:远程调用与本地调用在语法上无差异,提高了开发效率。 - **自动异常处理**:Spring RMI会自动处理RMI相关的异常,如网络故障、远程对象不存在等。 - **事务支持**:Spring可以为RMI调用提供事务管理,...
具体到这个压缩包“springRMI”,我们可以推测它可能包含了以下几个部分: 1. **配置文件**:如`applicationContext.xml`,其中定义了Spring容器中的Bean,可能包括RMI服务的接口和实现。 2. **远程接口**:`.java`...
同时,配置AOP代理(如JDK动态代理或CGLIB代理)来处理远程调用。 2. **配置Hibernate**:配置Hibernate的session factory,定义实体类与数据库表的映射,并配置数据源。使用SessionFactory创建Session实例,进行...
在IT行业中,Spring框架是Java开发中的一个核心组件,它提供了丰富的功能,...不过,需要注意的是,HTTP远程调用可能会引入额外的网络延迟,因此在性能敏感的场景下,可能需要考虑其他的远程调用技术,如RMI或gRPC。
这就是Spring框架实现远程调用服务端接口以实现WebService功能的基本流程。由于HttpInvoker基于HTTP,它天生具备良好的网络穿透能力,适合于分布式系统中的跨网络通信。同时,由于使用了Java序列化,它的性能相对较...