spring发布RMI服务

最近交流了一个项目,需要从RMI、WebService、接口文件中采集数据到大数据平台,下面自己测试了通过Spring发布RMI服务。

说明:RMI服务要求服务端和客户端都是Java代码的,两端不能采用异构的语言开发。

服务端

1、编写服务接口和实现

package com.yaa.web.interfaces.rmi.springRMI;

public interface HelloRMIService {
  public int getAdd(int a, int b);
}
package com.yaa.web.interfaces.rmi.springRMI;

public class HelloRMIServiceImpl implements HelloRMIService {

  @Override
  public int getAdd(int a, int b) {     return a+b;   }

2、RMI通过spring发布:

服务端采用java注册方式将RMI服务接口交由spring容器管理。在MVCconfig的配置如下: 

//发布一个RMI服务
@Bean
public HelloRMIServiceImpl helloRMIServiceImpl() throws IOException{
  HelloRMIServiceImpl hello = new HelloRMIServiceImpl();
  return hello;
}
@Bean
public RmiServiceExporter rmiServiceExporter() throws IOException{
  RmiServiceExporter rmi = new RmiServiceExporter();
  rmi.setService(helloRMIServiceImpl());//实现类
  rmi.setServiceName("helloRMI");//服务名
  rmi.setServiceInterface(HelloRMIService.class);//接口类
  rmi.setRegistryPort(8889);//发布的端口,这里默认使用本机的localhost 或 127.0.0.1.
  return rmi;
}

完成后即运行服务端Web服务。

MVCconfig是spring容器的初始化类(替换了spring-servlet.xml,零配置xml),实现如下:

@Configuration
@EnableWebMvc //启动spring MVC容器,相当于 xml中的 <mvc:annotation-driven/>
@ComponentScan(basePackages = "com.yaa")
@ImportResource(locations={"classpath:META-INF/cxf/cxf.xml","classpath:META-INF/cxf/cxf-servlet.xml"})
public class MVCConfig extends WebMvcConfigurerAdapter{
@Autowired
RoleToUserProfileConverter roleToUserProfileConverter; @Override
public void addFormatters(FormatterRegistry registry) {
registry.addConverter(roleToUserProfileConverter);
} @Bean
public ViewResolver viewResolver() {
InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
viewResolver.setViewClass(JstlView.class);
viewResolver.setPrefix("/WEB-INF/views/");
viewResolver.setSuffix(".jsp"); return viewResolver;
} /*
* 处理静态资源
*/
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/static/**").addResourceLocations("/WEB-INF/static/"); } @Bean
public MessageSource messageSource() {
ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
messageSource.setBasename("messages");
messageSource.setDefaultEncoding("UTF-8");
return messageSource;
} //发布一个RMI服务
@Bean
public HelloRMIServiceImpl helloRMIServiceImpl() throws IOException{
HelloRMIServiceImpl hello = new HelloRMIServiceImpl();
return hello;
}
@Bean
public RmiServiceExporter rmiServiceExporter() throws IOException{
RmiServiceExporter rmi = new RmiServiceExporter();
rmi.setService(helloRMIServiceImpl());
rmi.setServiceName("helloRMI");
rmi.setServiceInterface(HelloRMIService.class);
rmi.setRegistryPort(8889);
return rmi;
} }

客户端

客户端也采用一个spring的Web服务,

1、配置Bean

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:jee="http://www.springframework.org/schema/jee"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd"> <!-- 客户端 -->
<bean id="myRMIClient" class="org.springframework.remoting.rmi.RmiProxyFactoryBean">
<property name="serviceInterface" value="com.yaa.web.interfaces.rmi.springRMI.HelloRMIService"></property>
<property name="serviceUrl" value="rmi://127.0.0.1:8889/helloRMI"></property>
</bean> </beans>

2、编写一个带Main的类访问远程服务

public class HelloClientSpring {

    public static void main(String[] args){

        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("com/Test/rmiClient.xml");
HelloRMIService helloRMIService = applicationContext.getBean("myRMIClient",HelloRMIService.class);
System.out.println(helloRMIService.getAdd(8, 4)); if (applicationContext != null)
applicationContext = null;
}
}

注意:

ClassPathXmlApplicationContext("com/Test/rmiClient.xml");中的com/Test/rmiClient.xml文件位置根据自己rmiClient.xml文件的具体路径填写。否则报找不到。

完成后以Application方式运行   HelloClientSpring类,即可看到 8+4 的结果是12.

spring发布RMI服务(-)的更多相关文章

  1. 【Java Web开发学习】Spring发布RMI服务

    [Java 远程服务]Spring发布RMI服务 转载:https://www.cnblogs.com/yangchongxing/p/9084066.html RmiServiceExporter可 ...

  2. cxf整合spring发布rest服务 httpclient访问服务

    1.创建maven web项目并添加依赖 pom.xml <properties> <webVersion>3.0</webVersion> <cxf.ver ...

  3. 应用Spring MVC发布restful服务是怎样的一种体验

            摘要:“约定优于配置”这是一个相当棒的经验,SOAP服务性能差.基于配置.紧耦合,restful服务性能好.基于约定.松耦合,现在我就把使用Spring MVC发布restful服务的 ...

  4. Spring整合CXF之发布WebService服务

    今天我们来讲下如何用Spring来整合CXF,来发布WebService服务: 给下官方文档地址:http://cxf.apache.org/docs/writing-a-service-with-s ...

  5. 在spring boot微服务中使用JWS发布webService

    发布时间:2018-11-22   技术:Java+spring+maven   概述 在springboot微服务中使用JWS发布webService,在服务启动时自动发布webservice接口. ...

  6. (七)CXF之与spring整合发布web服务

    一.需求分析 用spring发布服务 二.案例 2.1 引入maven依赖 <dependencies> <!-- 添加Spring支持 --> <dependency& ...

  7. [译]Spring构建微服务

    此文为译文,原文地址 介绍 本文通过一个使用Spring.Spring Boot和Spring Cloud的小例子来说明如何构建微服务系统. 我们可以通过数个微服务组合成一个大型系统. 我们可以想象下 ...

  8. Dubbo和Spring Cloud微服务架构'

    微服务架构是互联网很热门的话题,是互联网技术发展的必然结果.它提倡将单一应用程序划分成一组小的服务,服务之间互相协调.互相配合,为用户提供最终价值.虽然微服务架构没有公认的技术标准和规范或者草案,但业 ...

  9. Dubbo和Spring Cloud微服务架构比较

    Dubbo 出生于阿里系,是阿里巴巴服务化治理的核心框架,并被广泛应用于中国各互联网公司:只需要通过 Spring 配置的方式即可完成服务化,对于应用无入侵,设计的目的还是服务于自身的业务为主. 微服 ...

随机推荐

  1. POJ 1470 Closest Common Ancestors【近期公共祖先LCA】

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/u013912596/article/details/35311489 题目链接:http://poj ...

  2. 剑指offer 面试16题

    面试16题: 题目:数值的整数次方 题:实现函数double Power(double base, int exponent),求base的exponent次方.不得使用库函数,同时不需要考虑大数问题 ...

  3. Dancing Link专题

    一些链接: http://www.cnblogs.com/-sunshine/p/3358922.html http://www.cnblogs.com/grenet/p/3145800.html 1 ...

  4. MySQL数据库(7)_MySQL 数据备份与还原

    一.数据备份 1.使用mysqldump命令备份 mysqldump命令将数据库中的数据备份成一个文本文件.表的结构和表中的数据将存储在生成的文本文件中. mysqldump命令的工作原理很简单.它先 ...

  5. CSS3 animation-iteration-count:infinite

    原文:http://www.w3chtml.com/css3/properties/animation/animation-iteration-count.html animation-iterati ...

  6. SOA宣言和微服务特点

    如果从概念层来看,我更喜欢把SOA归为企业架构的范畴,从企业架构出发把业务分解为不同业务域的服务,关注系统间的服务互联互通的规范,并不关心如何实现.也就是说在企业架构上使用SOA支撑业务,而在方案架构 ...

  7. Linux Shell基础 单引号、双引号、反引号、小括号和大括号

    单引号和双引号 单引号和双引号用于变量值出现空格时将字符用引号括起来. 二者的主要区别在于, 被单引号括起来的字符都是普通字符,就算特殊字符也不再有特殊含义: 被双引号括起来的字符中,"$& ...

  8. [Papers]Finding Advertising Keywords on Web Pages

    参考资料: Finding Advertising Keywords on Web Pages ,Wen-tau Yih,Joshua Goodman, Vitor R. Carvalho

  9. no xxx find in java.library.path

    JAVA系统运行时候load native lib时候会遇到下面错误,如 java.lang.UnsatisfiedLinkError: no JSTAF in java.library.path这可 ...

  10. 对matrix,dataframe的操作函数

    1.每行(列)的平均值:rowMeans() ; colMeans() 输入:数值型矩阵:数值型数据框 输出:向量 2.每行(列)的总和:rowSums() ;colSums() 输入:数值型矩阵,数 ...