如何在Spring框架中使用RMI技术

在博客《RMI远程方法调用技术》中使用纯Java代码演示了RMI技术的使用,本篇博客将介绍如何在Spring中使用RMI技术。

正如博客《RMI远程方法调用技术》提到的那样——RMI技术的应用通常包括在两个独立的应用程序中:RMI服务端应用程序和RMI客户端应用程序。本博客也从这两方面入手:
        RMI服务端应用程序:

1、自定义远程接口

代码如下:

package com.ghj.packageofrmi;

/**
 * 定义远程接口。
 *
 * @author 高焕杰
 */
public interface IHelloWordService{

	/**
     * 获取信息
     *
     * @author 高焕杰
     */
    String getMsg();
}

2、自定义远程接口实现类

代码如下:

package com.ghj.packageofrmi;

/**
 * 远程接口实现类。
 *
 * @author 高焕杰
 */
public class HelloWordService implements IHelloWordService{

    /**
     * 获取信息
     *
     * @author 高焕杰
     */
    public String getMsg(){
        return "Hello World!";
    }
}

3、在xml文件中配置RMI服务端

代码如下:

<?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:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context-2.5.xsd">

 	<!-- RMI服务端 -->
    <!-- RMI服务端远程接口实现类 -->
	<bean id="helloWordService" class="com.ghj.packageofrmi.HelloWordService" scope="prototype"/>
  	<bean class="org.springframework.remoting.rmi.RmiServiceExporter">
		<!-- 将远程接口实现类对象设置到RMI服务中 -->
		<property name="service" ref="helloWordService" />
		<!-- 设置RMI服务名,为RMI客户端依据此服务名获取远程接口实现类对象引用奠定基础 -->
		<property name="serviceName" value="helloWord" />
		<!-- 将远程接口设置为RMI服务接口 -->
		<property name="serviceInterface" value="com.ghj.packageofrmi.IHelloWordService" />
		<!-- 为RMI服务端远程对象注册表设置端口号-->
		<property name="registryPort" value="9090" />
		<!-- 其他属性可以查看org.springframework.remoting.rmi.RmiServiceExporter的类及其子类获取到-->
	</bean>

</beans> 

4、启动RMI服务端

代码如下:

package com.ghj.packageoftest;

import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * 启动RMI服务端
 *
 * @author 高焕杰
 */
public class StartRMIServer {

	public static void main(String[] args) {
        new ClassPathXmlApplicationContext("conf/spring/applicationContext.xml");
        System.out.println("RMI服务端启动!!!");
    }
}

RMI客户端应用程序:

1、自定义包含了RMI服务端自定义远程接口内的抽象方法的RMI客户端接口

代码如下:

package com.ghj.packageofrmi;

/**
 * 自定义与RMI服务端自定义远程接口名称相同的接口
 *
 * @author 高焕杰
 */
public interface IHelloWord{

    /**
     * 获取信息
     *
     * @author 高焕杰
     */
    String getMsg();
}

2、在xml文件中配置RMI服务端

代码如下:

<?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:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context-2.5.xsd">

    <!--RMI客户端-->
    <bean id="dataExchangeProxyService" class="org.springframework.remoting.rmi.RmiProxyFactoryBean">
        <property name="serviceUrl" value="rmi://localhost:9090/helloWord"/>
        <property name="serviceInterface" value="com.ghj.packageofrmi.IHelloWord"/>
        <!-- 当连接失败时是否刷新远程调用stub -->
        <property name="refreshStubOnConnectFailure" value="true"/>
    </bean>
</beans>

3、启动RMI客户端

代码如下:

package com.ghj.packageoftest;

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

import com.ghj.packageofrmi.IHelloWord;

/**
 * 启动RMI客户端
 *
 * @author 高焕杰
 */
public class RMIClient {

	public static void main(String[] args){
		ApplicationContext ctx = new ClassPathXmlApplicationContext("conf/spring/applicationContext.xml");
		IHelloWord helloWord = (IHelloWord) ctx.getBean("dataExchangeProxyService");
		System.out.println(helloWord.getMsg());
	}
}

正在总结整理中......

0分下载示例源码

时间: 2024-12-25 03:31:15

如何在Spring框架中使用RMI技术的相关文章

