spring rmi学习示例
来源:互联网 发布:微商城云在指尖数据 编辑:程序博客网 时间:2024/06/05 17:32
spring rmi实际上是扩展了下java rmi的实现,可以使用bean的xml配置方式使用rmi。
RMI (Remote Method Invocation)是从JDK 1.1开始就出现的API功能,它让客户端在使用远端服务所提供的服务时,就如何使用本地服务一样,然而RMI在使用时必须一连串繁复的手续,像是服务介面在定义时必须继承java.rmi.Remote介面、服务Server在实作时必须继承java.rmi.UnicastRemoteObject类别、必须使用rmic指令产生stub与skeleton等,设定上手续繁杂。 您可以在Spring中透过org.springframework.remoting.rmi.RmiServiceExporter来简化使用RMI的手续,来实际看看例子,了解Spring在RMI上的使用与简化,首先来看一下RMI伺服端的撰写,首先定义一个服务接口:
package org.spring;public interface RmiService { public String doWork(); public int add(int a, int b);}
服务物件的接口不用继承java.rmi.Remote介面,而在实现RmiService时也不用继承java.rmi.UnicastRemoteObject类别,
package org.spring;public class RmiServiceImpl implements RmiService{ @Override public String doWork() { return "this message return from server"; } @Override public int add(int a, int b) { return a+b; }}
这只是个简单的示例
接下来您只要在Bean定义档中定义,让Spring管理、生成Bean实例,如此即可注册、启动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:aop="http://www.springframework.org/schema/aop"xmlns:tx="http://www.springframework.org/schema/tx" 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/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd"default-autowire="byName"> <bean id="rmiService" class="org.spring.RmiServiceImpl"/> <bean id="serviceExporter" class="org.springframework.remoting.rmi.RmiServiceExporter"> <property name="service"> <ref bean="rmiService"/> </property> <property name="serviceName"> <value>rmiService</value> </property> <property name="serviceInterface"> <value>org.spring.RmiService</value> </property> </bean></beans>
只要告诉org.springframework.remoting.rmi.RmiServiceExporter服务物件、名称与要代理的介面,之后Spring读取完定义档并生成Bean实例后,RMI服务就会启动,来撰写一个简单的RMIServer类别,以启动RMI服务:
package org.spring;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import org.springframework.context.support.ClassPathXmlApplicationContext;public class RMIServer { public static void main(String[] args) throws IOException { new ClassPathXmlApplicationContext("config/rmi-server.xml"); BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); while (true) { if (reader.readLine().equals("exit")) { System.exit(0); } } }}
接下来,在客户端,只要依赖接口对应的jar包就可以了,然后再spring的配置文件中配置好需要访问的服务的地址和对应的接口名称
<?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:aop="http://www.springframework.org/schema/aop"xmlns:tx="http://www.springframework.org/schema/tx" 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/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd"default-autowire="byName"> <bean id="rmiServiceProxy" class="org.springframework.remoting.rmi.RmiProxyFactoryBean"> <property name="serviceUrl"> <value>rmi://localhost/rmiService</value> </property> <property name="serviceInterface"> <value>org.spring.RmiService</value> </property> </bean> </beans>
注意到"serviceUrl"属性的设定,它是以"rmi://"开头,接着指定伺服器位址与服务名称,来撰写个简单的客户端程式以使用RMI伺服器上的服务
package org.spring;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class RMIClient { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext( "config/rmi-client.xml"); RmiService service = (RmiService) context.getBean("rmiServiceProxy"); String result1 = service.doWork(); System.out.println(result1); int result2 = service.add(1, 2); System.out.println(result2); }}
然后我们执行RMIServer.java类,在spring web应用中只要配置文件加载到spring的加载路径即可应用。
然后再执行RMIClient.java类,执行结果如下:
这样使用spring就能很方便的简化java 的rmi调用,并且由spring管理,在分布式的应用中就能做到客户端只依赖接口,不依赖实现。
- spring rmi学习示例
- Spring RMI 学习
- Spring学习 RMI
- Spring RMI学习
- Spring RMI使用学习
- RMI学习笔记(2)-Spring集成RMI
- RMI远程方法调用示例【基于Spring配置文件】
- spring rmi http invoker学习笔记
- spring RMI
- Spring rmi
- rmi spring
- Spring RMI
- spring rmi
- Spring RMI
- Spring - RMI
- spring rmi
- Spring aop学习示例
- spring boot示例学习
- 中国联通cdma 1x和中国移动gprs数据业务比较
- Eclipse 关联jdk源文件
- 十进制数转换成x进制----栈实现
- java读取文本文件到mysql数据库【示例3】-批量导入文本文件
- Canonical:ARM版本Ubuntu的开发计划(已经规划到了2015)
- spring rmi学习示例
- Darwin Streaming Server 核心代码分析
- 【Android】获取手机中已安装apk文件信息(PackageInfo、ResolveInfo)(应用图片、应用名、包名等)
- 那年,那场青春繁华梦
- 最大权闭合图
- Eclipse中如何恢复已删除文件和内容
- 成为网站分析师必备的9大利器
- android binder analysis
- T-SQL和 PL/SQL之对比学习