Spring整合Rmi总结

本文介绍如何使用Spring框架整合RMI技术实现远程方法调用。包括服务端与客户端的搭建步骤,通过具体代码示例展示如何配置Spring管理的Bean成为RMI服务。

在Spring整合Rmi中:

服务端使用了org.springframework.remoting.rmi.RmiServiceExporter

RmiServiceExporter把任何Spring管理的Bean输出成一个RMI服务。通过把Bean包装在一个适配器类中工作。适配器类被绑定到RMI注册表中,并且将请求代理给服务类。

客户端使用了org.springframework.remoting.rmi.RmiProxyFactoryBean

客户端的核心是RmiProxyFactoryBean,包含serviceURL属性和serviceInterface属性。

通过JRMP访问服务。JRMP JRMP:java remote method protocol,Java特有的,基于流的协议。

 

下面给出简单例子

服务端程序:

新建接口:

 

/**
 * IRmiServer.java
 * 版权所有(C) 2012 
 * 创建:cuiran 2012-08-08 11:12:40
 */
package com.cayden.rmi;

/**
 * TODO
 * @author cuiran
 * @version TODO
 */
public interface IRmiServer {
	
	public boolean test();

}


再实现该接口的方法:

/**
 * RmiServerImpl.java
 * 版权所有(C) 2012 
 * 创建:cuiran 2012-08-08 11:13:24
 */
package com.cayden.rmi.impl;

import com.cayden.rmi.IRmiServer;

/**
 * TODO
 * @author cuiran
 * @version TODO
 */
public class RmiServerImpl implements IRmiServer {

	/* (non-Javadoc)
	 * @see com.cayden.rmi.IRmiServer#test()
	 */
	@Override
	public boolean test() {
	
		System.out.println("调用了我--服务端 O(∩_∩)O哈!");
		
		return true;
	}

}


在src下新建applicationContext.xml 配置文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.5//EN" "file:/usr/local/tomcat_report/lib/spring-beans-2.0.dtd">
<beans>
	
		<!-- rmi -->
	<bean id="rmiService" class="com.cayden.rmi.impl.RmiServerImpl">
	</bean>

	<bean id="remoteRmiService" class="org.springframework.remoting.rmi.RmiServiceExporter">
		<property name="serviceName">
			<value>remoteService</value>
		</property>
		<property name="service" ref="rmiService" />
		<property name="serviceInterface">
			<value>com.cayden.rmi.IRmiServer</value>
		</property>
		<property name="registryPort">
			<value>9400</value>
		</property>
		<property name="servicePort">
			<value>9401</value>
		</property>
	</bean>
</beans>


启动服务端的类【MainServer.java】

package com.cayden.rmi;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
 * MainServer.java
 * 版权所有(C) 2012 
 * 创建:cuiran 2012-08-08 11:44:07
 */

/**
 * TODO
 * @author cuiran
 * @version TODO
 */
public class MainServer {

	/**
	 * TODO
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.println("rmi服务端启动");
        ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
        
        System.out.println("rmi服务端启动完成。。。");
	}

}

 

客户端代码:

在客户端使用服务端的接口文件:

/**
 * IRmiServer.java
 * 版权所有(C) 2012 
 * 创建:cuiran 2012-08-08 11:12:40
 */
package com.cayden.rmi;

/**
 * TODO
 * @author cuiran
 * @version TODO
 */
public interface IRmiServer {
	
	public boolean test();

}


然后在src下新建【applicationContext.xml】

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.5//EN" "file:/usr/local/tomcat_report/lib/spring-beans-2.0.dtd">
<beans>
	<!-- rmi远程调用 -->
	<bean id="testRmiService" class="org.springframework.remoting.rmi.RmiProxyFactoryBean">
		<property name="serviceUrl">
			<value>rmi://127.0.0.1:9400/remoteService</value>
		</property>
		<property name="serviceInterface">
			<value>com.cayden.rmi.IRmiServer</value>
		</property>
	</bean>
</beans>


最新新建客户端的测试类【TestRmi.java】

/**
 * TestRmi.java
 * 版权所有(C) 2012 
 * 创建:cuiran 2012-08-08 11:38:06
 */
package com.cayden.rmi.client;

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

import com.cayden.rmi.IRmiServer;

/**
 * TODO
 * @author cuiran
 * @version TODO
 */
public class TestRmi {
	public static void main(String[] arg) {
		System.out.println("rmi客户端开始调用");
        ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
        IRmiServer rmi=(IRmiServer)ctx.getBean("testRmiService");
        rmi.test();
        System.out.println("rmi客户端调用结束");
	}

}


 

最后控制台输出

服务端:

rmi服务端启动
log4j:WARN No appenders could be found for logger (org.springframework.context.support.ClassPathXmlApplicationContext).
log4j:WARN Please initialize the log4j system properly.
rmi服务端启动完成。。。
调用了我--服务端 O(∩_∩)O哈!


客户端:

rmi客户端开始调用
2012-8-8 11:46:51 org.springframework.context.support.AbstractApplicationContext prepareRefresh
信息: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@1c29ab2: display name [org.springframework.context.support.ClassPathXmlApplicationContext@1c29ab2]; startup date [Wed Aug 08 11:46:51 CST 2012]; root of context hierarchy
2012-8-8 11:46:51 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
信息: Loading XML bean definitions from class path resource [applicationContext.xml]
2012-8-8 11:46:51 org.springframework.context.support.AbstractApplicationContext obtainFreshBeanFactory
信息: Bean factory for application context [org.springframework.context.support.ClassPathXmlApplicationContext@1c29ab2]: org.springframework.beans.factory.support.DefaultListableBeanFactory@1e0bc08
2012-8-8 11:46:51 org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons
信息: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@1e0bc08: defining beans [testRmiService]; root of factory hierarchy
rmi客户端调用结束



 

附下载地址:http://pan.baidu.com/s/1nt9c27J

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cuiran

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值