您的位置:首页 > 编程语言 > Java开发

Spring整合Rmi总结

2012-08-08 11:54 471 查看
在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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: