使用Spring RMI调用远程方法

Spring有多种调用远程的方式,今天学习了一下远程方法调用(RMI)。

RMI需要服务端和客户端

我们先从服务器开始

我的代码结构

package rmi;

public interface ServerRmiI {

	public String sayHi(String name);
}
package rmi;

public class ServerRmiImpl implements ServerRmiI{

	 public String sayHi(String name) {
	  return "Hi,"+name;
	 }

}
package rmi;

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

public class Testrun {

	/**
	 * <p>
	 * </p>
	 * @author zhangjunshuai
	 * @date 2014-5-28 下午5:06:06
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		ApplicationContext context = new ClassPathXmlApplicationContext("classpath:applicationContext-bean.xml");
        context.getBean("serverTest");
	}

}

配置:

<?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"
    default-autowire="byName" default-lazy-init="true">
     <bean name="rmiserver" class="rmi.ServerRmiImpl"/>
     <bean name="serverTest" class="org.springframework.remoting.rmi.RmiServiceExporter">
       <property name="service" ref="rmiserver"/>
       <property name="serviceName" value="serverRmiTest"/>
       <property name="serviceInterface" value="rmi.ServerRmiI"/>
       <property name="registryPort" value="1021"/>
     </bean>
</beans>

说明:service本地实现,serviceName对外提供的名称对外提供的名称,registyPort开启端口

客户端:

代码结构

首先要定义对应接口

package client;

public interface ServerRmiI {

	public String sayHi(String name);
}

测试方法

package client;

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

public class TestRun {

	public static void main(String[] args) {
		  ApplicationContext context = new ClassPathXmlApplicationContext("classpath:/config/applicationContext-rmi-client.xml");
		        ServerRmiI rmiI = (ServerRmiI) context.getBean("clentrmi");
		        System.out.println(rmiI.sayHi("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"
    default-autowire="byName" default-lazy-init="true">
     <bean name="clentrmi" class="org.springframework.remoting.rmi.RmiProxyFactoryBean">
     <property name="serviceUrl" value="rmi://127.0.0.1:1021/serverRmiTest"/>
     <property name="serviceInterface" value="client.ServerRmiI"/>
     </bean>
</beans>

后台成功输出“hi”说明执行成功

需要注意:

1、RMI是很难穿越防火墙的;

2、RMI是基于Java的,这意味着客户端和服务端必须都是采用Java开发的;

3、因为RMI使用了Java的序列化机制,所以通过网络传输的对象类型必须保证在调用的两端是相同的版本。

-------------------------------------------------------------------------------------------------------------------------------------------------------------

参考:

《Spring事件(第3版)》

《Spring高级程序设计》

客户端:

使用Spring RMI调用远程方法

时间: 2024-10-24 14:44:42

使用Spring RMI调用远程方法的相关文章

RMI - Java远程方法调用

一.入门篇 Java RMI指的是远程方法调用(Remote Method Invocation). 它是一种机制, 能够让不同操作系统之间程序实现方法调用. 比如: 一台电脑上的Java程序可以通过RMI调用另一台电脑上的方法(EJB底层就是使用RMI). 二.RMI和webservice RMI是在TCP协议上传递可序列化的Java对象, 只能用在Java虚拟机上, 客户端和服务端必须都是Java. webservice是在http协议上传递xml文件, 它与语言和平台无关, 可以在异构系统

spring整合RMI - Java远程方法调用

一. 开篇语 在上一篇RMI - Java远程方法调用博文中使用的是JDK原生类进行远程方法调用, 本篇文章使用spring提供的API对RMI进行整合, 希望能给您带来帮助. 二. 核心API 1. 客户端: 客户端的核心是RmiProxyFactoryBean, 它包含两个属性serviceUrl(远程调用地址), serviceInterface(远程调用接口) 2. 服务端: RmiServiceExporter把spring管理的Bean输出成一个RMI服务, 通过把Bean包装在一个

Spring框架实现——远程方法调用RMI代码演示

1.spring_RMI02_server服务端02 1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xmlns:context="

Spring定时器调用Hibernate方法无法获得SessionFactory的解决办法

由于在Spring定时器中无法通过注解的方式获取bean,因此需要通过原生的方式获取.获取session的方式如下: WebApplicationContext wac = ContextLoader.getCurrentWebApplicationContext(); SessionFactory factory=wac.getBean(SessionFactory.class); Session session=factory.openSession();

Java学习笔记之RMI远程方法调用

RMI 应用通常有两个分开的程序组成,一个服务端程序和一个客户端程序.一个典型的服务端程序创建一些远程对象,使得对这些远程对象的引用可以被访问,等待客户端调用这些远程对象提供的方法.一个典型的客户端程序获取远程引用,指向一个或者多个服务端上的远程对象,然后调用这些远程对象所提供的方法.通常我们称这为分布式对象应用程序. 3.1 RMI的工作方式 分布式对象应用程序需要做的事情: l 查找(定位)远程对象. 应用程序可以使用各种不同的机制取得远程对象的引用.比如应用程序可以通过 RMI 提供的简单

转载:RMI 远程方法调用

Java 分布式处理技术 1.1 RMI 的基本概念 1.1.1 什么是RMI RMI(Remote Method Invocation) 远程方法调用是一种计算机之间对象互相调用对方函数,启动对方进程的一种机制,使用这种机制,某一台计算机上的对象在调用另外一台计算机上的方法时,使用的程序语法规则和在本地机上对象间的方法调用的语法规则一样. 1.1.2 RMI 的用途 1. 分布式体系结构 我们为什么要使用分布式计算呢? ?         当我们想与多个用户或客户机共享一个中央资源(如一个数据

rmi 与 远程代理复习

ref:http://blog.csdn.net/pipisky2006/article/details/7296592 RMI: 远程方法调用,简单来说以前是调用本地对象的方法,现在如果对象在另外一个jvm上呢?如果要调用的话,就要设计大量复杂的通信细节.怎么办呢?rmi就是java自带的一种调用远程调用的方法的实现机制. 2.远程代理,代理的一个目的就是屏蔽底层的细节,比如聘请代理律师,可以在不了解法律的情况下打官司,利用律师的专业知识,此处的远程代理的目的就是屏蔽远程对象间的通信细节,这样

Java RMI远程方法调用

参考: 利用java-RMI进行大文件传输 RMI远程方法调用的简单方法和实例 RMI是类似RPC的一种远程方法调用协议,比RPC类型的WebService更简单,也可以跨进程访问 先来创建一个model或者javaBean,注意,该类必须实现序列化Serializable  public class Person implements Serializable {     private int id;     private String name;     private int age;

RMI远程方法调用

RMI远程方法调用:适用于 客户端 调用 服务器 内的方法:(Kotlin 语言编写) 如果业务为二个服务器之间的通信,还是得用消息队列的形式,因为RMI 不适合 双向 调用 下面介绍RMI 的使用方法: 1,服务器端代码: 定义接口(此接口放入服务端和客户端公用的模块 或者打成jar给服务器/客户端使用) 1 interface RmiService { 2 3 /** 4 * 订单发货 5 * @param saleItemId BTB订单项 itemId 6 * @param shipme