rmi需要建立两个项目,一个是服务端的项目,一个是客户端的项目.服务端项目启动后,再启动客户端项目去调用服务端的方法.

我们建立两个maven项目:
pom.xml配置:
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5. <modelVersion>4.0.0</modelVersion>
  6. <groupId>com.xiejl</groupId>
  7. <artifactId>test</artifactId>
  8. <version>1.0-SNAPSHOT</version>
  9. <properties>
  10. <spring-version>4.3.7.RELEASE</spring-version>
  11. </properties>
  12. <dependencies>
  13. <!-- https://mvnrepository.com/artifact/org.springframework/spring-beans -->
  14. <dependency>
  15. <groupId>org.springframework</groupId>
  16. <artifactId>spring-beans</artifactId>
  17. <version>${spring-version}</version>
  18. </dependency>
  19. <dependency>
  20. <groupId>org.springframework</groupId>
  21. <artifactId>spring-context</artifactId>
  22. <version>${spring-version}</version>
  23. </dependency>
  24. <dependency>
  25. <groupId>org.springframework</groupId>
  26. <artifactId>spring-context-support</artifactId>
  27. <version>${spring-version}</version>
  28. </dependency>
  29. <dependency>
  30. <groupId>org.springframework</groupId>
  31. <artifactId>spring-core</artifactId>
  32. <version>${spring-version}</version>
  33. </dependency>
  34. <dependency>
  35. <groupId>org.springframework</groupId>
  36. <artifactId>spring-aop</artifactId>
  37. <version>${spring-version}</version>
  38. </dependency>
  39. <dependency>
  40. <groupId>org.springframework</groupId>
  41. <artifactId>spring-aop</artifactId>
  42. <version>${spring-version}</version>
  43. </dependency>
  44. <dependency>
  45. <groupId>org.springframework</groupId>
  46. <artifactId>spring-orm</artifactId>
  47. <version>${spring-version}</version>
  48. </dependency>
  49. <dependency>
  50. <groupId>org.springframework</groupId>
  51. <artifactId>spring-orm</artifactId>
  52. <version>${spring-version}</version>
  53. </dependency>
  54. <dependency>
  55. <groupId>org.springframework</groupId>
  56. <artifactId>spring-web</artifactId>
  57. <version>${spring-version}</version>
  58. </dependency>
  59. <dependency>
  60. <groupId>org.springframework</groupId>
  61. <artifactId>spring-webmvc</artifactId>
  62. <version>${spring-version}</version>
  63. </dependency>
  64. <!-- https://mvnrepository.com/artifact/org.aspectj/aspectjrt -->
  65. <dependency>
  66. <groupId>org.aspectj</groupId>
  67. <artifactId>aspectjrt</artifactId>
  68. <version>1.8.10</version>
  69. </dependency>
  70. <!-- https://mvnrepository.com/artifact/org.aspectj/aspectjweaver -->
  71. <dependency>
  72. <groupId>org.aspectj</groupId>
  73. <artifactId>aspectjweaver</artifactId>
  74. <version>1.8.10</version>
  75. </dependency>
  76. </dependencies>
  77. </project>

第一个是服务端的maven项目:
服务接口,和以前不一样了,不用实现远程接口了。HelloService:
  1. package com.xjl456852.rmi.spring;
  2. /**
  3. * 定义一个远程接口
  4. *
  5. * @author leizhimin 2009-8-17 13:53:38
  6. */
  7. public interface HelloService {
  8. /**
  9. * 简单的返回“Hello World!"字样
  10. *
  11. * @return 返回“Hello World!"字样
  12. */
  13. public String helloWorld();
  14. /**
  15. * 一个简单的业务方法,根据传入的人名返回相应的问候语
  16. *
  17. * @param someBodyName 人名
  18. * @return 返回相应的问候语
  19. */
  20. public String sayHelloToSomeBody(String someBodyName);
  21. }
服务实现类,加入了注解:
  1. package com.xjl456852.rmi.spring;
  2. import org.springframework.stereotype.Service;
  3. /**
  4. * 远程的接口的实现
  5. *
  6. * @author leizhimin 2009-8-17 13:54:38
  7. */
  8. @Service
  9. public class HelloServiceImpl implements HelloService {
  10. public HelloServiceImpl() {
  11. }
  12. /**
  13. * 简单的返回“Hello World!"字样
  14. *
  15. * @return 返回“Hello World!"字样
  16. */
  17. public String helloWorld() {
  18. return "Hello World!";
  19. }
  20. /**
  21. * 一个简单的业务方法,根据传入的人名返回相应的问候语
  22. *
  23. * @param someBodyName 人名
  24. * @return 返回相应的问候语
  25. */
  26. public String sayHelloToSomeBody(String someBodyName) {
  27. return "你好," + someBodyName + "!";
  28. }
  29. }
