`
zhaomingzm_23
  • 浏览: 33041 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Spring RMI 入门技术

阅读更多
对于一个Java接口来说,如果使用者和其实现类不在同一环境,比如实现类在网络的其他机器,那么如何来访问接口实现类的逻辑呢?答案是远程方法调用。简称RMI。

Spring 简化了RMI的实现过程,我们现在只要配置好即可正确发布我们的RMI服务。

package com.spring.rmi.common;

public interface IPerson {
	
	public String getName();
	
	public String getEmail();
	
}


package com.spring.rmi.common.impl;

import com.spring.rmi.common.IPerson;

public class PersonImpl implements IPerson {

	@Override
	public String getName() {
		return "mike";
	}

	@Override
	public String getEmail() {
		return "zhaoming23@gmail.com";
	}

}


服务端配置文件:server-rmi.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:aop="http://www.springframework.org/schema/aop"
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">

	<!-- 1.用RMI发布的接口实现类 -->
	<bean id="personImpl" class="com.spring.rmi.common.impl.PersonImpl" />

	<!-- 2.利用Spring类发布这个RMI服务 -->
	<bean id="service" class="org.springframework.remoting.rmi.RmiServiceExporter">
		<property name="service">
			<!-- 2.1指定服务的实现 -->
			<ref bean="personImpl" />
		</property>
		<property name="serviceName">
			<!-- 2.2指定服务的名字 -->
			<value>person</value>
		</property>
		<property name="serviceInterface">
			<!-- 2.3指定服务的接口 -->
			<value>com.spring.rmi.common.IPerson</value>
		</property>
		<property name="registryPort">
			<!-- 2.4指定服务的端口 -->
			<value>5923</value>
		</property>
	</bean>
</beans>


package com.spring.rmi;

import org.springframework.context.support.ClassPathXmlApplicationContext;

public class RmiBootstrap {
	
	public static void main(String[] args) throws InterruptedException {
		new ClassPathXmlApplicationContext("server-rmi.xml");
		Thread.sleep(1000 * 60 * 60 );
	}
	
	
}


这样就启动了我们的RMI服务,那么客户端如果使用呢?


客户端配置文件:client-rmi.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:aop="http://www.springframework.org/schema/aop"
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
		http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">

	<bean id="person" class="org.springframework.remoting.rmi.RmiProxyFactoryBean">
		<property name="serviceInterface">
			<value>com.spring.rmi.common.IPerson</value>
		</property>
		<property name="serviceUrl">
			<value>rmi://localhost:5923/person</value>
		</property>
	
	</bean>
</beans>



package client;

import org.apache.log4j.Logger;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.spring.rmi.common.IPerson;

public class RmiInvoke {
	private static final Logger logger = Logger.getLogger(RmiInvoke.class);
	public static void main(String[] args) {
		ApplicationContext context = new ClassPathXmlApplicationContext("client-rmi.xml");
		IPerson p = (IPerson) context.getBean("person");
		
		logger.info(p.getName());
		logger.info(p.getEmail());
	}
}


运行结果
etc...
16:55:12 [main] INFO (RmiInvoke.java:15) - mike
16:55:12 [main] INFO (RmiInvoke.java:16) - zhaoming23@gmail.com


以上代码运行还需要必要的jar包
Spring相关jar包
aopalliance.jar
apache commons-logging.jar



在实际使用中还有一种情况是开多个服务

其实只要在服务端多配置一个类似的RmiServiceExporter
当然发布的时候注意名称不要相同即可。
分享到:
评论

相关推荐

    RMI入门例子和教程,分初级、进阶,还有与Spring整合的

    自己收集了一些跑得通的教程,并自己整理给出了,入门例子。包括:最原生的使用javac和rmic的例子;还有进一步的,使用IDM,用代码代理原生rmic...还有RMI和Spring整合的例子。 另外附有:例子说明 和 一些简单的教程。

    java Spring+RMI入门程序源代码

    java Spring+RMI入门程序源代码

    spring RMI 实例

    spring 对 RMI 的封装 一个很精简的例子,用于springRMI的入门学习很好 调试通过咯

    开源框架 Spring Gossip

    RMI Hessian、 Burlap Http Invoker &lt;br&gt;邮件 对于邮件发送服务的支援是由Spring的 org.springframework.mail.MailSender介面所定义,它有两个实作类别, org.springframework.mail.cos....

    Pro Spring Integration (Apress)

    Pro Spring Integration, 英文版....Spring Integration可以和EJB、RMI、JMS这些标准技术协同使用,能让你在一处对复杂的解决方法进行建模,从而对标准技术有所增强。这在很大程度上简化了这些技术的使用。

    word源码java-fleet-spring-boot:SpringBoot教程,SpringBoot的各种简单示例,快速入门使用Sprin

    word源码java fleet-spring-boot ...RMI 远程调用框架 :Spring Boot Hessian 远程调用框架 :Spring Boot Forest Http 请求 :Spring Boot HTTP 访问控制 :Spring Boot GraphQL 构建 API :Spring Boot

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (1)

    第一章 J2EE快速入门 1.1 J2EE概述 1.1.1 J2EE的来源 1.1.2 J2EE整体框架 1.1.3 从J2EE到JavaEE 1.2 J2EE组件 1.2.1 客户端组件 1.2.2 Web组件 1.2.3 业务逻辑组件 1.3 J2EE容器 1.3.1 容器服务 1.3.2 容器类型 1.4 ...

    Spring攻略(第二版 中文高清版).part1

    10.1 Flex入门 388 10.1.1 问题 388 10.1.2 解决方案 388 10.1.3 工作原理 388 10.2 离开沙箱 393 10.2.1 问题 393 10.2.2 解决方案 394 10.2.3 工作原理 394 10.3 为应用添加Spring BlazeDS支持 ...

    Spring攻略(第二版 中文高清版).part2

    10.1 Flex入门 388 10.1.1 问题 388 10.1.2 解决方案 388 10.1.3 工作原理 388 10.2 离开沙箱 393 10.2.1 问题 393 10.2.2 解决方案 394 10.2.3 工作原理 394 10.3 为应用添加Spring BlazeDS支持 ...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (2)

    第一章 J2EE快速入门 1.1 J2EE概述 1.1.1 J2EE的来源 1.1.2 J2EE整体框架 1.1.3 从J2EE到JavaEE 1.2 J2EE组件 1.2.1 客户端组件 1.2.2 Web组件 1.2.3 业务逻辑组件 1.3 J2EE容器 1.3.1 容器服务 1.3.2 容器类型 1.4 ...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (3)

    第一章 J2EE快速入门 1.1 J2EE概述 1.1.1 J2EE的来源 1.1.2 J2EE整体框架 1.1.3 从J2EE到JavaEE 1.2 J2EE组件 1.2.1 客户端组件 1.2.2 Web组件 1.2.3 业务逻辑组件 1.3 J2EE容器 1.3.1 容器服务 1.3.2 容器类型 1.4 ...

    JSP快速入门教程

     Java EE包括2个体系:标准(上面介绍的)+流行(Struts+Hibernate+Spring)  两套体系都是JSP+Servlet为基础。 2 JSP会涉及哪些内容  JSP语法基础(Java+HTML):  对于Java,需要掌握Java的基本语法(类...

    Java高手真经 编程基础卷.part2.rar

    Java开发入门:JDK、JVM、Eclipse、Linux。Java语法基础:类、抽象类、接口、内部类、匿名类、异常、编码规范。Java核心编程:流、多线程、实体类、集合类、正则表达式、XML、属性文件。Java图形编程:AWT(Java2D、...

    《程序天下:J2EE整合详解与典型案例》光盘源码

    第一章 J2EE快速入门 1.1 J2EE概述 1.1.1 J2EE的来源 1.1.2 J2EE整体框架 1.1.3 从J2EE到JavaEE 1.2 J2EE组件 1.2.1 客户端组件 1.2.2 Web组件 1.2.3 业务逻辑组件 1.3 J2EE容器 1.3.1 容器服务 1.3.2 容器类型 1.4 ...

    atmosphere-samples:大气样本

    适用于Jersey,Jersey2,GWT,JavaScript,JQuery,Netty,Guice,Spring,RMI,RabbitMQ,Redis,Hazelcast,JGroups,jsr 356,Sockjs,Socket.IO,JMS,Vert.x,Play框架,Java的Atmosphere WebSockets示例EE,...

    embedded-jmxtrans:进行中的JMX指标导出器

    嵌入式jmxtrans ...启用了Spring Framework的Web应用程序的入门指南。 玛文 添加embedded-jmxtrans依赖项 &lt; groupId&gt;org.jmxtrans.embedded &lt; artifactId&gt;embedded-jmxtrans &lt; version&gt;1.0.12&lt;/ version

    经典JAVA.EE企业应用实战.基于WEBLOGIC_JBOSS的JSF_EJB3_JPA整合开发.pdf

     国内知名的高端IT技术作家,已出版《Spring 2.0宝典》、《基于J2EE的Ajax宝典》、《轻量级J2EE企业应用实战》、《Struts 2权威指南》、《Ruby On Rails敏捷开发最佳实践》等著作。 目录: 第0章 学习Java...

Global site tag (gtag.js) - Google Analytics