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的各种疑惑也就形如冰释了。我也搞了大半天才将其实现,愿能给参看的朋友一些提示。
相关推荐
1. 远程调用RMI(Remote Method Invocation): 通过使用 RmiProxyFactoryBean 和 RmiServiceExporter,并且,Spring支持两个传统的RMI(使用 java.rmi.Remote接口和java.rmi.RemoteException)和通过RMI调用器实现的...
三种方式实现java远程调用(rmi) 方式一:原始方式 方式二:spring 方式三:jndi 解压,放到myeclipse上可用
spring RMI 远程接口调用 包含服务端客户端程序,可完整运行
Spring整合RMI的使用,实现不同项目间方法的远程调用。
一个基于Spring的rmi实现,测试成功,可以远程调用。
RMI远程调用,之前做的Demo希望对大家有所帮助!
spring rmi 远程调用服务端和客户端源码,eclipse环境,jdk1.7.
这个jar文件包含支持EJB、JMS、远程调用Remoting(RMI、Hessian、Burlap、Http Invoker、JAX-RPC)方面的类。 (10) spring-support.jar 这个jar文件包含支持缓存Cache(ehcache)、JCA、JMX、邮件服务(Java ...
RMI-IIOP (称为“ IIOP上的RMI”)表示Internet球间协议(IIOP)上的Java远程方法调用(RMI)接口,该接口向Java平台提供了通用对象请求代理体系结构(CORBA)分布式计算功能。 更多信息 : 建造 编译项目文件 转...
上文我们利用Spring rmi实现了Spring的远程访问(Spring 实现远程访问详解——rmi),本文主要讲解利用HttpInvoke实现远程访问。 Spring httpInvoker使用标准java序列化机制,通过Http暴露业务服务。如果你的参数和...
给予spring的框架。 封装了xfire、rmi、hessian、httpinvoker 客户端可以统一调用,省略了远程调用的编码。 服务通过服务ID和服务接口来调用。
(9) spring-remoting.jar 这个jar文件包含支持EJB、JMS、远程调用Remoting(RMI、Hessian、Burlap、Http Invoker、JAX-RPC)方面的类。 (10) spring-support.jar 这个jar文件包含支持缓存Cache(ehcache)、JCA、...
12.2.2. 在Spring的application context中创建 SessionFactory 12.2.3. HibernateTemplate 12.2.4. 不使用回调的基于Spring的DAO实现 12.2.5. 基于Hibernate3的原生API实现DAO 12.2.6. 编程式的事务划分 12.2.7. ...
spring 2.0中文参考手册 ,有spring的详细介绍包括很实用的定时程序和RMI远程调用程序。
这个jar文件包含支持EJB、JMS、远程调用Remoting(RMI、Hessian、Burlap、Http Invoker、JAX-RPC)方面的类。 (10) spring-support.jar 这个jar文件包含支持缓存Cache(ehcache)、JCA、JMX、邮件服务(Java ...
6.8.1. 在Spring中使用AspectJ进行domain object的依赖注入 6.8.2. Spring中其他的AspectJ切面 6.8.3. 使用Spring IoC来配置AspectJ的切面 6.8.4. 在Spring应用中使用AspectJ加载时织入(LTW) 6.9. 更多资源 7...
Spring为编写企业应用程序提供了轻量的解决方案,同时仍然支持使用声明式事务、 用RMI或web service远程调用、以及使用多种方式来将数据持久化到数据库。Spring提供了全功能的 MVC framework, 以及透明集成AOP到你...
Spring为编写企业应用程序提供了轻量的解决方案,同时仍然支持使用声明式事务、 用RMI或web service远程调用、以及使用多种方式来将数据持久化到数据库。Spring提供了全功能的 MVC framework, 以及透明集成AOP到你...
word源码java fleet-spring-boot ...远程调用框架 :Spring Boot Hessian 远程调用框架 :Spring Boot Forest Http 请求 :Spring Boot HTTP 访问控制 :Spring Boot GraphQL 构建 API :Spring Boot
例如,对Web服务或RMI服务的远程调用由于网络故障或数据库更新中的DeadLockLoserException而失败,可能会在短暂的等待后自行解决。 为了自动执行此类操作的重试,Spring Retry具有RetryOperations策略。目前有两个...