开发和访问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启动后启动了");
}
}
分享到:
相关推荐
总的来说,"spring+rmi非本地实现"项目展示了如何利用Spring和RMI来构建分布式服务,提供了一种跨越网络调用的方法,增强了系统的可扩展性和解耦性。理解和掌握这部分知识对于开发分布式系统具有重要意义。
这样的组合不仅便于开发,也易于维护,对于初学者来说,是一个很好的学习和实践平台,有助于理解各种技术在实际项目中的作用和协同工作的方式。通过深入研究这个Demo,开发者可以提升自己的技能,为构建更复杂的企业...
通过分析和修改这些配置,开发者可以深入理解EJB3、Struts和Spring如何协同工作。 总结来说,"EJB3与Struts与Spring整合开发(SSE)"涉及的主要知识点包括: 1. EJB3的核心概念:实体Bean、会话Bean和消息驱动Bean...
10. **Chapter 11**:可能讲解了Spring与其他技术的整合,如Spring与Struts、JSF等其他MVC框架的集成,或是Spring与EJB的协同工作。 通过这些章节的源代码,读者不仅可以学习到Spring框架的核心技术和高级特性,还...
`spring-remoting.jar`支持多种远程调用协议,如RMI、Hessian、Burlap等,使得Spring应用能够跨越网络边界进行交互。 #### spring-jmx.jar JMX(Java Management Extensions)是一种标准的Java技术,用于管理和...
DAO支持和JDBC测试支持章节可能讲述了如何在Spring中使用DAO模式,并且使用JDBC进行数据访问,包括Spring JDBC框架的介绍、控制数据库连接、JDBC批量操作和利用SimpleJdbc类简化JDBC操作。 ORM和数据访问章节介绍了...
通过学习SpringCloud微服务基础教程,开发者能够深入了解如何构建高效、稳定的微服务架构,并能够利用SpringCloud提供的工具解决实际开发中的问题。随着云计算和微服务技术的发展,SpringCloud已经成为现代软件开发...
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...
EJB底层利用RMI实现在服务器间的通信,特别是EJB中的远程接口(Remote Interface)就是基于RMI的。 4. **RMI的实现步骤**: - 创建远程接口:定义一个继承自`java.rmi.Remote`的接口,声明所有要远程调用的方法。 ...
作者通过源代码的阅读,剖析了Spring框架的设计原理和内部架构,带领读者深入理解Spring各个组件是如何协同工作,以及其设计决策背后的原因。这样的分析对于Java开发者深入掌握Spring框架有着极大的帮助,尤其是在...
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...
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...
而Spring Integration则更加灵活,它不仅可以独立运行,还可以与其他标准技术(如EJB、RMI、JMS等)协同工作,极大地简化了这些技术的使用。 ### 核心组件解析 #### 四、Spring Integration核心组件 - **Channels...
Spring框架完全可移植,可以在任何应用服务器环境下运行,不仅限于服务器环境,且与WebSphere等应用服务器协同工作良好。 Spring框架的主要目标包括: 1. **非侵入式设计**:应用程序代码对Spring API的依赖最小或...
本文将深入探讨Spring如何与EhCache协同工作,以及如何在实际项目中实施和配置。 **1. EhCache简介** EhCache是Java的一个开源、高性能、可扩展的缓存库,它支持内存和磁盘存储,可以进行分布式缓存。EhCache提供...
10. **Java消息服务(JMS)支持**:Spring提供对JMS的全面支持,可以与多种开源消息代理如Apache ActiveMQ、Mule ESB、JbossMQ等协同工作。 11. **其他模块**:Spring还有许多其他功能,如测试支持、任务调度、缓存...
Spring是一个全面的Java企业级应用开发框架,提供依赖注入(DI)、面向切面编程(AOP)、事务管理、JDBC抽象、数据访问/对象关系映射(ORM)支持等功能。Spring的模块化设计允许开发者根据项目需求选择性地使用其中...
Spring MVC、Spring Boot和Dubbo是Java开发领域中极为重要的技术框架,它们分别在Web应用、微服务管理和分布式服务调用方面发挥着关键作用。这篇文档将深入探讨这三者的核心概念、工作原理以及如何结合使用。 **...
Java提供了RMI、JMS、JGroups等技术,支持分布式服务的构建,而Dubbo和Spring Cloud等框架则简化了微服务的开发。 8. **并发编程**:Java的并发库提供了线程、锁、同步工具,理解并发原理,掌握线程池的使用,可以...