zoukankan      html  css  js  c++  java
  • spring发布RMI服务(-)

    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;
        }
        
    }
    View Code

     

    客户端

    客户端也采用一个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.

     

  • 相关阅读:
    在 Solaris 下有内核参数对应 TIME_WAIT 状态保持时间
    Properties获取属性
    jQuery Validate 动态添加验证
    解决struts2 action中double型在页面默认带有小数点的方法
    jsp、java下载附件
    方法参数数量不确定时应该怎么做?
    eclipse的java转web项目
    iBatis批量操作
    ORA19706和_external_scn_rejection_threshold_hours的前世今生
    Oracle官方书籍阅读顺序
  • 原文地址:https://www.cnblogs.com/luoyx/p/7825819.html
Copyright © 2011-2022 走看看