Spring实战——使用远程服务

本文详细介绍了Spring中远程服务的实现,包括RMI、Hessian、Burlap和HttpInvoker的使用,以及重点讲解了Web服务(WebService)的发布和调用。在RMI部分,提到了其穿透防火墙的限制。在Hessian和Burlap中,Hessian基于二进制协议,而Burlap基于XML协议。最后,文章强调了HttpInvoker在处理复杂数据模型时的优势,并提供了发布和消费Web服务的示例。
摘要由CSDN通过智能技术生成

本文中的使用Hessian和Burlap发布远程服务以及使用Spring的HTTPInvoker发不远程服务测试失败。最常用的应该是使用JAX-WS,也就是WebService。

调用远程服务使用的比较多的应该是WebService吧。但是远程调用技术并不仅仅只有WebService。还包括:

  • 远程方法调用(Remote Method Invocation,RMI)
  • Caucho的Hessian和Burlap
  • Spring基于HTTP的远程服务
  • 使用JAX-RPC和JAX-WS的Web Service

一、远程调用简介

1、远程调用是客户端和服务端的会话。有时在客户端所需要的一些功能并不在客户端是实现范围之内,此时需要寻求其他系统的帮助,而远程应用就需要通过远程服务暴露这些功能接口。

2、客户端和服务端的会话开始于客户端的一个远程过程调用(remote procedure call,RPC)。在客户端调用时,从表面上看就像调用本地方法一样。

3、RPC调用就是执行流从一个应用传递到另一个应用,理论上另一个应用部署在跨网络的一台远程机器上。

Spring通过多种远程调用技术支持RPC
RPC模型 适用场景
远程方法调用(RMI) 不考虑网络限制时(例如防火墙),访问/发布基于java的服务
Hessian和Burlap 考虑网络限制时,通过HTTP访问/发布基于Java的服务,Hessian是二进制协议,Burlap是基于XML的
HTTP invoker 考虑网络限制,并希望使用基于XML或专有的序列化机制实现Java序列化时,访问/发布基于Spring的服务
JAX-RPC和JAX-WS 访问/发布平台独立的、基于SOAP的Web服务
   

二、使用RMI

在Spring中使用RMI很简单,注入RmiServiceExporter即可,RmiServiceExporter可以把任意Spring管理的bean发布为RMI服务。

服务端发布服务(使用XML配置,使用Java配置这里就不做记录了,照着XML就可以实现):

	<bean id="tuserDao" class="com.mfc.dao.TuserDaoImpl"></bean>
	<!-- 
	service:要发布的bean的id
	serviceName:命名了RMI服务
	serviceInterface:指定服务所实现的接口
	registryPort:注解端口号,客户端调用时访问这个端口号
	registryHost:主机上的RMI注册表
	 -->
	<bean class="org.springframework.remoting.rmi.RmiServiceExporter">
		<property name="service" ref="tuserDao"></property>
		<property name="serviceName" value="TuserDao"></property>
		<property name="serviceInterface" value="com.mfc.dao.TuserDao"></property>
		<property name="registryPort" value="8082" />  
	</bean>

服务端要发布的服务接口:

public interface TuserDao {
	
	@CachePut(value = "tUserCache", key = "#result.userId")
	public Tuser add(Tuser tuser);
	
	public void delete(Tuser tuser);
	
	
	public Tuser update(Tuser tuser);
	
	/**
	 * 查询User,并将查询结果放进tUserCache缓存中
	 * @param tuser
	 * @return
	 */
	@Cacheable("tUserCache")
	public List<Tuser> find(Tuser tuser);
	
	/**
	 * 根据ID查询用户,并将查询结果放进tUserCache缓存中
	 * @param userId
	 * @return
	 */
	@Cacheable(value = "tUserCache", unless = "#result.message.contains('NoCache')", condition = "#userId == '10'")
	public Tuser findByPrimary(String userId);
}

发布服务接口的实现类:

package com.mfc.dao;
 
import java.util.List;

import org.hibernate.Session;
impo
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值