Spring对远程服务的支持
Java程序有以下的远程调用技术选择:

远程过程调用(RPC)是同步的,客户端在服务器端返回结果之前将一直被阻塞。
各种技术适用的场景如下:

典型的RMI开发的过程如下:
- 定义一个接口,用于客户端和服务器端的交互,接口要继承Remote接口,所有方法都要抛出RemoteException。
- 编写服务器端的实现,实现第一步所编写的接口。
- 编写一个注册类,基于某个某个IP和端口(默认是1099)注册服务器端类的实现。
- 编写客户端的调用,基于IP,端口和注册的名称查找服务器端对应的类。
- RMI支持传递对象,要求对象实现Serializable接口。
下面是Spring对RMI的支持,配置也很简单:
一:服务器端
1. 要暴露的服务的接口:
package com.excellence.webservice;
import java.util.List;
public interface AccountService {
public void insertAccount(Account account);
public List getAccounts(String name);
}
2. 实现了该接口的类:
package com.excellence.webservice;
import java.util.List;
public class AccountServiceImpl implements AccountService {
public void insertAccount(Account account) {
System.out.println("inser!");
}
public List getAccounts(String name) {
System.out.println("get");
return null;
}
}
3. 在配置文件中公布改接口为RMI
<bean id="accountService" class="com.excellence.webservice.AccountServiceImpl" />
<bean name="service" class="org.springframework.remoting.rmi.RmiServiceExporter">
<property name="serviceName" value="AccountService" ></property>
<property name="service" ref="accountService"></property>
<property name="serviceInterface" value="com.excellence.webservice.AccountService"></property>
<property name="registryPort" value="1199"></property>
</bean>
4. 运行该RMI:
public class Demo {
public static void main(String[] args) {
ApplicationContext ctx = new FileSystemXmlApplicationContext ("classpath:applicationContext.xml");
RmiServiceExporter obj = (RmiServiceExporter)ctx.getBean("service");
}
}
二、客户端
1.在配置文件中进行配置:
<bean id="accClient" class="org.springframework.remoting.rmi.RmiProxyFactoryBean">
<property name="serviceUrl" value="rmi://localhost:1199/AccountService"></property>
<property name="serviceInterface" value="com.excellence.webservice.AccountService"></property>
</bean>
2.调用RMI的方法:
public static void main(String[] args) {
ApplicationContext ctx = new FileSystemXmlApplicationContext ("classpath:applicationContext.xml");
AccountService service = (AccountService)ctx.getBean("accClient");
service.insertAccount(new Account());
service.getAccounts("dd");
}
这里需要注意的是:
从普通RMI改到使用Spring集成RMI时,要将实现类的extends UnicastRemoteObject去掉,否则会报错:org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'refreshService' defined in class path resource [applicationContext.xml]: Initialization of bean failed; nested exception is java.rmi.server.ExportException: object already exported] 因为UnicastRemoteObject的作用就是生成stub object
Spring对远程服务的支持的更多相关文章
- java 利用spring JavaMailSenderImpl发送邮件,支持普通文本、附件、html、velocity模板
java 利用spring JavaMailSenderImpl发送邮件,支持普通文本.附件.html.velocity模板 博客分类: Java Spring 本文主要介绍利用JavaMailS ...
- Spring AOP和AspectJ支持
学了Spring之后发现我都不知道java为何物-- 在这一章中有好几节,讲的切面编程 第一节:在项目中启用Spring的AspectJ注解支持 第二节:用AspectJ注解声明aspect 第三节: ...
- Spring使用拦截器支持国际化(转)
Spring使用拦截器支持国际化很方便,使用时只需要两个步骤: 一.spring配置 具体配置方式如下: <!-- 资源文件绑定器,文件名称:messages.properties(没有找到时的 ...
- 1.Spring对JDBC整合支持
1.Spring对JDBC整合支持 Spring对DAO提供哪些支持 1)Spring对DAO异常提供统一处理 2)Spring对DAO编写提供支持的抽象类 3)提高编程效率,减少DAO编码量 Spr ...
- [Spring学习笔记 7 ] Spring中的数据库支持 RowMapper,JdbcDaoSupport 和 事务处理Transaction
1.Spring中的数据库支持 把具有相同功能的代码模板抽取到一个工具类中.2.关于jdbc template的应用 jdbcTemplate模板操作类,把访问jdbc的模板抽取到template中, ...
- Spring Boot 添加JSP支持【转】
Spring Boot 添加JSP支持 大体步骤: (1) 创建Maven web project: (2) 在pom.xml文件添加依赖: (3) ...
- 8 -- 深入使用Spring -- 8...1 Spring提供的DAO支持
8.8.1 Spring提供的DAO支持. DAO模式是一种标准的Java EE设计模式,DAO模式的核心思想是,所有的数据库访问都通过DAO组件完成,DAO组件封装了数据库的增.删.查.改等原子操作 ...
- 8 -- 深入使用Spring -- 2... Spring的“零配置”支持
8.2 Spring的“零配置”支持 Spring支持使用Annotation来代替XML配置文件.
- Java缓存学习之五:spring 对缓存的支持
(注意标题,Spring对缓存的支持 这里不单单指Ehcache ) 从3.1开始,Spring引入了对Cache的支持.其使用方法和原理都类似于Spring对事务管理的支持.Spring Cache ...
随机推荐
- CodeForces 543D:Road Improvement
题目:http://codeforces.com/problemset/problem/543/D 题意:给你一棵树,一开始边都是0,可以使任意的边变成1,对于每一个根节点求使得它到其他任一点的路径上 ...
- BZOJ2744: [HEOI2012]朋友圈
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=2744 最大团是一个np问题.. 对于本题,做它的逆问题,建反图做最大独立集. 对于A最多取出两 ...
- UEP-级联查询
级联查询在UEP中采用动态下拉的形式,cascadeid为关键字,注意jsp页面的id的相互嵌套关系,数据库字段的数值的设置,和动态下拉SQL语句的书写.本功能实现了省市区的三级联动查询
- Spark学习笔记3(IDEA编写scala代码并打包上传集群运行)
Spark学习笔记3 IDEA编写scala代码并打包上传集群运行 我们在IDEA上的maven项目已经搭建完成了,现在可以写一个简单的spark代码并且打成jar包 上传至集群,来检验一下我们的sp ...
- 织梦DedeCMS v5.7 实现导航条下拉菜单
首先将下面这段代码贴到templets\default\footer.htm文件里(只要在此文件里就行,位置无所谓) <</span>script type='text/javasc ...
- ExtJS是一种主要用于创建前端用户界面,是一个基本与后台技术无关的前端ajax框架。
ExtJS是一种主要用于创建前端用户界面,是一个基本与后台技术无关的前端ajax框架.
- Java Draw
简单绘画 直线 矩形 圆 根据矩阵画图 package com.zhoudm; import java.awt.*; import javax.swing.*; public class Draw e ...
- myeclipse 奔溃解决办法
myeclipse 突然奔溃 解决办法 JVM terminated.Exit code=1 意思是说java 虚拟机挂了,而不是myeclipse挂了. 进入myeclipse 目录 查看myecl ...
- scrapy_ItemLoader
什么是Itemloader? 一种容器,实现直白高效字段提取 直接赋值取值的方式,会出现一下几个问题 代码量一多,各种css和xpath选择器,充斥整个代码逻辑,没有规则,不利于维护 对于一个字段的预 ...
- 前端开发人员需要了解的CSS原理
转自http://web.jobbole.com/10011/ 一.浏览器的发展与CSS 网页浏览器主要通过HTTP协议连接网页服务器而取得网页,HTTP容许网页浏览器送交资料到网页服务器并且获取网页 ...