`
wei5201
  • 浏览: 187606 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

spring rmi相关

阅读更多
看了《J2EE without EJB》的remote章节,忍不住写点代码试试,看看Spring的实现到底多巧妙。

1.先测试RMI服务的发布,测试代码如下:
//remote Service
package test.spring.remote.rmi;
public interface MyService extends java.rmi.Remot {
    public void doSomething() throws java.rmi.RemoteException;
}


//pojo Service
package test.spring.remote.rmi;
public interface MyBusinessInterface {
    public void doSomething();
}


//实现类
package test.spring.remote.rmi;
public class MyServiceImpl implements MyService, MyBusinessInterface {
    public void doSomething() {
        System.out.println("MyServiceImpl.doSomething()");
    }
}

Spring的context配置文件如下:
<beans>
    <bean id="myService" class="test.spring.remote.rmi.MyServiceImpl" />
    <bean id="serviceExporter" class="org.springframework.remoting.rmi.RmiServiceExporter">
        <property name="serviceName">
            <value>myService</value>
        </property>
        <property name="service">
            <ref bean="myService" />
        </property>
        <property name="serviceInterface">
            <value>test.spring.remote.rmi.MyService</value>
        </property>
        <property name="registryPort">
            <value>1199</value>
        </property>
    </bean>
</beans>


运行出错了.原来用以发布rmi的接口应该是pojo形式的MyBusinessInterface,而不是那个继承自Remote的MyService,修改自己的context配置文件:
<beans>
    <bean id="myService" class="test.spring.remote.rmi.MyServiceImpl" />
    <bean id="serviceExporter" class="org.springframework.remoting.rmi.RmiServiceExporter">
        <property name="serviceName">
            <value>myService</value>
        </property>
        <property name="service">
            <ref bean="myService" />
        </property>
        <property name="serviceInterface">
            <!-- <value>test.spring.remote.rmi.MyService</value> -->
            <value>test.spring.remote.rmi.MyBusinessInterface</value>
        </property>
        <property name="registryPort">
            <value>1199</value>
        </property>
    </bean>
</beans>


再运行,可以了。

2.再继续测试客户端调用,先修改context配置如下:
<beans>
<!--服务器端开始-->
    <bean id="myService" class="test.spring.remote.rmi.MyServiceImpl" />
    <bean id="serviceExporter" class="org.springframework.remoting.rmi.RmiServiceExporter">
        <property name="serviceName">
            <value>myService</value>
        </property>
        <property name="service">
            <ref bean="myService" />
        </property>
        <property name="serviceInterface">
            <!-- <value>test.spring.remote.rmi.MyService</value> -->
            <value>test.spring.remote.rmi.MyBusinessInterface</value>
        </property>
        <property name="registryPort">
            <value>1199</value>
        </property>
    </bean>
<!--服务器端结束-->
<!--客户端开始-->
    <bean id="rmiService"
        class="org.springframework.remoting.rmi.RmiProxyFactoryBean">
        <property name="serviceInterface">
            <value>test.spring.remote.rmi.MyBusinessInterface</value>
        </property>
        <property name="serviceUrl">
            <value>rmi://localhost:1199/myService</value>
        </property>
    </bean>
<!--客户端结束-->

</beans>


添加客户端调用:
package test.spring.remote.rmi;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestSpringRmi {
    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("spring-remote.xml");
        MyBusinessInterface service = (MyBusinessInterface) context.getBean("rmiService");
        service.doSomething();
    }
}

运行TestSpringRmi,成功.

经过一番浅尝辄止,初步得出几个结论:
1.Spring对RMI的支持果然很不错,在Cglib等工具的支持下,使用RMI终于可以同Naming、rmic和stub告别了。
2.用以发布RMI的接口不能从java.rmi.Remote继承而来,否则就会出现“Stub class not found”的错误,原因有待深究。
3.Spring的BeanFactory创建bean实例是有序的,向RMI、JNDI、WebService等注册服务性质的应用,同一应用中的客户端要根据其依赖性调整配置顺序。

--------------------------------------------------------------------------------------------------
最新调整:

1.按上述过程之后,rmi链接在交互方任意一方重启后,可能出新首次链接不上的情况.
为了避免上述情况的发生,请参照下图进行设置.
2.注意事项,对方的java接口应该传非remote的接口,包结构可以随意. 但是对方的接口中调用到的实体类包结构必须一致,同时必须实现序列化.





  • 大小: 87.9 KB
分享到:
评论

相关推荐

    Spring RMI小例子

    Spring RMI(Remote Method Invocation)是Java平台上的远程方法调用技术,结合Spring框架,能够帮助开发者轻松地创建分布式应用程序。在这个"Spring RMI小例子"中,我们将深入理解Spring如何简化RMI的使用,以及...

    Spring RMI

    - **自动异常处理**:Spring RMI会自动处理RMI相关的异常,如网络故障、远程对象不存在等。 - **事务支持**:Spring可以为RMI调用提供事务管理,确保操作的原子性和一致性。 ### 4. Spring AOP与RMI结合 Spring的...

    SpringRMI小例子

    在这个"SpringRMI小例子"中,我们将深入探讨如何利用Spring框架来增强RMI的功能,使其更加灵活和易于管理。 首先,我们需要理解Spring框架在RMI中的角色。Spring提供了对RMI的高级抽象,通过其`org.springframework...

    spring rmi 改造

    1. **配置线程池**:在Spring的配置文件(如`applicationContext.xml`)中,定义一个`ThreadPoolTaskExecutor` bean,设置其核心线程数、最大线程数、线程存活时间、队列大小等相关属性。例如: ```xml ...

    spring rmi应用

    Spring RMI整合了RMI机制,提供了一种更加灵活和易于管理的方式,让开发者可以在Spring容器中定义远程服务,并通过Spring的IoC(Inversion of Control)和AOP(Aspect Oriented Programming)特性来增强这些服务。...

    spring rmi 小例子

    6. **源码分析**:在提供的压缩包文件`SpringRMI`中,可能包含了上述所有步骤的代码示例。通过阅读这些源码,你可以深入理解Spring RMI的工作原理,包括服务暴露、注册、代理创建等。 7. **工具使用**:在开发过程...

    spring rmi使用心得

    为了避免业务逻辑重新开发,顾使用spring rmi,把所有的bean作为rmi服务暴漏出来,在客户端只需要把项目依赖过来就ok,或者把以前的接口导入过来。 参考文档:...

    spring RMI简单例子

    Spring RMI(Remote Method Invocation)是Java平台上的远程方法调用技术,结合Spring框架的特性,使得在分布式系统中调用远程服务变得更加便捷。在这个简单的例子中,我们将深入理解Spring RMI的工作原理以及如何...

    spring RMI 服务(自动把service发布为RMI服务)

    Spring RMI服务是一种在Java平台上实现远程方法调用(Remote Method Invocation, RMI)的技术,它允许分布式系统中的不同组件通过网络进行通信。在Spring框架的支持下,我们可以更方便地将服务发布为RMI服务,使得...

    Spring Rmi使用文档

    ### Spring RMI 使用详解 #### 一、Spring RMI 概述 Spring RMI 是 Spring 框架中用于支持远程方法调用(Remote Method Invocation)的功能模块。通过 Spring RMI, 开发者能够更加简便地搭建和管理远程服务。传统上...

    spring rmi 源码

    Spring RMI(Remote Method Invocation)是Spring框架对Java RMI技术的一种封装,使得在Spring环境中使用RMI变得更加简便。RMI是一种Java平台上的远程对象调用机制,它允许一个Java对象在不同的Java虚拟机之间调用另...

    spring RMI 实用分享

    Spring RMI(Remote Method Invocation)是Java平台上的远程方法调用技术,允许程序在不同的Java虚拟机(JVM)之间进行通信,实现分布式系统。在本文中,我们将深入探讨Spring框架如何集成RMI,以及如何创建和使用...

    spring rmi 集成

    在`rmi-lib`文件夹中,可能包含了RMI相关的JAR文件,如`rmic`, `rmiregistry`, `jrmp`等。这些库是RMI功能的基础,确保在项目中引入这些依赖,才能正确地编译、运行RMI应用。 ### 四、项目结构 - `zrmiclient`:这...

    Spring-RMI.rar_spring rmi

    1.2 Spring的RMI支持:Spring通过`org.springframework.remoting.rmi.RmiServiceExporter`和`RmiProxyFactoryBean`简化了RMI的使用。`RmiServiceExporter`用于发布服务,而`RmiProxyFactoryBean`则用于创建RMI服务的...

    spring和RMI分布式整合源码

    具体到这个压缩包“springRMI”,我们可以推测它可能包含了以下几个部分: 1. **配置文件**:如`applicationContext.xml`,其中定义了Spring容器中的Bean,可能包括RMI服务的接口和实现。 2. **远程接口**:`.java`...

    java项目使用spring rmi所涉及到的包

    在使用RMI时,我们需要配置应用上下文来加载和管理RMI相关的Bean。 - `org.springframework.jndi`: 用于JNDI(Java Naming and Directory Interface)操作,RMI服务通常会在JNDI注册表中注册。这个包中的工具类可以...

    spring rmi 简单应用

    Spring RMI(Remote Method Invocation)简单应用主要涉及的是在Java中使用Spring框架来实现远程方法调用的技术。RMI是Java提供的一种分布式计算能力,它允许一个Java对象调用网络另一端的Java对象的方法,实现了...

    springRMI接口实现

    Spring Remote Method Invocation (RMI) 是Spring框架提供的一种远程服务调用机制,它允许你在分布式环境中调用对象的方法,就像是在本地执行一样。这个技术基于Java的RMI系统,但通过Spring的抽象层,简化了配置和...

    spring RMI 远程接口调用

    Spring RMI(Remote Method Invocation)远程接口调用是Spring框架提供的一个特性,它允许你在分布式环境中调用对象的方法,使得应用程序能够跨越网络边界操作远程对象。这个技术在大型企业级应用中尤其有用,因为它...

Global site tag (gtag.js) - Google Analytics