`
xiefeifeihu
  • 浏览: 97309 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

RMI发布多个服务(接口)

阅读更多

在使用Spring RMI时可能会遇到发布多个服务的需求,假设一个服务要操作文件,另一个服务要往屏幕上打印“hello world”。难道要把这两个风马牛不相及的服务写在一个接口里吗!如果真这样那结构也太差了。

网上有人问这个问题:“http://topic.csdn.net/u/20090702/11/9bcf60e5-f3f8-4401-a41d-2f98535988b9.html”,看样子这个问题难住了一些人,因为他们想在一个serviceName里面发布多个serviceInterface。其实转换个思维也就不会被难倒了。倘若在一个serviceName里面发布多个serviceInterface,那么service又该怎么配呢,难道用个list将serviceInterface和service对应起来?显然是行不通的。

解决办法很简单:配置多个RmiServiceExporter的bean,使不同的服务(属性:service)用不同的服务名(属性:serviceName)和接口(属性:serviceInterface)。给个demo就更清晰了:

 1:  <bean id="oper1" class="***.Oper1"></bean>
 2:  <bean id="rmiService_oper1" class="org.springframework.remoting.rmi.RmiServiceExporter">
 3:      <property name="serviceName">
 4:          <value>oper1</value>        
 5:      </property>
 6:      <property name="service">
 7:          <ref local="oper1" />
 8:      </property>
 9:      <property name="serviceInterface">
10:          <value>***.IOper1</value>
11:      </property>
12:      <property name="registryPort">
13:          <value>9990</value>        
14:      </property>
15:  </bean>
16:  
17:  <bean id="oper2" class="***.Oper2"></bean>
18:  <bean id="rmiService" class="org.springframework.remoting.rmi.RmiServiceExporter">
19:      <property name="serviceName">
20:          <value>oper2</value>        
21:      </property>
22:      <property name="service">
23:          <ref local="oper2" />
24:      </property>
25:      <property name="serviceInterface">
26:          <value>***.IOper2</value>
27:      </property>
28:      <property name="registryPort">
29:          <value>9990</value>        
30:      </property>
31:  </bean>

service、serviceName和serviceInterface都不一样,端口可以相同。

客户端的配置也很简单了:

 1:  <bean id="rmiClient_oper1" class="org.springframework.remoting.rmi.RmiProxyFactoryBean">
 2:      <property name="serviceUrl">
 3:          <value>rmi://192.168.0.***:9990/oper1</value>
 4:      </property>
 5:      <property name="serviceInterface">
 6:          <value>***.IOper1</value>
 7:      </property>
 8:  </bean>
 9:  <bean id="rmiClient_oper2" class="org.springframework.remoting.rmi.RmiProxyFactoryBean">
10:      <property name="serviceUrl">
11:          <value>rmi://192.168.0.***:9990/oper2</value>
12:      </property>
13:      <property name="serviceInterface">
14:          <value>***.IOper2</value>
15:      </property>
16:  </bean>

main里运行:

1:  public static void main(String[] args) {
2:      ApplicationContext ctx = new ClassPathXmlApplicationContext(
3:              "applicationContext-client.xml");
4:      IOper1 o1 = (IOper1) ctx.getBean("rmiClient_oper1");
5:      o1.exeuteFile();
6:   
7:      IOper2 o2 = (IOper2) ctx.getBean("rmiClient_oper2");
8:      o2.printHelloWorld();
9:  }

这主要是个思路问题,没什么巧的。

分享到:
评论

相关推荐

    超级有影响力霸气的Java面试题大全文档

    与cgi的区别在于servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于servlet。...

    中间件期末考超强文档合集.rar

    Topic 是发布/订阅模式,消息被发布到 topic 中可以同时被多个消费者订阅和 消费。 ...... 二、名词解释 1.RPC:远程过程调用是从一台机器或一个进程调用另一台机器或另一个进程的服务或方法。 2.RMI:远程方法激活,...

    RemObjects SDK

    而我们要使用UDP或管道时我们就可以轻松的创建新的信道,只要通知服务器和客户端即可,不用修改其他部分.RemObjects SDK的插入式框架可以让我们写一个简单的函数或实现一个接口IROTransportChannel即可建立新的通讯...

    java 面试题 总结

    与cgi的区别在于servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于servlet。...

    JINI 核心技术

    5.2.1 运行多个HTTP服务器 67 5.2.2 警惕代码基问题 67 5.2.3 设置安全管理器 68 5.2.4 注意安全策略 68 5.2.5 注意CLASSPATH 68 5.2.6 考虑把可下载代码捆绑为 一个JAR文件 68 5.2.7 小结 69 5.3 第一个Jini程序:...

    JINI核心技术

    5.2.1 运行多个HTTP服务器 67 5.2.2 警惕代码基问题 67 5.2.3 设置安全管理器 68 5.2.4 注意安全策略 68 5.2.5 注意CLASSPATH 68 5.2.6 考虑把可下载代码捆绑为 一个JAR文件 68 5.2.7 小结 69 5.3 第一个Jini程序:...

    xmljava系统源码-xsnake:xsnake-超轻量级的分布式远程调用框架

    多个环境可以共存在一个集群中,互不干扰 服务监控 可以实时监控服务被调用的情况,以及每个节点的资源利用率,来合理分配硬件资源,提高硬件利用率 远程控制 可以通过控制台远程发布,单节点发布,全集群共享,对每...

    Java相关技术(详细资料)

    这个接口屏蔽了企业网络所使用的各种命名和目录服务。  6、JMAPI(Java Management API)为异构网络上系统、网络和服务管理的开发提供一整套丰富的对象和方法。  7、JMS(Java Message Service)提供企业消息服务,...

    JAVA面试题最全集

    一个“.java”原文件中是否可以包括多个类(不是内部类)? 53.掌握内部类和接口的概念 54.StringTokenizer类的使用 55.数据结构,如何遍历List中的元素? 如果要按照键值保存或者访问数据,使用什么数据结构? ...

    jsr80 java 访问 usb

    具有多个接口的设备可以同时被多个应用程序(或者设备驱动程序)所访问,其中每一个应用程序(或者设备驱动程序)都占据一个不同的接口。该 API 支持控制传输、批量传输和中断传输,不支持等时传输,因为等时传输用于...

    Java思维导图xmind文件+导出图片

    Dubbo服务接口的设计原则(实战经验) Dubbo设计原理及源码分析 基于Dubbo构建大型分布式电商平台实战雏形 Dubbo容错机制及扩展性分析 分布式解决方案 分布式全局ID生成方案 session跨域共享及企业级单点登录...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (2)

    一共四个,其中pdf 三个包,源码一个包 第一章 J2EE快速入门 1.1 J2EE概述 1.1.1 J2EE的来源 1.1.2 J2EE整体框架 1.1.3 从J2EE到JavaEE 1.2 J2EE组件 1.2.1 客户端组件 1.2.2 Web组件 1.2.3 业务逻辑组件 1.3 J2EE...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (1)

    一共四个,其中pdf 三个包,源码一个包 第一章 J2EE快速入门 1.1 J2EE概述 1.1.1 J2EE的来源 1.1.2 J2EE整体框架 1.1.3 从J2EE到JavaEE 1.2 J2EE组件 1.2.1 客户端组件 1.2.2 Web组件 1.2.3 业务逻辑组件 1.3 J2EE...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (3)

    一共四个,其中pdf 三个包,源码一个包 第一章 J2EE快速入门 1.1 J2EE概述 1.1.1 J2EE的来源 1.1.2 J2EE整体框架 1.1.3 从J2EE到JavaEE 1.2 J2EE组件 1.2.1 客户端组件 1.2.2 Web组件 1.2.3 业务逻辑组件 1.3 J2EE...

    Spring 2.0 开发参考手册

    17.2. 使用RMI暴露服务 17.2.1. 使用 RmiServiceExporter 暴露服务 17.2.2. 在客户端链接服务 17.3. 使用Hessian或者Burlap通过HTTP远程调用服务 17.3.1. 为Hessian配置DispatcherServlet 17.3.2. 使用...

    经典JAVA.EE企业应用实战.基于WEBLOGIC_JBOSS的JSF_EJB3_JPA整合开发.pdf

    10.4.2 将实体映射到多个表 394 10.4.3 映射复合类型的属性 396 10.4.4 映射实体类的主键 398 10.5 关联关系映射 402 10.5.1 单向N-1关联 403 10.5.2 单向1-1关联 406 10.5.3 单向1-N关联 409 10.5.4 单向N-N...

    spring chm文档

    17.2. 使用RMI暴露服务 17.2.1. 使用 RmiServiceExporter 暴露服务 17.2.2. 在客户端链接服务 17.3. 使用Hessian或者Burlap通过HTTP远程调用服务 17.3.1. 为Hessian配置DispatcherServlet 17.3.2. 使用...

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

    处理多个持久化单元 12.6.2. JpaTemplate 和 JpaDaoSupport 12.6.3. 基于原生的JPA实现DAO 12.6.4. 异常转化 12.6.5. 事务管理 12.6.6. JpaDialect III. Web 13. Web框架 13.1. 介绍 13.1.1. 与其他web框架的集成 ...

    Spring中文帮助文档

    9.9.1. 对一个特定的 DataSource 使用了错误的事务管理器 9.10. 更多的资源 10. DAO支持 10.1. 简介 10.2. 一致的异常层次 10.3. 一致的DAO支持抽象类 11. 使用JDBC进行数据访问 11.1. 简介 11.1.1. 选择一...

Global site tag (gtag.js) - Google Analytics