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

利用spring协同开发rmi

阅读更多
    开发和访问rmi服务确实比较沉闷,牵涉到好几个步骤,spring提供了一个代理工厂bean,简化了开发,能把rmi服务像本地javabean那样注入到客户端,同时代理了那些不同能优雅地处理的异常,这意味着远程方法不用重新抛出异常,降低了耦合。

1、编写接口,不用扩展java.rmi.Remote接口了
package com.spring.rmi;

public interface Upper {
	public String toUpper(String str);

}


2、实现接口,也是一个简单Java对象
package com.spring.rmi;

public class UpperImpl implements Upper {
	
	public UpperImpl(){
		
	}

	public String toUpper(String str) {
		return str.toUpperCase();
	}

}


3、在spring中配置rmi服务
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd">

<beans>
	<bean id="upper" class="com.spring.rmi.UpperImpl"></bean>
	<bean id="serviceExporter"
		class="org.springframework.remoting.rmi.RmiServiceExporter">
		<property name="service" ref="upper" />
		<!-- 定义服务名 -->
		<property name="serviceName" value="upperserver" />
                <!-- 实现接口-->
		<property name="serviceInterface"
			value="com.spring.rmi.Upper" />
                <!-- 端口-->
		<property name="registryPort" value="9688" />
	</bean>

</beans>

在Ioc容器启动后,由于默认立即加载bean,rmi服务也随即启动。

4、编写客户端测试访问rmi服务
package com.spring.rmi;

import java.rmi.RemoteException;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class UpperApp {
	 private Upper upper;

     public static void main(String[] args) throws RemoteException {
             ApplicationContext ctx = new ClassPathXmlApplicationContext("com/spring/rmi/client.xml");
             Upper up = (Upper) ctx.getBean("upserver");
             System.out.println(up.toUpper("fuck you !"));
     }

     public void setUpper(Upper upper) {
             this.upper = upper;
     } 
}


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd">

<beans>
	<bean id="upserver"
		class="org.springframework.remoting.rmi.RmiProxyFactoryBean">
		<property name="serviceUrl"
			value="rmi://127.0.0.1:9688/upperserver" />
		<property name="serviceInterface"
			value="com.spring.rmi.Upper" />
	</bean>

	<bean id="upserverClient" class="com.spring.rmi.UpperApp">
		<property name="upper" ref="upserver" />
	</bean>

</beans>


5、启动rmi服务(启动spring ioc)
package com.spring.rmi;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class TestServer {
	public static void main(String[] argv) {
		ApplicationContext ctx = new ClassPathXmlApplicationContext(
				"com/spring/rmi/server.xml");
		System.out.println("rmi服务在spring启动后启动了");
	}
}


分享到:
评论
1 楼 yin_bp 2011-05-19  
bbossgroups 3.2添加了直接发布rmi服务的方法,详情可查看iteye上bbossgroups专栏文章《bbossgroups 3.2 中rmi组件服务发布和rmi客服端获取方法》:
http://www.iteye.com/wiki/bbossgroups/3089-bbossgroups-aop-rmi

