[spring-framework]Spring中集成RMI(遠程方法調用)

以前介紹過如何發佈RMI服務和調用RMI服務,其實在Spring中爲咱們提供了更爲方便的調用方式。如今介紹下如何在Spring中集成RMI。java

首先看下實例程序目錄結構:spring

Spring中發佈RMI服務(ZLv_RMIServerWithSpring):ide

(1) 定義接口MessageProvider及接口中供調用的方法(MessageProvider.java):spa

package org.thera.rmi.service;

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

(2) 實現MessageProvider接口(MessageProviderImpl.java):code

package org.thera.rmi.service;

public class MessageProviderImpl implements MessageProvider {

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

}

作好了上述準備,下面咱們就能夠經過Spring中集成RMI,方便的發佈RMI服務端xml

(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):ci

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的服務端已經發布成功,運行結果以下截圖:
rem

Spring中客戶端調用RMI服務(ZLv_RMIClientWithSpring):get

(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,結果以下圖:

--------------------------------------------------------------------------------我 只 是 一 條 分 隔 線-------------------------------------------------------------------------------------------------

到這裏咱們就已經介紹完Spring中集成RMI的發佈和調用方式了,怎麼樣?相比原始方法簡單了很多吧,接口文件如此簡單,以前的實現java.rmi.Remote接口,每一個方法還要拋出java.rmi.RemoteException都不須要寫了。

最後,有什麼問題你們能夠及時給我留言,共同進步!

相關文章
相關標籤/搜索