spirng整合rmi
package com.rmi;
/**
* 接口
* @author edgewalk
* @date 2017年6月11日
*/
public interface RmiServer {
public boolean test();
}
package com.rmi.impl;
import com.rmi.RmiServer;
/**
* 实现类
* @author edgewalk
* @date 2017年6月11日
*/
public class RmiServerImpl implements RmiServer {
@Override
public boolean test() {
System.out.println("服务端test方法执行了.....");
return true;
}
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.5//EN" "file:/usr/local/tomcat_report/lib/spring-beans-2.0.dtd">
<beans>
<!-- 定义接口实现类-->
<bean id="rmiService" class="com.rmi.impl.RmiServerImpl"/>
<bean id="remoteRmiService" class="org.springframework.remoting.rmi.RmiServiceExporter">
<!-- service接口 -->
<property name="serviceInterface" value="com.rmi.RmiServer"/>
<!-- 调用Service -->
<property name="service" ref="rmiService" />
<!-- value值是提供给客户端调用 -->
<property name="serviceName" value="remoteService"/>
<!-- 注册端口 -->
<property name="registryPort" value="9400"/>
<!-- 服务端口 -->
<property name="servicePort" value="9401"/>
</bean>
</beans>
package com.rmi;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
* 服务端启动类
* @author edgewalk
* @date 2017年6月11日
*/
public class MainServer {
public static void main(String[] args) {
System.out.println("rmi服务端启动...");
ApplicationContext ac = new ClassPathXmlApplicationContext("rmi-server.xml");
System.out.println("rmi服务端启动完成...");
}
}
package com.rmi;
/**
* 在客户端使用服务端的接口文件
* @author edgewalk
* @date 2017年6月11日
*/
public interface RmiServer {
public boolean test();
}
package com.rmi;
import java.io.IOException;
import java.net.Socket;
import java.rmi.server.RMIClientSocketFactory;
/**
* 自定义的socket连接工厂
*
* @author edgewalk
* @date 2017年6月11日
*/
public class RMICustomClientSocketFactory implements RMIClientSocketFactory {
private int timeout = 1000; // 读超时时间
public void setTimeout(int timeout) {
this.timeout = timeout;
}
public Socket createSocket(String host, int port) throws IOException {
Socket socket = new Socket(host, port);
/**
* 调用setSoTimeout(int
* timeout)可以设置超时时间,如果到了超时时间仍没有数据,read会抛出一个SocketTimeoutException,
* 程序需要捕获这个异常,但是当前的socket连接仍然是有效的。
*/
socket.setSoTimeout(timeout);
return socket;
}
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.5//EN" "file:/usr/local/tomcat_report/lib/spring-beans-2.0.dtd">
<beans>
<!-- 自定一个SCOKECT连接,可配置读超时时间 -->
<bean id="rmiClientSocketFactory" class="com.rmi.RMICustomClientSocketFactory">
<property name="timeout" value="1000"></property>
</bean>
<!-- rmi远程调用 -->
<bean id="clientRmiService" class="org.springframework.remoting.rmi.RmiProxyFactoryBean">
<!-- rmiServer是调用服务端serviceName的value,rmiIp是服务端ip,rmiPort是服务端注册的端口 -->
<property name="serviceUrl" value="rmi://127.0.0.1:9400/remoteService" />
<!-- service接口 -->
<property name="serviceInterface" value="com.rmi.RmiServer" />
<!-- 客户端自动重连 -->
<!-- lookupStubOnStartup : false表示,不在容器启动的时候创建与Server端的连接; -->
<property name="lookupStubOnStartup" value="true" />
<!-- refreshStubOnConnectFailure : 这个属性是表示是否连接出错时自动重连; -->
<property name="refreshStubOnConnectFailure" value="true" />
<!-- registryClientSocketFactory : 这个是客户端与服务端创建SOCKECT的一个工厂。 -->
<property name="registryClientSocketFactory" ref="rmiClientSocketFactory" />
</bean>
</beans>
package com.rmi.client;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.rmi.RmiServer;
/**
* 客户端测试调用服务端程序
* @author edgewalk
* @date 2017年6月11日
*/
public class TestRmi {
public static void main(String[] arg) {
System.out.println("rmi客户端开始调用...");
ApplicationContext ctx = new ClassPathXmlApplicationContext("rmi-client.xml");
RmiServer rmi=(RmiServer)ctx.getBean("clientRmiService");
//rmi.test();
System.out.println("rmi客户端调用完成...");
}
}
rmi服务端启动...
log4j:WARN No appenders could be found for logger (org.springframework.context.support.ClassPathXmlApplicationContext).
log4j:WARN Please initialize the log4j system properly.
rmi服务端启动完成...
服务端test方法执行了.....
rmi客户端开始调用...
log4j:WARN No appenders could be found for logger (org.springframework.context.support.ClassPathXmlApplicationContext).
log4j:WARN Please initialize the log4j system properly.
rmi客户端调用完成...
转载于:https://www.cnblogs.com/edgedance/p/6984135.html
spirng整合rmi相关推荐
- Spring源码深度解析(郝佳)-学习-RMI使用及Spring源码解读
java远程方法调用.即Java RMI(Java Remote Method Invocation),是Java编程语言里一种用于实现远程过程调用的应用程序编程接口,它使客户机上运行的程序可以调用远 ...
- maven环境下SSH整合
目录 Maven环境下SSH整合 1 目录结构: 1 1. 导入jar包 2 1.1搭建maven环境 2 1.2配置pom.xml文件 2 1.2.1 pom.xml 2 2. 搭建struts2环 ...
- SSM学习——SSM整合案例(Spring+SpringMVC+Mybatis)(13)
这里写目录标题 要求 Spirng整合Mybatis Spirng整合SpringMVC 表与实体类的创建 创建层级 Dao层 Service层 controller层 接口测试 业务层`servic ...
- 腾讯云COS对象存储图片文件API的详细步骤过程
首先创建一个桶.相当于你存储图片的容器.我这里是存储图片. 我选则是共有读,私有写.因为不选择共有读的话,以后别的地方没办法访问 注意: 公有读权限可以通过匿名身份直接读取您存储桶中的数据,存在一定的 ...
- Ehcache缓存配置和基本使用
Ehcache在java项目广泛的使用.它是一个开源的.设计于提高在数据从RDBMS中取出来的高花费.高延迟采取的一种缓存方案.正因为Ehcache具有健壮性(基于java开发).被认证(具有apac ...
- java的Apollo的功能_Apollo配置中心
1什么是配置中心? 传统单体应用存在一些潜在缺陷,如随着规模的扩大,部署效率降低,团队协作效率差,系统可靠性变差,维护困难,新功能上线周期长等,所以迫切需要一种新的架构去解决这些问题,而微服务( mi ...
- SpringBoot入门到精通-SpringBoot启动流程(七)
定义自己的starter SpringBoot入门到精通-Spring的注解编程(一) SpringBoot入门到精通-SpringBoot入门(二) SpringBoot入门到精通-Spring的基 ...
- 【Spring】Spring学习笔记完整篇
文章目录 Spring 1.简介 优点 组成 弊端 2.IOC 控制反转 控制什么? 谁来控制? 反转? 依赖注入DI? IOC和DI关系 IOC本质 3.hello spring Applicati ...
- ssmpro-note
ssmpro 笔记2 2104-ssmpro 学习的内容目录 > spirngboot vue node.js 京淘 nginx redis mycat # ssmpro2104本阶段学到的*动 ...
最新文章
- 树莓派3B用Ubuntu MATE安装ros
- js如何动态向 fileaddress: [fromurl]添加数据_N+增强能力系列(3) | 动态KV模块
- Strange Optimization(扩展欧几里得)
- 1.0 算法本机调试方法
- python-函数定义
- C++工程师面试题大全
- 加入域时出现以下错误 登陆失败 该目标账户名称不正确_微信支付踩坑合集:微信小程序支付失败是什么原因?持续更新...
- Postgres psql: 致命错误: 角色 “postgres“ 不存在
- PHP设计模式——装饰器模式
- oracle按特定字符截取字符串_LeetCode基础算法题第159篇:找出由特定字符数组组成的字符串...
- Unity-中英对照汉化
- C++语法篇之STL库
- IBM服务器管理口IMM使用指南
- 计算机绘图入门,[2018年最新整理]AutoCAD计算机绘图入门.ppt
- 最新!中国内地大学ESI排名出炉:362所高校上榜!
- sed 去掉所有的换行符
- Linux cgroup详解(理论与实例)
- linux 引导内存,initramfs
- 编程新手如何快速提升coding能力?
- Redis遍历、模糊匹配key的两个命令keys、scan(python使用Redis)
热门文章
- 晨哥真有料丨及时止损的信号及可能的挽回方法
- oracle join过滤数据,oracle join on 数据过滤问题
- mysql技术简介_MySQL数据类型介绍
- Linux Man手册的使用示例
- 一个可变参数类型检查的示例
- php 解析返回的xml,php解析cas返回的xml解决思路
- 安卓 background的图片随着textview的大小而改变_关于CSS中的背景属性background简述...
- 【Redis】 redis hash getKey getValue 两个的性能差别
- 【elasticsearch】block.ClusterBlockException: blocked by: SERVICE_UNAVAILA
- 95-140-120-源码-transform-算子iterate