Spring整合RMI的原理

Spring整合RMI的原理

客户端的核心是RmiProxyFactoryBean,包含serviceURL属性和serviceInterface属性。

通过JRMP访问服务。JRMP JRMP:java remote method protocol,Java特有的,基于流的协议。

 

服务端暴露远程服务

RmiServiceExporter把任何Spring管理的Bean输出成一个RMI服务。通过把Bean包装在一个适配器类中工作。适配器类被绑定到RMI注册表中,并且将请求代理给服务类。

 

服务端

1 IHelloWorld.java POJO的接口

    public interface IHelloWorld {  
        public String helloWorld();  
      
        public String sayHelloToSomeBody(String someBodyName);  
    }  

 

 

2 HelloWorld.java POJO的实现

public class HelloWorld implements IHelloWorld {  
  
    @Override  
    public String helloWorld() {  
        return "Hello World!";  
    }  
  
    @Override  
    public String sayHelloToSomeBody(String someBodyName) {  
        return "Hello World!" + someBodyName;  
    }  
  
} 

 

3 spring配置文件rmi_server_context.xml

    <?xml version="1.0" encoding="UTF-8"?>  
    <beans xmlns="http://www.springframework.org/schema/beans"  
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"  
        xmlns:tx="http://www.springframework.org/schema/tx"  
        xsi:schemaLocation="http://www.springframework.org/schema/beans  
    http://www.springframework.org/schema/beans/spring-beans-2.0.xsd  
    http://www.springframework.org/schema/aop  
    http://www.springframework.org/schema/aop/spring-aop-2.0.xsd  
    http://www.springframework.org/schema/tx  
    http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">  
      
        <bean id="helloWorld" class="springapp.rmi.rmi.HelloWorld" />  
      
        <bean id="serviceExporter" class="org.springframework.remoting.rmi.RmiServiceExporter">  
            <property name="service" ref="helloWorld" />  
            <!-- 定义服务名 -->  
            <property name="serviceName" value="hello" />  
            <property name="serviceInterface" value="springapp.rmi.rmi.IHelloWorld" />  
            <property name="registryPort" value="8088" />  
        </bean>  
      
    </beans>  

 

4  服务端启动RMI的代码HelloHost.java

    public class HelloHost {  
        public static void main(String[] args) {  
            ApplicationContext ctx = new ClassPathXmlApplicationContext(  
                    "rmi_server_context.xml");  
            System.out.println("RMI服务伴随Spring的启动而启动了.....");  
        }  
    }  

  

客户端

1 配置文件rmi_client_context.xml

    <?xml version="1.0" encoding="UTF-8"?>  
    <beans xmlns="http://www.springframework.org/schema/beans"  
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">  
        <bean id="helloWorld" class="org.springframework.remoting.rmi.RmiProxyFactoryBean">  
            <property name="serviceUrl" value="rmi://10.87.40.141:8088/hello" />  
            <property name="serviceInterface" value="springapp.rmi.rmi.IHelloWorld" />  
        </bean>  
    </beans>  

 

2 客户端代码 HelloClient.java

    public class HelloClient {  
      
        public static void main(String[] args) throws RemoteException {  
            ApplicationContext ctx = new ClassPathXmlApplicationContext(  
                    "rmi_client_context.xml");  
            IHelloWorld hs = (IHelloWorld) ctx.getBean("helloWorld");  
            System.out.println(hs.helloWorld());  
            System.out.println(hs.sayHelloToSomeBody("Lavasoft"));  
        }  
      
    } 

 3 客户端复制服务端IHelloWorld.java的接口

    public interface IHelloWorld {  
        public String helloWorld();  
      
        public String sayHelloToSomeBody(String someBodyName);  
    }  

 jar

            <dependency>
                <groupId>log4j</groupId>
                <artifactId>log4j</artifactId>
                <version>${log4j.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-test</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-core</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-asm</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-tx</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-aop</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-beans</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-expression</artifactId>
                <version>${spring.version}</version>
            </dependency>

 

注意:rmi无法在中间添加F5进行访问
总结:客户端通过rmi进行远程访问服务端的接口方法
 

 

转载于:https://www.cnblogs.com/atwanli/articles/4786817.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值