Spring-RMI远程接口调用简单配置

远程调用RMI(Remote Method Invocation): 通过使用RmiProxyFactoryBean 和 RmiServiceExporter,并且,Spring支持两个传统的RMI(使用 java.rmi.Remote接口和java.rmi.RemoteException)和通过RMI调用器实现的暴露远程调用(支持任何Java接口)。

RMI远程访问基本流程

    1). 服务端定义远程访问接口;

    2). 服务端通过RmiServiceExporter暴露服务接口

    3). 客户端定义与服务端已暴露的相同接口

    4). 客户端通过RmiProxyFactoryBean调用服务接口

1.客户端配置三步:

1)applicationContext.xml

 <!-- spring rmi远程接口调用  客户端调用-->
     <bean id="clientRmi" class="org.springframework.remoting.rmi.RmiProxyFactoryBean">
        <property name="serviceUrl" value="rmi://localhost:1199/userRmiService"></property> 
        <property name="serviceInterface" value="com.maystar.common.service.RmiUserService"></property> 
        <!-- 注意:如果如下两项不配置,当服务器未开启,客户端无法打包,会有拒绝连接异常。 -->
        <!-- 预查找远程对象 默认为true -->
        <property name="lookupStubOnStartup" value="false"></property>
        <!-- 是否刷新远程调用缓存的stub -->
        <property name="refreshStubOnConnectFailure" value="true"></property>
    </bean>

2)接口:

public interface RmiUserService {
    User getUserByAcount(String name,String password);
    
    void insert(User user);
}

3)调用

//测试rmi远程接口调用代码
        System.out.println("rmi客户端开始调用");
        RmiUserService rmiUserService=(RmiUserService)SpringContextUtil.getBean("clientRmi");
        User list=(User)rmiUserService.getUserByAcount("张三", ":张三的密码");//spring实现反序列化
        System.out.println(list);
        System.out.println("rmi客户端调用结束");

 

2.服务器端配置

1)applicationContext.xml

<!-- spring rmi远程接口调用 服务端配置-->
    <bean name="rmiService" class="com.maystar.common.service.UserRmiServiceImpl"/>
    <bean  class="org.springframework.remoting.rmi.RmiServiceExporter">
       <!-- RMI服务名称,可自定义服务名称 -->
       <property name="serviceName" value="userRmiService" ></property>
        <!-- 导出实体 -->
       <property name="service" ref="rmiService" ></property>
       <property name="serviceInterface" value="com.maystar.common.service.RmiUserService"></property>
       <property name="registryPort" value="1199" ></property>
    </bean>

2)接口(同客户端一致)

public interface RmiUserService {
    User getUserByAcount(String name,String password);
    
    void insert(User user);
}

3)接口实现类

public class UserRmiServiceImpl implements RmiUserService{
    @Override
    public User getUserByAcount(String name, String password) {
       System.out.println("服务端获取用户信息:" + name + password);
       User user=new User();
       user.setUsername(name);
       user.setPassword(password);
       return user;
    }
    @Override
    public void insert(User user) {
       System.out.println("开始插入用户信息:" + user.toString());
    }
}

输出结果:

rmi客户端开始调用
张三
:张三的密码
rmi客户端调用结束

转载于:https://my.oschina.net/u/1054538/blog/1791912

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值