如何在spring框架中解决多数据源的问题

在我们的项目中遇到这样一个问题:我们的项目需要连接多个数据库,而且不同的客户在每次访问中根据需要会去访问不同的数据库.我们以往在spring和hibernate框架中总是配置一个数据源,因而sessionFactory的dataSource属性总是指向这个数据源并且恒定不变,所有DAO在使用sessionFactory的时候都是通过这个数据源访问数据库.但是现在,由于项目的需要,我们的DAO在访问sessionFactory的时候都不得不在多个数据源中不断切换,问题就出现了:如何让session

再析在spring框架中解决多数据源的问题

在前面我写了<如何在spring框架中解决多数据源的问题>,通过设计模式中的Decorator模式在spring框架中解决多数据源的问题,得到了许多网友的关注.在与网友探讨该问题的过程中,我发现我的方案并不完善,它只解决了一部分问题. 总结多数据源的问题,其实它需要分为以下三种情况:各个数据源的数据结构不同.各个数据源的数据结构相同.各个数据源的数据结构部分相同又有部分不同.对于第二种情况,各个数据源的数据结构相同,我们使用一个sessionFactory,而在sessionFactory中通

Spring5源码解析-Spring框架中的事件和监听器

事件和平时所用的回调思想在与GUI(JavaScript,Swing)相关的技术中非常流行.而在Web应用程序的服务器端,我们很少去直接使用.但这并不意味着我们无法在服务端去实现一个面向事件的体系结构. 在本文中,我们将重点介绍Spring框架中的事件处理.首先,会先介绍下事件驱动编程这个概念.接着,我们会将精力放在专门用于Spring框架中的事件处理之上.然后我们会看到实现事件调度和监听的主要方法.最后,我们将在Spring应用程序中展示如何使用基本的监听器. 事件驱动编程 在开始讨论事件驱动

设计模式在 Spring 框架中的良好应用

在开始正文之前,请你先思考几个问题: 你项目中有使用哪些 GOF 设计模式 说一说 GOF 23 种设计模式的设计理念 说说 Spring 框架中如何实现设计模式 假设我是面试官问起了你这些面试题,你该如何回答呢,请先思考一分钟. 好的,我们开始进入正题.设计模式实践里面提供了许多经久不衰的解决方案和最佳方案.这里,GOF 设计模式主要分为三大类:创建模式.结构模式和行为模式.创建模式对于创建对象实例非常有用.结构模式通过处理类或对象的组合来作用于企业级应用的设计结构,从而降低了应用的复杂性,提

细说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

FAQ系列 | Spring框架中调用存储过程失败

Spring框架中,调用存储过程同时还需要show create procedure权限,对于普通用户而言,还要授予 select on mysql.proc 权限才能正常 --------------------------------------分割线-------------------------------------- 知数堂 (http://zhishuedu.com)培训是由资深MySQL专家叶金荣.吴炳锡联合推出的专业优质培训品牌,主要有MySQL DBA实战优化和Python

Spring框架中利用注解进行自动装配的环境配置步骤和常见问题

第1步:配置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:context="http://www.spring

【Spring】8、Spring框架中的单例Beans是线程安全的么

看到这样一个问题:spring框架中的单例Beans是线程安全的么? Spring框架并没有对单例bean进行任何多线程的封装处理.关于单例bean的线程安全和并发问题需要开发者自行去搞定.但实际上,大部分的Spring bean并没有可变的状态(比如Serview类和DAO类),所以在某种程度上说Spring的单例bean是线程安全的.如果你的bean有多种状态的话(比如 View Model 对象),就需要自行保证线程安全. 最浅显的解决办法就是将多态bean的作用域由"singleton&

3.Spring框架中的标签与配置文件分离

1.Spring框架中标签的配置 1. id属性和name属性的区别 * id -- Bean起个名字,在约束中采用ID的约束,唯一 * 取值要求:必须以字母开始,可以使用字母.数字.连字符.下划线.句话.冒号 id:不能出现特殊字符 * name -- Bean起个名字,没有采用ID的约束(基本不在使用) * 取值要求:name:出现特殊字符.如果<bean>没有id的话 , name可以当做id使用 * Spring框架在整合Struts1的框架的时候,Struts1的框架的访问路径是以/