Spring中集成RMI的方法

Spring提供了非常方便的RMI(远程方法调用)调用方式,本文介绍下如何在Spring中集成RMI。

首先看下实例程序目录结构:

目录结构

图1:目录结构

(一)Spring中发布RMI服务

(1)定义接口MessageProvider及接口中供调用的方法(MessageProvider.java)

package org.thera.rmi.service;

public interface MessageProvider {
    public String queryForMessage(String name);
}

(2)实现MessageProvider接口(MessageProviderImpl.java)

package org.thera.rmi.service;

public class MessageProviderImpl implements MessageProvider {

    @Override
    public String queryForMessage(String name) {
        return "Hello, " + name;
    }

}

做好了上述准备,下面就可以通过Spring中集成RMI,方便的发布RMI服务端。

(3)Spring中配置文件做如下配置(context.xml)

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:p="http://www.springframework.org/schema/p" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd">

    <!-- 注入要发布的RMI服务类 -->
    <bean id="messageService" class="org.thera.rmi.service.MessageProviderImpl"></bean>

    <bean class="org.springframework.remoting.rmi.RmiServiceExporter">
        <!-- RMI服务名称,可自定义服务名称 -->
        <property name="serviceName" value="MessageService" />
        <!-- 导出实体 -->
        <property name="service" ref="messageService" />
        <!-- 导出接口 -->
        <property name="serviceInterface" value="org.thera.rmi.service.MessageProvider" />
        <!-- spring默认使用1099端口 -->
        <property name="registryPort" value="1199" />
    </bean>

</beans>

(4)加载Spring容器,发布RMI服务(Main.java)

package org.thera.rmi.service.main;

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

public class Main {
    public static void main(String[] args) {
        ApplicationContext ctx = new FileSystemXmlApplicationContext("conf/context.xml");
        System.out.println("已成功发布RMI服务类");
    }
}

到这里,RMI的服务端已经发布成功,运行结果如下图:

服务端运行结果

图2:服务端运行结果

(二)Spring中客户端调用RMI服务

(1)移植服务端服务接口文件MessageProvider.java

(2)Spring配置文件做如下配置:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:p="http://www.springframework.org/schema/p" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="messageService" class="org.springframework.remoting.rmi.RmiProxyFactoryBean">
        <property name="serviceUrl" value="rmi://192.168.1.100:1199/MessageService" />
        <property name="serviceInterface" value="org.thera.rmi.service.MessageProvider" />
    </bean>

</beans>

(3)加载Spring容器,调用RMI服务端(Main.java)

package org.thera.rmi.service.main;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
import org.thera.rmi.service.MessageProvider;

public class Main {
    public static void main(String[] args) {
        ApplicationContext ctx = new FileSystemXmlApplicationContext("conf/context.xml");
        System.out.println("加载Spring容器,并初始化RMI客户端");
        MessageProvider client = (MessageProvider)ctx.getBean("messageService");
        String temp = client.queryForMessage("LvSantorini");
        
        System.out.println("返回结果: " + temp);
    }
}

运行Main.java,结果如下图:

客户端运行结果

图3:客户端运行结果

参考资料:

本文标题:Spring中集成RMI的方法

本文链接:http://yedward.net/?id=405

本文版权归作者所有,欢迎转载,转载请以文字链接的形式注明文章出处。

相关文章