Java之——Spring与RMI集成实现远程访问(插曲)

    转载请注明出处:http://blog.csdn.net/l1028386804/article/details/45972095

使用Spring对RMI的支持,可以非常容易地构建你的分布式应用。在服务端,可以通过Spring的org.springframework.remoting.rmi.RmiServiceExporter可以暴露你的服务;在客户端,通过org.springframework.remoting.rmi.RmiProxyFactoryBean可以使用服务端暴露的服务,非常方便。这种C/S模型的访问方式,可以屏蔽掉RMI本身的复杂性,如服务端Skeleton和客户端Stub等的处理细节,这些对于服务开发和服务使用的人员来说,都是透明的,无需过度关注,而集中精力开发你的商业逻辑。

下面通过一个例子,说明如何通过Spring集成RMI。

服务端发布服务

我们定义了服务接口,服务端实现该服务接口来完成其复杂的逻辑,客户端可以通过该接口调用服务端暴露的服务,如下所示:

package org.shirdrn.spring.remote.rmi;
/**
 * @author liuyazhuang
 */
public interface AccountService {
	int queryBalance(String mobileNo);
	String shoopingPayment(String mobileNo, byte protocol);
}

服务实现,示例如下所示:

package org.shirdrn.spring.remote.rmi;

import org.apache.log4j.Logger;
/**
 * @author liuyazhuang
 */
public class MobileAccountServiceImpl implements AccountService {

	private static final Logger LOG = Logger.getLogger(MobileAccountServiceImpl.class);
	public int queryBalance(String mobileNo) {
		if (mobileNo != null)
			return 100;
		return 0;
	}

	public String shoopingPayment(String mobileNo, byte protocol) {
		StringBuffer sb = new StringBuffer().append("Your mobile number is /"").append(
				mobileNo).append("/", protocol type is /"").append(protocol)
				.append("/".");
		LOG.info("Message is: " + sb.toString());
		return sb.toString();
	}
}

服务端发布服务,供客户端进行(远程方法)调用,Spring配置server.xml如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">

	<bean id="serviceExporter" class="org.springframework.remoting.rmi.RmiServiceExporter">
		<property name="serviceName" value="MobileAccountService" />
		<property name="service" ref="accountService" />
		<property name="serviceInterface"
			value="org.shirdrn.spring.remote.rmi.AccountService" />
		<property name="registryPort" value="8080" />
		<property name="servicePort" value="8088" />
	</bean>

	<bean id="accountService" class="org.shirdrn.spring.remote.rmi.MobileAccountServiceImpl" />

</beans>

上面配置,指定了暴露的服务的名称,通过serviceName属性注入到RmiServiceExporter中,服务名称为MobileAccountService,客户端通过该服务名称就能够进行调用。

下面启动服务端,发布服务,如下所示:

package org.shirdrn.spring.remote.rmi;

import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
 * @author liuyazhuang
 */
public class RmiServer {

	public static void main(String[] args) throws InterruptedException {
		new ClassPathXmlApplicationContext("org/shirdrn/spring/remote/rmi/server.xml");

		Object lock = new Object();
		synchronized (lock) {
			lock.wait();
		}
	}
}

客户端调用服务

客户端配置client.xml如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">

	<bean id="mobileAccountService" class="org.springframework.remoting.rmi.RmiProxyFactoryBean">
		<property name="serviceUrl" value="rmi://192.168.1.103:8080/MobileAccountService" />
		<property name="serviceInterface"
			value="org.shirdrn.spring.remote.rmi.AccountService" />
	</bean>

</beans>

配置中,将一个serviceUrl和serviceInterface注入给RmiProxyFactoryBean,即可进行远程方法调用。调用示例如下所示:

package org.shirdrn.spring.remote.rmi;

import org.apache.log4j.Logger;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
 * @author liuyazhuang
 */
public class RmiClient {

	private static final Logger LOG = Logger.getLogger(RmiClient.class);

