`
lettoo
  • 浏览: 35082 次
  • 性别: Icon_minigender_1
  • 来自: 合肥
博客专栏
58ccff5b-5ca6-387a-9c99-a277f31a9e51
我和Java数据库操作的那...
浏览量:9464
社区版块
存档分类
最新评论

Spring RMI 简单实现

阅读更多

    好久没有写java代码了,最近工作项目上需要做一个java后台的程序,此后台程序提供start(), stop()和status()接口,分别用于启动、关闭和得到状态信息。

    参照以前的项目代码,做这种后台的程序可以采用RMI,即在某端口上启动server,通过RMI使用客户端(当然,这种服务端和客户端实际上在同一台机器上)来调用服务端的方法。

    老早以前看过spring对RMI的支持大大简化了工作,那么就用这个吧。

Spring RMI支持大致方法如下:

1. 先创建一个Server接口

package cn.lettoo.rmi.server;
public interface IService {
    String say();
}
 

 

2. 这个接口提供一个say()的方法,下面写一个这个接口的实现类

package cn.lettoo.rmi.server;
public class ServiceImpl implements IService {
    private int i = 0;   
    @Override
    public String say() {
        i ++;
        return String.format("This is %d times to say something.", i);
    }
}
 

 

接口实现也非常简单,就是打印一句话,告诉调用者这是第多少次调用了。

 

3. 接下来,通过spring bean定义一个RmiServiceExporter,这个xml为server.xml


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN"
  "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
    <bean id="myService" class="cn.lettoo.rmi.server.ServiceImpl" />

    <!--RmiServiceExporter显示地支持使用RMI调用器暴露任何非RMI服务 -->
    <bean id="serviceExporter" class="org.springframework.remoting.rmi.RmiServiceExporter">
        <property name="service" ref="myService" />
        <property name="serviceInterface" value="cn.lettoo.rmi.server.IService" />
        <!--定义要暴露的服务名可以与输出的bean不同名,客户端通过这个名字来调用服务 -->
        <property name="serviceName" value="MyService" />
        <!--覆盖RMI注册端口号(1099),通常应用服务器也会维护RMI注册,最好不要冲突 -->
        <property name="registryPort" value="1199" />
        <!-- alwaysCreateRegistry设置为true,这个端口上只会启动一个register,如果想再重新启动serve,就会报端口被占用的错误 -->
        <property name="alwaysCreateRegistry" value="true" />

    </bean>
         
</beans>
 

4. 然后,写一个RunServer类来启动这个server

package cn.lettoo.rmi.server;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class RunServer {
    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext(new String[] { "server.xml"});
    }
}
 

 

5. 现在,server已经启动起来了,它在localhost:1199上面启动了一个MyService的服务,接下来,使用spring bean来创建一个serviceProxy,作为客户端。这个xml为client.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN"
   "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
    <!--使用RmiProxyFactoryBean连接服务端 -->
    <bean id="serviceProxy" class="org.springframework.remoting.rmi.RmiProxyFactoryBean">
        <property name="serviceUrl" value="rmi://localhost:1199/MyService" />
        <property name="serviceInterface" value="cn.lettoo.rmi.server.IService" />
    </bean>
</beans>
 

 

6. 再写一个RunClient来启动一个client来调用server的方法吧

package cn.lettoo.rmi.client;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import cn.lettoo.rmi.server.IService;
public class RunClient {
    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext(new String[] { "client.xml"});       
        IService service = (IService)context.getBean("serviceProxy");  

        //调用两次    
        System.out.println(service.say());       
        System.out.println(service.say());
    }
}
 

就这么简单,项目文件结构如下图,需要加spring.jar和apache 的common-logging.jar,并把conf目录和jar包放到build path中

 


运行RunClient(注意,先要把RunServer运行起来)结果如下:

This is 1 times to say something.
This is 2 times to say something.

再运行一次:

This is 3 times to say something.
This is 4 times to say something.

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

相关推荐

    spring RMI简单例子

    在这个简单的例子中,我们将深入理解Spring RMI的工作原理以及如何实现一个基本的Spring RMI应用。 首先,让我们了解RMI的基本概念。RMI允许Java对象在不同的JVM之间进行通信,仿佛它们都在同一台机器上。它通过...

    SpringRMI小例子

    在这个"SpringRMI小例子"中,我们将深入探讨如何利用Spring框架来增强RMI的功能,使其更加灵活和易于管理。 首先,我们需要理解Spring框架在RMI中的角色。Spring提供了对RMI的高级抽象,通过其`org.springframework...

    spring rmi应用

    本文将深入探讨“Spring RMI(Remote Method Invocation)应用”,这是Spring框架中用于实现远程方法调用的功能,它使得分布式系统开发变得更加简单。 首先,RMI是Java平台上的一个核心特性,允许在不同JVM之间透明...

    spring rmi 简单应用

    Spring RMI(Remote Method Invocation)简单应用主要涉及的是在Java中使用Spring框架来实现远程方法调用的技术。RMI是Java提供的一种分布式计算能力,它允许一个Java对象调用网络另一端的Java对象的方法,实现了...

    Spring Rmi使用文档

    而 Spring RMI 大大简化了这些步骤,使得开发者可以通过简单的配置来创建 RMI 服务端和客户端。 #### 二、Spring RMI 的安装和使用 Spring 自 1.x 版本起就直接支持 RMI 功能,因此只需要包含 Spring 的 JAR 包...

    spring RMI 实用分享

    Spring RMI(Remote Method Invocation)是Java平台上的远程方法调用技术,允许程序在不同的Java虚拟机(JVM)之间进行通信,实现分布式系统。在本文中,我们将深入探讨Spring框架如何集成RMI,以及如何创建和使用...

    spring rmi 集成

    Spring框架提供了对RMI的支持,使得在Spring应用中集成RMI变得更加简单和灵活。本篇将深入探讨Spring如何与RMI结合,以及客户端和服务器端的实现细节。 ### 一、Spring RMI 服务器端集成 1. **定义远程接口**:...

    spring RMI 远程接口调用

    Spring RMI(Remote Method ...总的来说,Spring RMI提供了一种简单且强大的方式来实现Java应用的分布式架构,通过它可以构建高度可扩展和解耦的系统。理解和掌握这一技术,对于提升你的Java和Spring开发能力至关重要。

    Spring RMI

    为了创建一个简单的Spring RMI应用,你需要按照以下步骤操作: 1. 定义远程接口。 2. 实现远程接口。 3. 配置Spring的`RmiServiceExporter`以暴露服务。 4. 在客户端,配置`RmiProxyFactoryBean`以创建远程服务的...

    RMI SpringRMI API

    1. **面向对象**:RMI支持将远程对象视为对象,而不是简单的数据结构。 2. **可移动属性**:对象可以在网络中的任何地方创建和使用,无需关心其物理位置。 3. **设计方式**:RMI遵循面向对象的设计原则,如封装、...

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

    总结来说,Spring中的RMI集成提供了一种简单且灵活的方式来实现分布式系统中的跨JVM通信。通过学习这个压缩包中的示例,开发者不仅可以掌握RMI的基本原理,还能了解到Spring如何简化这个过程,从而在实际开发中更...

    springRMI示例

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

    spring与rmi 整合实例 源码详解

    spring 与rmi 的整合 1.首先编写接口 interface : 这里的接口要继承Remote, 它是一个标识接口 2.编写实现类 3.编写main方法用于启动 service 4 配置spring文件 编写客户端测试类

    java Spring+RMI入门程序源代码

    Java Spring 框架与 Remote Method Invocation (RMI) 的结合使用是构建分布式应用程序的一种常见方式。本项目提供了一个入门级的源代码示例,帮助开发者理解如何在 Spring 环境下集成 RMI 技术。以下是关于这两个...

    Spring-RMI (RMI调用, HTTP调用)

    而Spring-RMI(Remote Method Invocation)和HTTP调用是Spring框架中两种不同的远程通信机制,它们使得分布式系统间的交互变得简单易行。 **Spring-RMI** RMI是Java中的一种远程方法调用技术,允许对象在不同JVM...

Global site tag (gtag.js) - Google Analytics