服务端启动程序:
  1. package com.xjl456852.rmi.spring;
  2. import org.springframework.context.ApplicationContext;
  3. import org.springframework.context.support.ClassPathXmlApplicationContext;
  4. /**
  5. * 通过Spring发布RMI服务
  6. *
  7. * @author leizhimin 2009-8-17 14:22:06
  8. */
  9. public class HelloHost {
  10. public static void main(String[] args) {
  11. ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
  12. System.out.println("RMI服务伴随Spring的启动而启动了.....");
  13. }
  14. }

Spring 配置: applicationContext.xml:
  1. <beans xmlns="http://www.springframework.org/schema/beans"
  2. xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context"
  3. xmlns:tx="http://www.springframework.org/schema/tx" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:task="http://www.springframework.org/schema/task"
  5. xsi:schemaLocation="
  6. http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
  7. http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
  8. http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd
  9. http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd
  10. http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.2.xsd">
  11. <!-- component-scan自动搜索@Component , @Controller , @Service , @Repository等标注的类 -->
  12. <context:component-scan base-package="com.xjl456852" />
  13. <bean id="serviceExporter" class="org.springframework.remoting.rmi.RmiServiceExporter">
  14. <property name="serviceName" value="rmiSpring"/>
  15. <property name="serviceInterface" value="com.xjl456852.rmi.spring.HelloService"/>
  16. <property name="registryPort" value="8888"/>
  17. <property name="service" ref="helloServiceImpl"/>
  18. </bean>
  19. </beans>
启动服务端程序,HelloHost:
 

第二个是客户端的maven项目:
客户端调用有两种方式,一种是使用Spring,一种不使用,这里仅介绍使用Spring的情况。
客户端需要依赖服务端的 HelloService接口,需要将这个接口放入到客户端中.

客户端的启动类:
  1. package com.xjl456852.rmi.spring;
  2. import org.springframework.context.ApplicationContext;
  3. import org.springframework.context.support.ClassPathXmlApplicationContext;
  4. import javax.annotation.Resource;
  5. import java.rmi.RemoteException;
  6. /**
  7. * 通过Spring来调用RMI服务
  8. *
  9. * @author leizhimin 2009-8-17 14:12:46
  10. */
  11. public class HelloClient {
  12. @Resource
  13. private HelloService helloService;
  14. public static void main(String[] args) throws RemoteException {
  15. ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
  16. HelloService hs = (HelloService) ctx.getBean("helloService");
  17. System.out.println(hs.helloWorld());
  18. System.out.println(hs.sayHelloToSomeBody("xjl456852"));
  19. }
  20. }

在Spring中配置客户端要调用服务, applicationContext.xml:
  1. <beans xmlns="http://www.springframework.org/schema/beans"
  2. xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context"
  3. xmlns:tx="http://www.springframework.org/schema/tx" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:task="http://www.springframework.org/schema/task"
  5. xsi:schemaLocation="
  6. http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
  7. http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
  8. http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd
  9. http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd
  10. http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.2.xsd">
  11. <!-- component-scan自动搜索@Component , @Controller , @Service , @Repository等标注的类 -->
  12. <context:component-scan base-package="com.xjl456852" />
  13. <bean id="helloService" class="org.springframework.remoting.rmi.RmiProxyFactoryBean">
  14. <property name="serviceUrl" value="rmi://192.168.176.131:8888/rmiSpring"/>
  15. <property name="serviceInterface" value="com.xjl456852.rmi.spring.HelloService"/>
  16. </bean>
  17. </beans>


启动客户端,查看结果:
 

下面是服务端发布多个服务接口的配置:
假设服务端还有一个服务,叫OtherService:
  1. package com.xjl456852.rmi.spring;
  2. /**
  3. * Created by xjl on 2017/3/19.
  4. */
  5. public interface OtherService {
  6. public int random();
  7. }
服务端的实现类:
  1. package com.xjl456852.rmi.spring;
  2. import org.springframework.stereotype.Service;
  3. import java.util.Random;
  4. /**
  5. * Created by xjl on 2017/3/19.
  6. */
  7. @Service
  8. public class OtherServiceImpl implements OtherService{
  9. Random random = new Random();
  10. public int random() {
  11. System.out.println("invoke random method");
  12. return random.nextInt(100);
  13. }
  14. }