	public static void main(String[] args) {
		ApplicationContext ctx = new ClassPathXmlApplicationContext(
				"org/shirdrn/spring/remote/rmi/client.xml");
		AccountService accountService = (AccountService) ctx
				.getBean("mobileAccountService");
		String result = accountService.shoopingPayment("13800138000", (byte) 5);
		LOG.info(result);
	}

}

可见,实现远程访问变得非常容易

时间: 2024-10-08 16:41:02

Java之——Spring与RMI集成实现远程访问(插曲)的相关文章

Spring+RMI集成实现远程访问分布式应用

下面是个人感觉比较清晰易懂的spring实现RMI的网络帖子: 使用Spring对RMI的支持,可以非常容易地构建你的分布式应用.在服务端,可以通过Spring的org.springframework.remoting.rmi.RmiServiceExporter可以暴露你的服务:在客户端,通过org.springframework.remoting.rmi.RmiProxyFactoryBean可以使用服务端暴露的服务,非常方便.这种C/S模型的访问方式,可以屏蔽掉RMI本身的复杂性,如服务端

spring整合RMI - Java远程方法调用

一. 开篇语 在上一篇RMI - Java远程方法调用博文中使用的是JDK原生类进行远程方法调用, 本篇文章使用spring提供的API对RMI进行整合, 希望能给您带来帮助. 二. 核心API 1. 客户端: 客户端的核心是RmiProxyFactoryBean, 它包含两个属性serviceUrl(远程调用地址), serviceInterface(远程调用接口) 2. 服务端: RmiServiceExporter把spring管理的Bean输出成一个RMI服务, 通过把Bean包装在一个

java web项目(spring项目)中集成webservice ,实现对外开放接口

什么是WebService?webService小示例 点此了解 下面进入正题: Javaweb项目(spring项目)中集成webservice ,实现对外开放接口步骤: 准备: 采用与spring兼容性较好的cxf来实现 cxf 的  jar下载地址: http://cxf.apache.org/download.html 选择zip格式下载,解压后的lib目录下的jar 需要最少的jar如下: cxf-2.3.3.jargeronimo-annotation_1.0_spec-1.1.1.

Java RMI 介绍和例子以及Spring对RMI支持的实际应用实例

RMI 相关知识 RMI全称是Remote Method Invocation-远程方法调用,Java RMI在JDK1.1中实现的,其威力就体现在它强大的开发分布式网络应用的能力上,是纯Java的网络分布式应用系统的核心解决方案之一.其实它可以被看作是RPC的Java版本.但是传统RPC并不能很好地应用于分布式对象系统.而Java RMI 则支持存储于不同地址空间的程序级对象之间彼此进行通信,实现远程对象之间的无缝远程调用. RMI目前使用Java远程消息交换协议JRMP(Java Remot

RabbitMQ与java、Spring结合实例详细讲解

林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 摘要:本文介绍了rabbitMq,提供了如何在Ubuntu下安装RabbitMQ 服务的方法.最好以RabbitMQ与java.Spring结合的两个实例来演示如何使用RabbitMQ. 本文工程免费下载 一.rabbitMQ简介 1.1.rabbitMQ的优点(适用范围)1. 基于erlang语言开发具有高可用高并发的优点,适合集群服务器.2. 健壮.稳定.易用.跨平台.支持多种语言.文档

细说shiro之五:在spring框架中集成shiro

官网:https://shiro.apache.org/ 1. 下载在Maven项目中的依赖配置如下: <!-- shiro配置 --> <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-core</artifactId> <version>${version.shiro}</version> </dependency&g

spring 和 mybatis集成的warn问题

warn:Skipping MapperFactoryBean with name 'appOperateRecordMapper' and 'XX.XX.XX.daor' mapperInterface. Bean already defined with the same name! 2014-07-22 18:02:29  WARN [main] (ClassPathMapperScanner.java:155) - No MyBatis mapper was found in '[XX.

Spring与Struts2集成开发

Struts2和Spring都是不错的开源框架,Spring与Struts2集成开发,把二者结合在一起使用,开发效果更佳,效率杠杠的.下面介绍一下如何将Spring与Struts2集成在一起开发.分七步战略: 1.添加Struts2 支持jar包 :注意:加上一个Struts-spring-plugin(集成)插件包 2.添加spring 支持jar包 3.编写struts.xml配置文件 注意:Action是交由Spring管理:所以action class属性应和spring 中配置的Act

Spring整合Rmi总结

在Spring整合Rmi中: 服务端使用了org.springframework.remoting.rmi.RmiServiceExporter RmiServiceExporter把任何Spring管理的Bean输出成一个RMI服务.通过把Bean包装在一个适配器类中工作.适配器类被绑定到RMI注册表中,并且将请求代理给服务类. 客户端使用了org.springframework.remoting.rmi.RmiProxyFactoryBean 客户端的核心是RmiProxyFactoryBe