当前位置:首页 > Spring

Spring RMI 支持

canca16年前 (2010-05-03)Spring564

RMI是从JDK 1.1开始就出现的API功能,它让客户端在使用远程对象所提供的服务时,就如何使用本地对象一样,然而RMI在使用时必须一连串繁复的手续,像是服务介 面在定义时必须继承java.rmi.Remote接口、服务Server在实作时必须继承java.rmi.UnicastRemoteObject类 别、必须使用rmic产生stub与skeleton等等。

透过org.springframework.remoting.rmi.RmiServiceExporter,Spring 简化了这些手续,来实际看看例子,了解Spring在RMI上的使用与简化,首先定义服务对象的接口:

 ISomeService.java
package onlyfun.caterpillar;

public interface ISomeService {
    public String doSomeService(String some);
    public void doOtherService(int other);
}

可以看到服务对象的接口不用继承java.rmi.Remote界面,而在实作时也不用继承java.rmi.UnicastRemoteObject,例如:

SomeServiceImpl.java
package onlyfun.caterpillar;

public class SomeServiceImpl implements ISomeService {
    public String doSomeService(String some) {
        return some + " is processed";
    }
   
    public void doOtherService(int other) {
        // bla.. bla
    }
}
接下来在伺服端,您只要在Bean定义档中定义,让Spring管理、生成Bean,即可注册、启动RMI服务,例如:rmi-server.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN"
  "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>
    <bean id="someService" class="onlyfun.caterpillar.SomeServiceImpl"/>

    <bean id="serviceExporter"
class="org.springframework.remoting.rmi.RmiServiceExporter">
        <property name="service">
            <ref bean="someService"/>
        </property>
        <property name="serviceName">
            <value>SomeService</value>
        </property>
        <property name="serviceInterface">
            <value>onlyfun.caterpillar.ISomeService</value>
        </property>       
    </bean>
   
</beans>
很简单,只要告诉org.springframework.remoting.rmi.RmiServiceExporter服务对象、名称与要代理的接口,之后Spring读取完定义文件并生成Bean实例后,RMI服务就会启动。

接下来看看客户端要如何实作,只要透过org.springframework.remoting.rmi.RmiProxyFactoryBean,并告知服务的URL、代理的接口即可,就好像在使用本地端管理的服务一样,例如Bean定义档可以如下撰写:

rmi-client.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN"   "http://www.springframework.org/dtd/spring-beans.dtd"> <beans>     <bean id="someServiceProxy"           class="org.springframework.remoting.rmi.RmiProxyFactoryBean">        <property name="serviceUrl">            <value>rmi://localhost/SomeService</value>        </property>        <property name="serviceInterface">            <value>onlyfun.caterpillar.ISomeService</value>        </property>    </bean></beans>
以下是个简单的客户端呼叫远程服务的例子:

....
        ApplicationContext context =
                new FileSystemXmlApplicationContext("rmi-client.xml");

        ISomeService service = (ISomeService) context.getBean("someServiceProxy");

        String result = service.doSomeService("Some request");
        System.out.println(result);
....

扫描二维码推送至手机访问。

版权声明:本文由Ant.Master's Blog发布,如需转载请注明出处。

本文链接:https://iant.work/post/288.html

标签: Spring
分享给朋友:

“Spring RMI 支持” 的相关文章

Spring IOC配置文件5分钟搞掂

以下并非普通的Spring配置文件。下面这个文件就是Spring IOC的全部应用例子。 <?xml version="1.0" encoding="utf-8"?><!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "htt…

servlet中取到Spring配置

转自:http://blog.csdn.net/sd_lichangyou/archive/2006/10/25/1350519.aspx --------------------------------------------------------------------------------…

IOC容器,其实很简单

  前几天看easyjweb代码,看到容器那块,顺便自己也写了个简单的IOC容器练练手。今天正好有时间就写出来大家看看,我也好冒充一下高手。 这是个很简单的IOC容器,基本功能有:自动加载所有使用了@Inject注解的类,然后注入…

Spring下Proxool配置错误简述

最近做的一个项目中运用到了连接池技术,可能我们大家比较熟悉的开源连接池有dbcp,c3p0,proxool。对这三种连接池来说,从性能和出错率来说,proxool稍微比前两种好些。今天我主要简单的讲述一下,我在项目中成功的配置和源码...…

spring3.0 MVC

3.0版是完全兼容2.5,因此了解2.5版的@MVC则更容易接受。正如Arjen Poutsma小伙子在他的博客里说的那样,3.0时代将集中致力于表述性状态转移(REST,希望我没有翻译错,金山词霸翻译为“休息”)的网络服务和更容易的网络编程。的确…

Spring3 MVC Restful 多请求类型(json,xml,k-v),多视图配置(Json,Xml,JSP,Freemarker,Volacity等)

<beans xmlns="http://www.springframework.org/schema/beans"    xmlns:aop="http://www.springframework.org/schema/aop"   …

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。