`

spring对java远程调用的简化(一)之RMI

阅读更多
Java开发者可以利用的远程技术有以下几种:
1.远程方法调用(RMI)
2.Caucho的Hessian和Burlap
3.Spring自己的HTTP invoker
4.EJB
5.Web Services
一.RMI
它由5个包及3个应用工具组成
java.rmi 组织客户端的RMI类、接口和异常
java.rmi.server 组织服务器端的RMI类 接口和异常
java.rmi.registry 组织用于管理RMI命名服务的类
java.rmi.dgc 组织用于管理分布式垃圾收集的类
java.rmi.activation 组织用于实现按需激活的RMI服务的类
rmic 编译器,它产生RMI使用的存根和框架以完成分布式通信
rmiregistry 一个为RMI提供命名服务的服务器,这项服务把名字和对象关联在一起
rmid 一个支持RMI激活框架的服务器

     如果具体还不知道什么是RMI,可以参考这篇非常不错的文章《JavaRMI入门实战》
注意:
    1)要把PerfectTime 和PerfectTimeI类中的
   System.setSecurityManager(new RMISecurityManager()); 注释掉(因为这需要配安全策略,比较麻烦)
   2)还有在JDK5下,用rmic -d命令的话只会输出一个文件,因为JDK5对RMI进行了优化
接下来看看用spring对《JavaRMI入门实战》例子的简化
1.客户端的配置及代码
PerfectTimeI接口(不用继承java.rmi.Remote接口了,普通的POJO)
package com.open.rmi.ex2;
public interface PerfectTimeI  {
    long getPerfectTime();
}DisplayPerfectTime类(也是一个普通的类)
package com.open.rmi.ex2;
public class DisplayPerfectTime {
    private PerfectTimeI pf;
    public void display() {
        for (int i = 0; i < 10; i++) {
            System.out.println("PerfectTime:" + pf.getPerfectTime());
        }
    }
    //省略了pf的get,set方法
}客户端配置bean_client.xml
<beans>
    <!--客户端-->
    <bean id="pf" class="org.springframework.remoting.rmi.RmiProxyFactoryBean">
        <property name="serviceUrl" value="rmi://192.168.1.8:1099/perfect_time"/>
        <property name="serviceInterface" value="com.open.rmi.ex2.PerfectTimeI"/>
    </bean>
    <bean id="test" class="com.open.rmi.ex2.DisplayPerfectTime">
        <property name="pf" ref="pf"/>
    </bean>
</beans>2.服务端的配置及代码
PerfectTime类(爽吧,简简单单的POJO)
package com.open.rmi.ex2;
public class PerfectTime  implements PerfectTimeI {
    public long getPerfectTime() {
        return System.currentTimeMillis();
    }
}配置bean_server.xml
<beans>
    <!--服务端:Spring读取完定义文件,在生成serviceExporter实例后,RMI服务就会启动-->
    <bean id="serviceExporter"
        class="org.springframework.remoting.rmi.RmiServiceExporter">
        <property name="service" ref="pt"/>
        <property name="serviceName" value="perfect_time"/>
        <property name="serviceInterface" value="com.open.rmi.ex2.PerfectTimeI"/>
    </bean>
    <bean id="pt" class="com.open.rmi.ex2.PerfectTime"/>
</beans>3.测试代码
TestServer.java
package com.open.rmi.ex2;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestServer {
    public static void main(String[] args) {
        BeanFactory bf=new ClassPathXmlApplicationContext("bean_server.xml");
        bf.getBean("serviceExporter");
    }
}
TestClient.java
package com.open.rmi.ex2;

import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class TestClient {
    public static void main(String[] args) {
        BeanFactory bf = new ClassPathXmlApplicationContext("bean_client.xml");
        DisplayPerfectTime test = (DisplayPerfectTime)bf.getBean("test");
        test.display();
    }
}
先运行TestServer,输出
RmiServiceExporter - Could not detect RMI registry - creating new one在运行TestClient就可以看到结果了
PerfectTime:1150125107468
PerfectTime:1150125107484
PerfectTime:1150125107484
看到没,你根本不用运行rmic -d G:\RMI test.PerfectTime,start rmiregistry 。
这就是spring的魅力啊

分享到:
评论

相关推荐

    从Java走向Java+EE+.rar

    第17章 JNDI和Java RMI远程调用 249 17.1 用Java RMI实现远程调用 250 17.2 利用JNDI定位资源 256 17.3 实例——分布式的HelloWorld 260 17.4 小结 264 第18章 Java消息服务 265 18.1 消息系统和JMS 265...

    Spring-Reference_zh_CN(Spring中文参考手册)

    2.6.4. 对Java 5(Tiger)的支持 2.7. 移植到Spring 2.0 2.7.1. 一些变化 2.7.1.1. Jar包 2.7.1.2. XML配置 2.7.1.3. Deprecated的类和方法 2.7.1.4. Apache OJB 2.7.1.5. iBatis 2.8. 更新的样例应用 2.9. 改进的...

    Spring 2.0 开发参考手册

    17.3. 使用Hessian或者Burlap通过HTTP远程调用服务 17.3.1. 为Hessian配置DispatcherServlet 17.3.2. 使用HessianServiceExporter暴露你的bean 17.3.3. 客户端连接服务 17.3.4. 使用Burlap 17.3.5. 对通过...

    Spring攻略(第二版 中文高清版).part1

    2.8 用Java Config简化XML配置 77 2.8.1 问题 77 2.8.2 解决方案 77 2.8.3 工作原理 77 2.9 使Bean感知容器 81 2.9.1 问题 81 2.9.2 解决方案 81 2.9.3 工作原理 82 2.10 加载外部资源 82 2.10.1...

    Spring中文帮助文档

    13.8. Spring对分段文件上传(multipart file upload)的支持 13.8.1. 介绍 13.8.2. 使用MultipartResolver 13.8.3. 在表单中处理分段文件上传 13.9. 使用Spring的表单标签库 13.9.1. 配置 13.9.2. form标签 ...

    Spring API

    13.8. Spring对分段文件上传(multipart file upload)的支持 13.8.1. 介绍 13.8.2. 使用MultipartResolver 13.8.3. 在表单中处理分段文件上传 13.9. 使用Spring的表单标签库 13.9.1. 配置 13.9.2. form标签 ...

    Spring攻略(第二版 中文高清版).part2

    2.8 用Java Config简化XML配置 77 2.8.1 问题 77 2.8.2 解决方案 77 2.8.3 工作原理 77 2.9 使Bean感知容器 81 2.9.1 问题 81 2.9.2 解决方案 81 2.9.3 工作原理 82 2.10 加载外部资源 82 2.10.1...

    spring chm文档

    17.3. 使用Hessian或者Burlap通过HTTP远程调用服务 17.3.1. 为Hessian配置DispatcherServlet 17.3.2. 使用HessianServiceExporter暴露你的bean 17.3.3. 客户端连接服务 17.3.4. 使用Burlap 17.3.5. 对通过...

    将 Flex 集成到 Java EE 应用程序的最佳实践(完整源代码)

    BlazeDS 为 Flex 提供了基于 AMF 二进制协议的远程调用支持,其作用相当于 Java 的 RMI。有了 BlazeDS,通过简单的配置,一个 Java 接口就可以作为服务暴露给 Flex,供其远程调用。 尽管现有的 EmployeeMgmt 应用...

    +Flex+集成到+Java+EE+应用程序的最佳实践(完整源代码)

    BlazeDS 为 Flex 提供了基于 AMF 二进制协议的远程调用支持,其作用相当于 Java 的 RMI。有了 BlazeDS,通过简单的配置,一个 Java 接口就可以作为服务暴露给 Flex,供其远程调用。 尽管现有的 EmployeeMgmt 应用...

Global site tag (gtag.js) - Google Analytics