Spring提供类用于集成各种远程访问技术。这种对远程访问的支持可以降低你在用POJO实现支持远程访问业务时的开发难度。目前,Spring提供对下面四种远程访问技术的支持:
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(Remote Method Invocation)和HTTP调用是Spring框架中两种不同的远程通信机制,它们使得分布式系统间的交互变得简单易行。 **Spring-RMI** RMI是Java中的一种远程方法调用技术,允许对象在不同JVM...
在提供的压缩包文件中,"三种方式(原始方式_spring_jndi)实现java远程调用(rmi)"包含了相关的示例代码,帮助开发者理解并实践这三种RMI实现方法。在MyEclipse或其他Java开发环境中导入这些代码,可以进行调试和...
在Java世界中,远程方法调用(Remote Method Invocation...通过"SpringRMIClient"和"SpringRMIServer"示例,我们可以清晰地了解如何在Spring框架下设置和调用RMI服务。这在构建可扩展、高可用的企业级应用中非常有用。
1. 远程调用RMI(Remote Method Invocation): 通过使用 RmiProxyFactoryBean 和 RmiServiceExporter,并且,Spring支持两个传统的RMI(使用 java.rmi.Remote接口和java.rmi.RemoteException)和通过RMI调用器实现的...
Spring RMI(Remote Method Invocation)远程接口调用是Spring框架提供的一个特性,它允许你在分布式环境中调用对象的方法,使得应用程序能够跨越网络边界操作远程对象。这个技术在大型企业级应用中尤其有用,因为它...
在IT行业中,Spring框架是Java开发中的一个核心组件,它为构建高质量的、松散耦合的、可测试的应用程序提供了强大的支持...在实际应用中,Spring远程调用可以作为一个强大的工具,帮助我们构建可扩展、灵活的服务架构。
为了使服务可被远程调用,需要将其注册到RMI注册表中。Spring框架提供了一种简洁的方式来实现这一点,通过`RmiServiceExporter` bean配置: ```xml <bean id="rmiRegistry" class="org.springframework.remoting....
在这个“Spring+RMI”的示例中,开发者可能已经完成了上述步骤,并且经过测试确保了远程调用的正确性。通过学习和理解这些内容,你可以创建自己的Spring-RMI应用,实现不同节点间的分布式服务交互。
具体来说,RMI只能支持客户端和服务器端都是Java程序的远程调用,无法与其他非Java语言编写的应用进行通信。 #### 4. RMI的使用限制 RMI要求客户端和服务器都使用Java编写,但只要确保双方运行在兼容版本的Java...
这就是Spring框架实现远程调用服务端接口以实现WebService功能的基本流程。由于HttpInvoker基于HTTP,它天生具备良好的网络穿透能力,适合于分布式系统中的跨网络通信。同时,由于使用了Java序列化,它的性能相对较...
首先,我们需要理解什么是Spring远程调用。Spring Remote提供了一种机制,使得应用程序能够跨越网络边界调用其他服务的方法,仿佛它们是在同一进程中执行一样。HTTP远程调用是Spring Remote的一种实现方式,通过HTTP...
RMI是Java平台提供的一种技术,用于在不同Java虚拟机(JVM)之间进行对象间的远程调用。Spring框架则是一个强大的轻量级应用框架,它提供了依赖注入、面向切面编程等功能,极大地简化了企业级Java应用的开发。 当...
**RMI远程调用详解** 远程方法调用(Remote Method Invocation,简称RMI)是Java平台提供的一种机制,它允许一个Java对象调用另一个在不同Java虚拟机(JVM)上的对象的方法。RMI是Java分布式计算的核心技术,主要...
客户端通过桩(Stub)与远程引用层(Remote Reference Layer)和传输层(Transport Layer)进行交互,然后这些请求穿越服务器端的传输层、远程调用层和骨架(Skeleton),最终到达服务器对象。返回结果则沿着相反...
在分布式系统中,远程调用是一个常见需求,Spring为此提供了一种轻量级的解决方案——HttpInvoker。本文将详细讲解如何利用Spring的HttpInvoker进行远程方法调用。 首先,我们需要理解什么是Spring HttpInvoker。...
- **透明性**:远程调用与本地调用在语法上无差异,提高了开发效率。 - **自动异常处理**:Spring RMI会自动处理RMI相关的异常,如网络故障、远程对象不存在等。 - **事务支持**:Spring可以为RMI调用提供事务管理,...
通常会包含配置服务URL、初始化代理对象以及执行远程调用的代码。 通过以上整合,开发者可以构建出一个分布式系统,其中客户端通过Hessian或RMI与服务端进行高效通信,同时利用Structs、Spring、Hibernate和Ibatis...
Spring RMI(Remote Method Invocation)是Java平台上的远程方法调用技术,结合Spring框架,能够帮助开发者轻松地创建分布式应用程序。在这个"Spring RMI小例子"中,我们将深入理解Spring如何简化RMI的使用,以及...
Spring Remote Method Invocation(RMI)是Java平台上的一个远程对象调用框架,它允许一个Java对象在一台机器上执行,并且被另一台机器上的客户端调用。在这个"SpringRMI小例子"中,我们将深入探讨如何利用Spring...
本篇文章将深入探讨如何在Spring框架中配置和调用RMI的多个接口。 首先,我们需要了解Spring RMI服务端的配置。服务端的核心在于创建RMI服务接口和其实现。在`SpringRmiServer.zip`中,我们通常会看到以下几个关键...