`
AsWater
  • 浏览: 24765 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

使用Spring简化RMI编程到底简化了什么

阅读更多
今天在重看Spring in Action,看到远程调用这一章。讲到了Spring简化RMI的开发。说实话,在我的工作中还从来没有编写过RMI的代码,关于RMI也只是当初学习的时候看过一点点,现在早就忘记了。因此又把RMI翻出来看了看。

编写RMI客户-服务器程序包括以下的基本步骤:

1. 定义远程接口

2. 实现远程接口

3. 生成stub 和 skeleton (V1.2不需要skeleton)

4. 启动注册表并注册对象

5. 编写使用远程对象的客户



其中1-4是服务器端要进行的工作,5是客户端要进行的工作。下面是一个很简单的RMI的示例程序:

1. 定义远程接口
import java.rmi.Remote;

public interface HelloInterface extends Remote {
	public String sayHello() throws java.rmi.RemoteException;
}


2. 实现远程接口
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
import java.util.Calendar;

public class HelloServer extends UnicastRemoteObject implements HelloInterface {

	public HelloServer() throws RemoteException {
		super();
	}

	@Override
	public String sayHello() throws RemoteException {
		String greeting = null;
		int hourOfDay = Calendar.getInstance().get(Calendar.HOUR_OF_DAY);
		if (hourOfDay >= 20){
			greeting = "Good evening.";
		} else if (hourOfDay >= 12){
			greeting = "Good afternoon.";
		} else {
			greeting = "Good Morning";
		}
		
		return greeting;
	}

}


3. 生成stub和skeleton
使用Java提供的命令行来生成
rmic -d HelloServer

4. 启动注册表并注册对象
import java.rmi.Naming;
import java.rmi.registry.LocateRegistry;

public class HelloServerRegistor {
	public static void main(String[] args){
		try{
			HelloServer server = new HelloServer();
			System.out.println("HelloServer is created: ");
			LocateRegistry.createRegistry(1099);
			Naming.rebind("/HelloServer", server);
			System.out.println("HelloServer is bound.");
		} catch (Exception e){
			e.printStackTrace();
		}
	}
}


5. 编写客户端程序
import java.rmi.Naming;
import java.rmi.RMISecurityManager;

import ServerSide.HelloInterface;

public class HelloClient {
	public static void main(String[] args){
		if (System.getSecurityManager() == null){
			System.setSecurityManager(new RMISecurityManager());
		}
		
		try{
			HelloInterface server = (HelloInterface)Naming.lookup("/HelloServer");
			System.out.println(server.sayHello());
		} catch (Exception e){
			e.printStackTrace();
		}
	}
}






上面是我们直接使用RMI时需要手动完成的工作,注意因为我的实例代码都是运行在同一台机器上的,在RMI的URL中没有指定主机名称。

下面来看我们使用Spring会简化哪些工作。
从客户端的角度来看:
假设已经有服务器提供了HelloServer服务,我们只需要调用该服务。Spring使用RmiProxyFactoryBean来创建指向RMI服务的代理。

引用

<bean id = "HelloServer" class="org.springframework.remoting.rmi.RmiProxyFactoryBean">
    <property name="serviceUrl">
        <value> /HelloServer</value>
    </property>
    <property name="serviceInterface">
        <value>HelloInterface</value>
    </property>
</bean>




要调用HelloServer的程序就可以使用Spring定义的这个HelloServer bean来调用RMI了。

抛开Spring所提倡的IoC等,对于客户端来说,其实没有简化多少东西。另外Spring框架在这里会处理所有的RemoteException并将其封装成RuntimeException抛出,因此在客户端程序中不是必须要写RemoteException的处理代码。

从服务器端的角度来看
1.我们仍然需要定义接口,但是不需要继承Remote接口。
2.当然也需要实现该接口。
3.将实现类在Spring中配置为bean
引用

<bean id="HelloServerImpl" class="HelloServer">
  ......
</bean>

4.使用Spring的RmiServiceExporter将bean输出成一个RMI服务
引用

<bean class="org.spring.framework.remoting.rmi.RmiServiceExporter">
    <property name="service">
        <ref bean="HelloServerImpl"/>
    </property>
    <property name="serviceName">
        <value>HelloServer</value>
    </property>
    <property name="serviceInterface">
        <value>HelloInterface</value>
    </property>
</bean>

对于服务器端来说,原来的步骤3(生成stup和skeleton)与步骤4(启动注册表并注册RMI服务)没有了,取而代之的是配置了RmiServiceExporter类型的bean。但是从实际的工作量上来看,并没有简化多少。

那么使用Spring进行RMI编程到底简化了什么呢?我的理解是,由于Spring封装了RMI的具体实现,所以简化的实际上是对RMI编程知识的要求。
0
0
分享到:
评论

相关推荐

    Spring RMI

    Spring的面向切面编程(AOP)可以与RMI集成,提供日志记录、性能监控、安全控制等功能。通过定义切点和通知,可以在RMI调用前后执行特定逻辑。 ### 5. Spring RMI优化 - **RMI超时设置**:可以配置RMI连接和操作的...

    rmi与spring整合实例

    Spring框架则是一个强大的轻量级应用框架,它提供了依赖注入、面向切面编程等功能,极大地简化了企业级Java应用的开发。 当我们谈论“RMI与Spring整合实例”时,我们通常是指将RMI技术与Spring框架结合使用,以便...

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

    Spring通过提供RMI集成,简化了RMI服务的创建和调用。以下是一些关键点: 1. **服务接口定义**:首先,你需要定义一个远程服务接口,这个接口将包含你希望在远程进程中执行的方法。 2. **服务实现**:接着,创建该...

    spring rmi 改造

    在IT行业中,Spring框架是Java开发中的一个基石,它提供了丰富的功能来简化应用程序的构建,包括远程过程调用(Remote Method Invocation,RMI)服务。本文将深入探讨"spring rmi 改造"这一主题,主要关注如何在原有...

    spring RMI简单例子

    Spring RMI在此基础上提供了更高级别的抽象,通过Spring的依赖注入(DI)和AOP(面向切面编程)能力简化了服务的创建和调用。 要实现Spring RMI,我们需要以下组件: 1. **远程接口(Remote Interface)**:这是...

    Spring(RMI)实例

    Spring框架是Java开发中广泛应用的轻量级框架,它提供了丰富的功能来简化应用程序的构建,包括依赖注入、AOP(面向切面编程)以及多种集成技术。RMI(Remote Method Invocation,远程方法调用)是Java平台上的一个...

    spring RMI 服务(自动把service发布为RMI服务)

    在Spring框架中,我们可以通过Spring的AOP(面向切面编程)和IoC(控制反转)特性简化RMI服务的创建和管理。首先,你需要定义一个Service接口和其实现类,这些类可以像普通Spring Bean一样被管理。例如: ```java ...

    java spring rmi

    Spring框架提供了对RMI的支持,简化了RMI的配置和使用,使得开发人员可以更加便捷地构建分布式服务。 首先,我们来看“SpringRMIClient”和“SpringRMIServer”这两个文件名,它们分别代表了RMI应用中的客户端和...

    spring+rmi实现非本地部署

    在IT行业中,Spring框架是Java领域最常用的轻量级应用框架之一,而RMI(Remote Method Invocation)则是Java提供的一种远程方法调用机制,用于构建分布式应用程序。将Spring与RMI结合,可以实现非本地部署的服务,...

    spring rmi 简单应用

    Spring RMI在此基础上增加了配置简化、依赖注入等特性,使得远程服务的创建和调用更加便捷。 首先,我们来理解一下Spring RMI的核心概念: 1. **远程接口(Remote Interface)**:这是定义远程方法的接口,通常...

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

    总结起来,这个登录Demo巧妙地融合了Spring的控制反转与面向切面编程,Hibernate的对象关系映射,MySQL的可靠数据存储,RMI的远程通信,以及Swing的图形界面设计,形成了一套完整的客户端-服务器端应用。这样的组合...

    spring rmi 多接口配置 调用

    在IT领域,Spring框架是...这种配置方式提高了代码的可维护性和模块化程度,同时也利用了Spring的强大功能,简化了RMI的使用。在实际项目中,可以根据需求进一步优化配置,比如添加异常处理、负载均衡、安全控制等。

    rmi实例(Spring整合)

    2. Spring Bean管理:Spring容器可以管理和实例化远程服务对象,通过配置文件或注解定义Bean,简化RMI服务的创建和管理。 3. JNDI查找:Spring可以使用JNDI(Java Naming and Directory Interface)来查找RMI注册表...

    Spring,RMI,thread,hibernate, webservice attachment

    标题中的关键词包括“Spring”、“RMI”、“thread”、“Hibernate”和“Webservice”,这些是Java编程中的核心概念,尤其在企业级应用开发中尤为重要。接下来,我们将详细探讨这些技术。 1. **Spring**:Spring 是...

    RMI远程调用

    Spring框架提供了一套更高级别的抽象来简化RMI的使用。通过Spring的`RemoteProxyFactoryBean`,可以创建一个代理对象,该对象在调用方法时自动执行RMI调用。此外,Spring的`RmiServiceExporter`可以方便地导出一个...

    java-RMI技术讲解

    - 客户端使用`org.springframework.remoting.rmi.RmiProxyFactoryBean`实现远程服务的代理功能。 - 客户端还需要定义与服务器端服务接口相同的类,以便进行调用。 #### 3. RMI的局限性 RMI当前使用Java远程消息...

    RMI.rar_Java RMI_java.rmi_java.rmi.Remot_remote

    Java RMI(远程方法调用)是Java编程语言中的一项核心技术,自JDK 1.1版本起就被引入,用于构建分布式系统。RMI允许Java对象在不同的Java虚拟机(JVMs)之间进行交互,仿佛这些对象是在同一台机器上一样。这种技术的...

    rmi例子文档

    远程方法调用(Remote Method Invocation, RMI)是Java平台上的一个核心特性,它允许Java对象在不同的JVM之间进行...通过上述文件学习,你可以深入理解RMI的概念,掌握RMI的使用方法,以及Spring如何简化RMI的集成。

    pro spring 4

    - **Spring框架简介**:Spring框架是一个开源的轻量级企业应用开发框架,它提供了全面的编程和配置模型,简化了Java EE应用程序的开发。 - **Spring 4版本特点**:本书《Pro Spring 4》覆盖的是Spring 4版本,这一...

Global site tag (gtag.js) - Google Analytics