`

spring rmi学习示例

 
阅读更多

 

spring rmi实际上是扩展了下java rmi的实现,可以使用bean的xml配置方式使用rmi。

RMI (Remote Method Invocation)是从JDK 1.1开始就出现的API功能,它让客户端在使用远端服务所提供的服务时,就如何使用本地服务一样,然而RMI在使用时必须一连串繁复的手续,像是服务介面在定义时必须继承java.rmi.Remote介面、服务Server在实作时必须继承java.rmi.UnicastRemoteObject类别、必须使用rmic指令产生stub与skeleton等,设定上手续繁杂。 您可以在Spring中透过org.springframework.remoting.rmi.RmiServiceExporter来简化使用RMI的手续,来实际看看例子,了解Spring在RMI上的使用与简化,首先来看一下RMI伺服端的撰写,首先定义一个服务接口:

 

package org.spring;

public interface RmiService {

    public String doWork();
    
    public int add(int a, int b);
}

 

 服务物件的接口不用继承java.rmi.Remote介面,而在实现RmiService时也不用继承java.rmi.UnicastRemoteObject类别,

package org.spring;

public class RmiServiceImpl implements RmiService{

    @Override
    public String doWork() {
        return "this message return from server";
    }

    @Override
    public int add(int a, int b) {
        return a+b;
    }

}
 这只是个简单的示例

 

接下来您只要在Bean定义档中定义,让Spring管理、生成Bean实例,如此即可注册、启动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:aop="http://www.springframework.org/schema/aop"
	xmlns:tx="http://www.springframework.org/schema/tx" 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/aop
           http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
           http://www.springframework.org/schema/tx
           http://www.springframework.org/schema/tx/spring-tx-2.5.xsd 
           http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context-2.5.xsd"
	default-autowire="byName">
	
    <bean id="rmiService" 
          class="org.spring.RmiServiceImpl"/>

    <bean id="serviceExporter" 
          class="org.springframework.remoting.rmi.RmiServiceExporter">
        <property name="service">
            <ref bean="rmiService"/>
        </property>
        <property name="serviceName">
            <value>rmiService</value>
        </property>
        <property name="serviceInterface">
            <value>org.spring.RmiService</value>
        </property>        
    </bean>
</beans>
 

只要告诉org.springframework.remoting.rmi.RmiServiceExporter服务物件、名称与要代理的介面,之后Spring读取完定义档并生成Bean实例后,RMI服务就会启动,来撰写一个简单的RMIServer类别,以启动RMI服务:

package org.spring;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

import org.springframework.context.support.ClassPathXmlApplicationContext;

public class RMIServer {

    public static void main(String[] args) throws IOException {

        new ClassPathXmlApplicationContext("config/rmi-server.xml");
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

        while (true) {
            if (reader.readLine().equals("exit")) {
                System.exit(0);
            }
        }

    }
}
 


接下来,在客户端,只要依赖接口对应的jar包就可以了,然后再spring的配置文件中配置好需要访问的服务的地址和对应的接口名称

<span style="font-family:serif;font-size:12px;"><?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:tx="http://www.springframework.org/schema/tx" 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/aop
           http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
           http://www.springframework.org/schema/tx
           http://www.springframework.org/schema/tx/spring-tx-2.5.xsd 
           http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context-2.5.xsd"
	default-autowire="byName">
	
     <bean id="rmiServiceProxy" 
          class="org.springframework.remoting.rmi.RmiProxyFactoryBean">
        <property name="serviceUrl">
            <value>rmi://localhost/rmiService</value>
        </property>
        <property name="serviceInterface">
            <value>org.spring.RmiService</value>
        </property>
    </bean>       
</beans></span>

 

注意到"serviceUrl"属性的设定,它是以"rmi://"开头,接着指定伺服器位址与服务名称,来撰写个简单的客户端程式以使用RMI伺服器上的服务

<span style="font-family:serif;font-size:12px;">package org.spring;

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

public class RMIClient {
    public static void main(String[] args) {
        ApplicationContext context =
            new ClassPathXmlApplicationContext(
                    "config/rmi-client.xml");

        RmiService service = 
            (RmiService) context.getBean("rmiServiceProxy");

        String result1 = service.doWork();
        System.out.println(result1);

        int result2 = service.add(1, 2);
        System.out.println(result2);
    }
}
</span>

 

然后我们执行RMIServer.java类,在spring web应用中只要配置文件加载到spring的加载路径即可应用。

然后再执行RMIClient.java类,执行结果如下:



 这样使用spring就能很方便的简化java 的rmi调用,并且由spring管理,在分布式的应用中就能做到客户端只依赖接口,不依赖实现。

 

  • 大小: 70.7 KB
分享到:
评论

相关推荐

    Spring RMI

    **Spring RMI 深度解析** Spring框架作为Java企业级应用开发的首选,提供了丰富的功能,包括对远程方法调用(Remote Method Invocation,RMI)的支持。RMI是Java平台上的一个核心特性,允许在分布式环境中进行对象...

    springRMI示例

    在"springRMI示例"中,我们将探讨如何利用Spring框架实现RMI来构建一个能够执行引擎机功能的系统,用于业务处理。 ### Spring RMI 的核心组件 1. **Remoting Beans**: 在Spring中,远程接口和其实现被定义为普通的...

    spring rmi 小例子

    6. **源码分析**:在提供的压缩包文件`SpringRMI`中,可能包含了上述所有步骤的代码示例。通过阅读这些源码,你可以深入理解Spring RMI的工作原理,包括服务暴露、注册、代理创建等。 7. **工具使用**:在开发过程...

    Spring Rmi使用文档

    ### Spring RMI 使用详解 #### 一、Spring RMI 概述 Spring RMI 是 Spring 框架中用于支持远程方法调用(Remote Method Invocation)的功能模块。通过 Spring RMI, 开发者能够更加简便地搭建和管理远程服务。传统上...

    Spring-RMI.rar_spring rmi

    本文将详细讲解Spring与RMI的整合,以及如何通过"SpringRMIClient"和"SpringRMIServer"这两个示例文件实现跨项目的远程方法调用。 一、Spring整合RMI基础 1.1 RMI原理:RMI的核心在于Java的`java.rmi`包,它定义了...

    spring rmi 简单应用

    Spring RMI(Remote Method Invocation)简单应用主要涉及的是在Java中使用Spring框架来实现远程方法调用的技术。RMI是Java提供的一种分布式计算...通过学习和掌握Spring RMI,可以更好地设计和构建分布式应用系统。

    spring RMI 远程接口调用

    这些示例代码是学习和实践Spring RMI的一个很好的起点,你可以通过运行它们来深入理解这个技术的工作原理。 总的来说,Spring RMI提供了一种简单且强大的方式来实现Java应用的分布式架构,通过它可以构建高度可扩展...

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

    在Spring框架中,远程方法调用(Remote Method Invocation, RMI)是一种...通过学习这个压缩包中的示例,开发者不仅可以掌握RMI的基本原理,还能了解到Spring如何简化这个过程,从而在实际开发中更高效地利用RMI技术。

    spring-rmi-example:Spring rmi 示例,取自 code.google.com,因为 code.google.com 将停止使用

    spring-rmi-示例 项目是从 code.google.com/p/springrmiexample 导出的,我这边稍作修改 这个项目是如何在 Spring 的帮助下设置 RMI 服务器和客户端的示例。 该项目包含2个子项目: Spring RMI 示例服务器,即 Web...

    rmi与spring整合实例

    在IT行业中,远程方法调用(Remote Method Invocation,RMI)和Spring框架是两个非常重要的概念,它们在分布式系统开发中发挥着关键作用。RMI是Java平台提供的一种技术,用于在不同Java虚拟机(JVM)之间进行对象间...

    java Spring+RMI入门程序源代码

    本项目提供了一个入门级的源代码示例,帮助开发者理解如何在 Spring 环境下集成 RMI 技术。以下是关于这两个技术及其整合的详细知识点: **Spring 框架** 1. **Spring 概述**:Spring 是一个开源的 Java 应用开发...

    java spring+rmi 的远程调用例子

    Java Spring与RMI(Remote Method Invocation)的整合是企业级应用中常见的远程服务交互方式。Spring框架提供了对RMI的...通过学习和理解这些内容,你可以创建自己的Spring-RMI应用,实现不同节点间的分布式服务交互。

    spring-rmi

    虽然提供的压缩包子文件名列表`jn`没有提供具体的信息,但可以假设其中可能包含了Spring RMI配置的示例代码、测试用例或其他辅助资源,帮助开发者理解和实践Spring RMI的使用。 总结来说,Spring RMI是Spring框架...

    Spring(RMI)实例

    通过分析和实践这个Spring RMI实例,开发者可以学习到如何在Spring环境中设置和使用RMI,这对于理解和掌握分布式系统的设计原则,尤其是Java环境下的分布式服务实现非常有帮助。同时,这也是一个很好的起点,可以...

    spring httpInvoker示例

    在本文中,我们将深入探讨如何使用Spring框架中的HTTP Invoker组件进行远程方法调用(RMI)的实例。HTTP Invoker是Spring框架提供的一种轻量级远程调用解决方案,它利用HTTP协议在客户端和服务端之间传输Java对象。...

    HTTP客户端,HTTP服务器,RMI客户端和服务器

    具体到实验文件"rmi",这可能是RMI相关代码或者教程的集合,可能包含了服务器端和客户端的示例代码,以及如何在Java中设置和运行RMI服务的说明。"cs"可能代表"Client-Server",也就是客户端-服务器相关的文件,可能...

Global site tag (gtag.js) - Google Analytics