相关推荐

    spring+rmi非本地实现

    总的来说,"spring+rmi非本地实现"项目展示了如何利用Spring和RMI来构建分布式服务,提供了一种跨越网络调用的方法,增强了系统的可扩展性和解耦性。理解和掌握这部分知识对于开发分布式系统具有重要意义。

    基于Spring+hibernate+mysql+rmi+swing的登录Demo

    这样的组合不仅便于开发,也易于维护,对于初学者来说,是一个很好的学习和实践平台,有助于理解各种技术在实际项目中的作用和协同工作的方式。通过深入研究这个Demo,开发者可以提升自己的技能,为构建更复杂的企业...

    EJB3与Struts与Spring整合开发(SSE)

    通过分析和修改这些配置,开发者可以深入理解EJB3、Struts和Spring如何协同工作。 总结来说,"EJB3与Struts与Spring整合开发(SSE)"涉及的主要知识点包括: 1. EJB3的核心概念:实体Bean、会话Bean和消息驱动Bean...

    spring3.x企业应用开发实战源代码

    10. **Chapter 11**:可能讲解了Spring与其他技术的整合,如Spring与Struts、JSF等其他MVC框架的集成,或是Spring与EJB的协同工作。 通过这些章节的源代码,读者不仅可以学习到Spring框架的核心技术和高级特性,还...

    spring jar 包详解

    `spring-remoting.jar`支持多种远程调用协议,如RMI、Hessian、Burlap等,使得Spring应用能够跨越网络边界进行交互。 #### spring-jmx.jar JMX(Java Management Extensions)是一种标准的Java技术,用于管理和...

    spring-framework-5.0 中文文档PDF

    DAO支持和JDBC测试支持章节可能讲述了如何在Spring中使用DAO模式,并且使用JDBC进行数据访问,包括Spring JDBC框架的介绍、控制数据库连接、JDBC批量操作和利用SimpleJdbc类简化JDBC操作。 ORM和数据访问章节介绍了...

    SpringCloud我服务基础教程

    通过学习SpringCloud微服务基础教程,开发者能够深入了解如何构建高效、稳定的微服务架构,并能够利用SpringCloud提供的工具解决实际开发中的问题。随着云计算和微服务技术的发展,SpringCloud已经成为现代软件开发...

    Spring in Action(第二版 中文高清版).part2

    16.2 协同使用Spring和WebWork 2/Struts 2 16.3 集成Spring和Tapestry 16.3.1 集成Spring和Tapestry 3 16.3.2 集成Spring和Tapestry 4 16.4 协同使用Spring和JSF 16.4.1 解析JSF管理的属性 16.4.2 解析Spring...

    java RMI简单例子

    EJB底层利用RMI实现在服务器间的通信,特别是EJB中的远程接口(Remote Interface)就是基于RMI的。 4. **RMI的实现步骤**: - 创建远程接口:定义一个继承自`java.rmi.Remote`的接口,声明所有要远程调用的方法。 ...

    Spring技术内幕:深入解析Spring架构与设计原理

    作者通过源代码的阅读,剖析了Spring框架的设计原理和内部架构,带领读者深入理解Spring各个组件是如何协同工作,以及其设计决策背后的原因。这样的分析对于Java开发者深入掌握Spring框架有着极大的帮助,尤其是在...

    Spring in Action(第2版)中文版

    16.2协同使用spring和webwork2/struts2 16.3集成spring和tapestry 16.3.1集成spring和tapestry3 16.3.2集成spring和tapestry4 16.4协同使用spring和jsf 16.4.1解析jsf管理的属性 16.4.2解析springbean 16.4.3...

    Spring in Action(第二版 中文高清版).part1

    16.2 协同使用Spring和WebWork 2/Struts 2 16.3 集成Spring和Tapestry 16.3.1 集成Spring和Tapestry 3 16.3.2 集成Spring和Tapestry 4 16.4 协同使用Spring和JSF 16.4.1 解析JSF管理的属性 16.4.2 解析Spring...

    Pro Spring Integration (Apress)

    而Spring Integration则更加灵活,它不仅可以独立运行,还可以与其他标准技术(如EJB、RMI、JMS等)协同工作,极大地简化了这些技术的使用。 ### 核心组件解析 #### 四、Spring Integration核心组件 - **Channels...

    Spring ppt

    Spring框架完全可移植,可以在任何应用服务器环境下运行,不仅限于服务器环境,且与WebSphere等应用服务器协同工作良好。 Spring框架的主要目标包括: 1. **非侵入式设计**:应用程序代码对Spring API的依赖最小或...

    Spring+EhCache缓存实例

    本文将深入探讨Spring如何与EhCache协同工作,以及如何在实际项目中实施和配置。 **1. EhCache简介** EhCache是Java的一个开源、高性能、可扩展的缓存库,它支持内存和磁盘存储,可以进行分布式缓存。EhCache提供...

    spring基础功能分享参照.ppt

    10. **Java消息服务(JMS)支持**:Spring提供对JMS的全面支持,可以与多种开源消息代理如Apache ActiveMQ、Mule ESB、JbossMQ等协同工作。 11. **其他模块**:Spring还有许多其他功能,如测试支持、任务调度、缓存...

    springMVC+spring+dubbo hello world测试项目

    Spring是一个全面的Java企业级应用开发框架,提供依赖注入(DI)、面向切面编程(AOP)、事务管理、JDBC抽象、数据访问/对象关系映射(ORM)支持等功能。Spring的模块化设计允许开发者根据项目需求选择性地使用其中...

    springmvc+springboot+dubbo开发文档

    Spring MVC、Spring Boot和Dubbo是Java开发领域中极为重要的技术框架,它们分别在Web应用、微服务管理和分布式服务调用方面发挥着关键作用。这篇文档将深入探讨这三者的核心概念、工作原理以及如何结合使用。 **...

    Java 集成开发实例精解

    Java提供了RMI、JMS、JGroups等技术,支持分布式服务的构建,而Dubbo和Spring Cloud等框架则简化了微服务的开发。 8. **并发编程**:Java的并发库提供了线程、锁、同步工具,理解并发原理,掌握线程池的使用,可以...

Global site tag (gtag.js) - Google Analytics