服务端的Spring配置:
  1. <beans xmlns="http://www.springframework.org/schema/beans"
  2. xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context"
  3. xmlns:tx="http://www.springframework.org/schema/tx" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:task="http://www.springframework.org/schema/task"
  5. xsi:schemaLocation="
  6. http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
  7. http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
  8. http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd
  9. http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd
  10. http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.2.xsd">
  11. <!-- component-scan自动搜索@Component , @Controller , @Service , @Repository等标注的类 -->
  12. <context:component-scan base-package="com.xjl456852" />
  13. <bean id="serviceExporter" class="org.springframework.remoting.rmi.RmiServiceExporter">
  14. <property name="serviceName" value="rmiSpring"/>
  15. <property name="serviceInterface" value="com.xjl456852.rmi.spring.HelloService"/>
  16. <property name="registryPort" value="8888"/>
  17. <property name="service" ref="helloServiceImpl"/>
  18. </bean>
  19. <bean id="serviceExporter_Other" class="org.springframework.remoting.rmi.RmiServiceExporter">
  20. <property name="serviceName" value="rmiSpringOther"/>
  21. <property name="serviceInterface" value="com.xjl456852.rmi.spring.OtherService"/>
  22. <property name="registryPort" value="8888"/>
  23. <property name="service" ref="otherServiceImpl"/>
  24. </bean>
  25. </beans>


下面是客户端的配置:
客户端需要依赖服务端的OtherService接口
然后客户端的Spring配置如下:
  1. <beans xmlns="http://www.springframework.org/schema/beans"
  2. xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context"
  3. xmlns:tx="http://www.springframework.org/schema/tx" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:task="http://www.springframework.org/schema/task"
  5. xsi:schemaLocation="
  6. http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
  7. http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
  8. http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd
  9. http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd
  10. http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.2.xsd">
  11. <!-- component-scan自动搜索@Component , @Controller , @Service , @Repository等标注的类 -->
  12. <context:component-scan base-package="com.xjl456852" />
  13. <bean id="helloService" class="org.springframework.remoting.rmi.RmiProxyFactoryBean">
  14. <property name="serviceUrl" value="rmi://192.168.176.131:8888/rmiSpring"/>
  15. <property name="serviceInterface" value="com.xjl456852.rmi.spring.HelloService"/>
  16. </bean>
  17. <bean id="otherService" class="org.springframework.remoting.rmi.RmiProxyFactoryBean">
  18. <property name="serviceUrl" value="rmi://192.168.176.131:8888/rmiSpringOther"/>
  19. <property name="serviceInterface" value="com.xjl456852.rmi.spring.OtherService"/>
  20. </bean>
  21. </beans>
客户端的测试类:
  1. package com.xjl456852.rmi.spring;
  2. import org.springframework.context.ApplicationContext;
  3. import org.springframework.context.support.ClassPathXmlApplicationContext;
  4. import javax.annotation.Resource;
  5. import java.rmi.RemoteException;
  6. /**
  7. * 通过Spring来调用RMI服务
  8. *
  9. * @author leizhimin 2009-8-17 14:12:46
  10. */
  11. public class HelloClient {
  12. @Resource
  13. private HelloService helloService;
  14. @Resource
  15. private OtherService otherService;
  16. public static void main(String[] args) throws RemoteException {
  17. ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
  18. HelloService hs = (HelloService) ctx.getBean("helloService");
  19. System.out.println(hs.helloWorld());
  20. System.out.println(hs.sayHelloToSomeBody("xjl456852"));
  21. OtherService os = (OtherService) ctx.getBean("otherService");
  22. System.out.println("otherService:" + os.random());
  23. }
  24. }
先启动服务端,然后再启动客户端进行调用.
服务端显示如下:
 
客户端显示如下:
 

感谢原作者:




