spring3.0.5的rmi集成使用
一 前言
工作环境中,大部分功能,都是基于服务(SOA模式)的,因此用到了rmi.使用他的目的就是让分布式的开发变的简单,同时提高了项目的扩展性,可维护性,可读性.
rmi有很多种,例如:
1)远程方法调用(RMI)
2)Spring自己的HTTP invoker
3)EJB
4)Web Services
......
本文选择了spring的rmi接口进行分布式开发应用.具体用哪种rmi,我们还需要深入的挖掘.本文不作讨论.
至于具体哪里简单呢?需要朋友们深入了解java的远程方法调用(RMI).服务端的接口要继承java.rmi.Remote接口.启动类需要继承java.rmi.server.UnicastRemoteObject类.而且诸如服务器地址等配置信息,也不应该放在代码中,因此spring的rmi模式就应运而生了.
二 环境(javaSE项目)
jdk1.6.0.23
eclipse3.6.1_javaee
三 包
1)日志管理
commons-logging-1.1.1.jar
log4j-1.2.16.jar
2)spring核心包
org.springframework.asm-3.0.5.RELEASE.jar
org.springframework.beans-3.0.5.RELEASE.jar
org.springframework.context-3.0.5.RELEASE.jar
org.springframework.core-3.0.5.RELEASE.jar
org.springframework.expression-3.0.5.RELEASE.jar
3)aop支持
aopalliance.jar
org.springframework.aop-3.0.5.RELEASE.jar
四 spring基础配置
1)log4j的配置(src/log4j.properties),推荐配置;
2)commons-logging的配置(src/commons-logging.properties):这里是选配的,不配也不会报错,只是为了方便以后日志系统的切换;
3)spring的配置(src/applicationContext.xml),主要是头文件,spring3对头文件的要求很严格;
五 服务端配置与开发
1)开发服务的接口
2)开发服务的实现类
3)配置spring,配置实现类
4)配置spring,注册rmi服务,其中需要说明
a.远程调用服务名
b.提供服务的实现类
c.提供服务的接口
d.提供服务的端口
六 客户端配置与开发
1)将服务端的接口进行打包(注:不需要实现类,只是客户端访问服务端的一个存根)
2)配置spring
a.指定访问服务的地址
b.指定服务的接口
七 总结
1)接口与类就是java最简单的结构.与RMI无关;
2)客户端必须要有实现类的接口(存根),这样才能访问后实现类的转型,引用与方法调用;
3)本文将服务端和客户端写到了一个工程里,朋友们可以自己将起分离开来使用,但需要注意修改IP地址和开放防火墙相应端口;
4)服务端和客户端都需要使用spring才可以进行rmi的相关开发;
5)笔者会陆续补充其他几种rmi的集成使用方式;
作者简介
昵称:澳洲鸟
姓名:朴海林
QQ:85977328
MSN:6301655@163.com
转载请注明出处 1 楼 george 2011-02-16 RMI和Spring有关系么?Spring能为RMI开发带来哪些方便?
能够方便地生成存根,还是只填写一个RMI地址和端口,Spring自动给你生成存根和参考客户端实现类? 2 楼 85977328 2011-02-16 george 写道RMI和Spring有关系么?Spring能为RMI开发带来哪些方便?
能够方便地生成存根,还是只填写一个RMI地址和端口,Spring自动给你生成存根和参考客户端实现类?
spring对rmi进行了相应的包装,客户端的存根就是服务端的接口,开发很简单,只需要配置就可以.详细请看代码
3 楼 george 2011-02-16 现在程序员仿佛都对Spring有“一往情深”的情节,做什么应用,首先想到用Spring来捆绑,像JMS,定时任务、Web Service...等等,这些东西和Spring本质上没有什么关系,为什么一定要用Spring来作为胶水来粘结呢? 4 楼 george 2011-02-16 85977328 写道george 写道RMI和Spring有关系么?Spring能为RMI开发带来哪些方便?
能够方便地生成存根,还是只填写一个RMI地址和端口,Spring自动给你生成存根和参考客户端实现类?
spring对rmi进行了相应的包装,客户端的存根就是服务端的接口,开发很简单,只需要配置就可以.详细请看代码
客户端的存根就是服务端的接口
RMI本来就是这样的啊,这个不是Spring的功劳,如果存根不是服务端的接口,那客户端如何调用存根? 5 楼 85977328 2011-02-16 java原生的RMI,要实现Remote接口
spring这个什么都不需要,配置就可以 6 楼 george 2011-02-16 如果Spring能够提供一个GUI界面,来配置生成一些客户端存根和策略文件,并生成客户端demo代码段,也许还有用,如生成下面的策略文件,就降低了手动写的错误概率:
grant
{
permission java.net.SocketPermission "129.69.25.15:1024-65225","connect";
permission java.net.SocketPermission "129.69.25.16:1009","connect";
};
如果还是传统的方式,一步一步地自己来生成存根、调用生成的类....
这和Spring有什么关系,不就是平常开发RMI应有的步骤么? 7 楼 85977328 2011-02-16 启动类还要实现UnicastRemoteObject接口,结构很麻烦的
用spring,只需要配置 8 楼 85977328 2011-02-16 存根就是接口,我们的项目是基于maven管理的,所以不需要做接口相关的事情,引用近来即可。 9 楼 85977328 2011-02-16 spring官方,提供了spring tools的集成eclipse,但我是没怎么用过了。
刚我也把文章的前言更新了一下。希望大家能更好的理解spring的rmi 10 楼 85977328 2011-02-16 你说的生成存根,我理解应该是web service的开发思路吧。rmi好象不用的。只是把接口引用近来即可。 11 楼 85977328 2011-02-16 客户端调用代码非常简单,可以看我的demo 12 楼 george 2011-02-16 85977328 写道你说的生成存根,我理解应该是web service的开发思路吧。rmi好象不用的。只是把接口引用近来即可。
RMI肯定需要生成存根的,
使用rmic 命令生成存根,使用rmiregistry命令进行注册。
如果你没有用到,可能是Spring自动给你完成了,也许这就是Spring 的用处吧。
13 楼 85977328 2011-02-16 我原生的java远程方法调用,也没用到rmic,只是把服务端的接口打包到客户端并引用就可以 14 楼 george 2011-02-16 85977328 写道我原生的java远程方法调用,也没用到rmic,只是把服务端的接口打包到客户端并引用就可以
那你客户端的 “接口名Imp_Sub.class”类是如何得到的?是不是你的服务端和客户端都运行在同一个程序里面了? 15 楼 85977328 2011-02-16 不是,maven里直接获取 16 楼 jay_kid 2011-02-17 关于spring remoting,<spring recipes>这本书里面讲得很详细, spring可以通过rmi,也可以通过http web service来提供远程服务。rmi有时不能通过firewall,通过http就没有这样的问题。 17 楼 jay_kid 2011-02-17 楼主总结得不错,仰慕一下 18 楼 85977328 2011-02-17 jay_kid 写道关于spring remoting,<spring recipes>这本书里面讲得很详细, spring可以通过rmi,也可以通过http web service来提供远程服务。rmi有时不能通过firewall,通过http就没有这样的问题。
我会找时间进一步总结,把文章完善,感谢分享你的知识
19 楼 kingkan 2011-02-17 85977328 写道jay_kid 写道关于spring remoting,<spring recipes>这本书里面讲得很详细, spring可以通过rmi,也可以通过http web service来提供远程服务。rmi有时不能通过firewall,通过http就没有这样的问题。
我会找时间进一步总结,把文章完善,感谢分享你的知识
同感,楼主,试一下Httpinvoker或者Hessian,嘿嘿,期待你能把这两个也分享出来。
20 楼 proTecJavaChen 2011-02-18 george 写道现在程序员仿佛都对Spring有“一往情深”的情节,做什么应用,首先想到用Spring来捆绑,像JMS,定时任务、Web Service...等等,这些东西和Spring本质上没有什么关系,为什么一定要用Spring来作为胶水来粘结呢?
因为我感觉spring确实是一个很好的框架啊,易学易用,里面很多思想都是值得学习的!呵呵