Spring 4 整合RMI技术及发布多个服务(xjl456852原创)的更多相关文章

  1. 黑马_13 Spring Boot:05.spring boot 整合其他技术

    13 Spring Boot: 01.spring boot 介绍&&02.spring boot 入门 04.spring boot 配置文件 05.spring boot 整合其他 ...

  2. Spring+CXF整合来管理webservice(服务器启动发布webservice)

    Spring+CXF整合来管理webservice    实现步骤:      1. 添加cxf.jar 包(集成了Spring.jar.servlet.jar ),spring.jar包 ,serv ...

  3. Spring Boot 整合视图层技术,application全局配置文件

    目录 Spring Boot 整合视图层技术 Spring Boot 整合jsp Spring Boot 整合freemarker Spring Boot 整合视图层技术 Spring Boot 整合 ...

  4. Spring 5.x 、Spring Boot 2.x 、Spring Cloud 与常用技术栈整合

    项目 GitHub 地址:https://github.com/heibaiying/spring-samples-for-all 版本说明: Spring: 5.1.3.RELEASE Spring ...

  5. Spring Boot从入门到精通之:二、Spring Boot整合JPA

    springboot-jpa 开发工具 系统: windows10 开发工具: Intellij IDEA 2018.2.6 springboot: 2.0.6.RELEASE jdk: 1.8.0_ ...

  6. Spring MVC & Boot & Cloud 技术教程汇总(长期更新)

    昨天我们发布了Java成神之路上的知识汇总,今天继续. Java成神之路技术整理(长期更新) 以下是Java技术栈微信公众号发布的关于 Spring/ Spring MVC/ Spring Boot/ ...

  7. spring boot 2.0(一)权威发布spring boot2.0

    Spring Boot2.0.0.RELEASE正式发布,在发布Spring Boot2.0的时候还出现一个小插曲,将Spring Boot2.0同步到Maven仓库的时候出现了错误,然后Spring ...

  8. spring.jar是包含有完整发布的单个jar 包,spring.jar中包含除了spring-mock.jar里所包含的内容外其它所有jar包的内容,因为只有在开发环境下才会用到 spring-mock.jar来进行辅助测试,正式应用系统中是用不得这些类的。

    Spring jar包的描述:针对3.2.2以上版本 org.springframework spring-aop ——Spring的面向切面编程,提供AOP(面向切面编程)实现 org.spring ...

  9. WebService之Spring+CXF整合示例

    一.Spring+CXF整合示例 WebService是一种跨编程语言.跨操作系统平台的远程调用技术,它是指一个应用程序向外界暴露一个能通过Web调用的API接口,我们把调用这个WebService的 ...

随机推荐

  1. 解决 IDEA 中文乱码

    一.打开Intellij的根目录,找到下图的两个文件(根据你的系统是32位或64位选择其中一个配置文件),在配置文件中添加:-Dfile.encoding=UTF-8 二.   配置IDE编码 点击F ...

  2. Jquery ajax json 值回传不了

    今天调试系统的时候,MVC 框架下调用ajax 值,回传的json值获取不到,后来发现竟然是服务没开,郁闷不已,留个截图,做个纪念.

  3. Vue.js 项目接口管理

    在vue开发中,会涉及到很多接口的处理,当项目足够大时,就需要定义规范统一的接口,如何定义呢? 本文使用vue-cli生成的项目举例. 第一步.在src目录下新建一个文件夹http,在http目录下建 ...

  4. clc和clear命令的使用

    clc命令是用来清除命令窗口的内容,这点不用多说.不管开启多少个应用程序,命令窗口只有一个,所以clc无论是在脚本m文件或者函数m文件调用时,clc命令都会清除命令窗口的内容.clear命令可以用来清 ...

  5. PCB 漏加阻抗条的臆想(转)

    阻抗条,我对你是有感情的,这你一定要相信我! 否则,不会在之前的每一次拼板,都不忘拥你入Panel之怀. 自做CAM开始,已记不清我们曾有多少次不期而遇, 我们一同迎接朝阳,送走晚霞,凝望窗外如洗的月 ...

  6. P2476 [SCOI2008]着色方案

    传送门 数学太珂怕了--膜一下->这里 记\(sum[i]\)为题中\(c[i]\)的前缀和,\(C[i][j]\)表示\(C_{i}^j\) 设\(f[i][j]\)表示前面\(i\)中颜色已 ...

  7. maptalks 如何加载 ArcGIS 瓦片图层

    最近需要加载 ArcGIS 瓦片图层,运行官网加载 ArcGIS 瓦片图层的 demo 是没有问题的.如果把 ArcGIS 瓦片图层 URL 换成是自已发布的 ArcGIS 地图服务,发现加载不出来, ...

  8. qW3xT.2挖矿病毒处理方案

    我遇到的是一款qW3xT.2的病毒,网上查了一下,好像是挖矿病毒.在此贴一下我找到的关于病毒的资料.这是我的服务器 这篇文章可谓是出自高手之笔,感觉说的很厉害,但是非专业人士的我有点看不懂,看个大概  ...

  9. JMeter配置MongoDB

    1.启动JMeter,右键添加->配置文件->MongoDB Source Config. 注意:JMeter 3.0以上版本去掉了此配置项,可以从低版本处拷贝. 2.设置MongoDB配 ...

  10. ASP.NET MVC 导出CSV文件

    ASP.NET MVC   导出CSV文件.直接贴代码 /// <summary> /// ASP.NET MVC导出CSV文件Demo1 /// </summary> /// ...