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 {@Overridepublic 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客户端调用完成...
spirng整合rmi的更多相关文章
- Spring 4 整合RMI技术及发布多个服务(xjl456852原创)
rmi需要建立两个项目,一个是服务端的项目,一个是客户端的项目.服务端项目启动后,再启动客户端项目去调用服务端的方法. 我们建立两个maven项目: pom.xml配置: <?xml versi ...
- SSH三大框架整合案例
SSH三大框架的整合 SSH三个框架的知识点 一.Hibernate框架 1. Hibernate的核心配置文件 1.1 数据库信息.连接池配置 1.2 Hibernate信息 1.3 映射配置 ...
- SSH三大框架的整合
SSH三个框架的知识点 一.Hibernate框架 1. Hibernate的核心配置文件 1.1 数据库信息.连接池配置 1.2 Hibernate信息 1.3 映射配置 1.4 Hibernate ...
- spring RMI的使用
Spring整合RMI的原理 客户端的核心是RmiProxyFactoryBean,包含serviceURL属性和serviceInterface属性. 通过JRMP访问服务.JRMP JRMP:ja ...
- 20160526-20160531mybatis入门进阶
mybatis第二天 高级映射 查询缓存 和spring整合 课程复习: mybatis是什么? mybatis是一人持久层框架,mybatis是一个不完全的ORM框架.sql语句需要程序员自己去编 ...
- Ehcache缓存配置以及基本使用
在java项目广泛的使用.它是一个开源的.设计于提高在数据从RDBMS中取出来的高花费.高延迟采取的一种缓存方案.正因为Ehcache具有健壮性(基于java开发).被认证(具有apache 2.0 ...
- spring远程服务知识梳理
序:本文主要是总结和归纳spring的远程服务相关知识,可作为入门学习笔记.写博客目的也是为了进行知识梳理,便于以后查看.本文主要参考资料 spring 实战第三版 本文主要讨论内容如下: 远程调度概 ...
- mybatis由浅入深day02_课程复习_1订单商品数据模型分析
mybatis第二天 高级映射 查询缓存 和spring整合 课程复习: mybatis是什么? mybatis是一个持久层框架,mybatis是一个不完全的ORM框架.sql语句需要程序员自己去编 ...
- java学习摘抄笔记mybaits2
mybatis第二天 高级映射 查询缓存 和spring整合 课程复习: mybatis是什么? mybatis是一人持久层框架,mybatis是一个不完全的ORM框架.sql语句需要程序员自己去编 ...
随机推荐
- 线段树 (区间更新,区间查询) poj http://poj.org/problem?id=3468
题目链接 #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> # ...
- 第二阶段团队冲刺-six
昨天: 完成打印名单的功能. 今天: 合并程序(添加打印txt). 遇到的问题: web.xml中配置url-pattern一直不合适,不知道为什么会影响界面.
- H3C交换机端口链路聚合
H3C交换机端口链路聚合 以太网链路聚合 -- 以太网链路聚合配置命令 -- lacp system-prioritylacp system-priority命令用来配置系统的LACP优先级.undo ...
- Codeforces 672D Robin Hood(二分好题)
D. Robin Hood time limit per test 1 second memory limit per test 256 megabytes input standard input ...
- [poj] 1389 Area of Simple Polygons
原题 线段树+扫描线 对于这样一个不规则图形,我们要求他的面积有两种方法,割和补. 补显然不行,因为补完你需要求补上去的内部分不规则图形面积-- 那么怎么割呢? 像这样: 我们就转化成了无数个矩形的和 ...
- Tomcat学习笔记(六)
Tomcat日志 网上找到一篇分析不错的博文 http://peiquan.blog.51cto.com/7518552/1580189/
- vue-cli脚手架的.babelrc文件
虽然es6还没被浏览器全部支持,但是使用es6是大势所趋,所以babel应运而生将es6代码转换成浏览器能够识别的代码 什么是.babelrc文件呢? 熟悉linux的同学一定知道,rc结尾的文件通常 ...
- 原生js提取非行间样式
js用style属性可以获得html标签的样式,但是不能获取非行间样式,如何获取css的非行间样式呢,在低版本ie我们可以用currentStyle,在其他浏览器我们可以用getComputedSty ...
- UVa10891 Game of Sum
给定n个数字,A和B可以从这串数字的两端任意选数字,一次只能从一端选取.两人都采用最优策略,A先手,问A和B各自得到数字的和的差值最大为多少? 区间DP F[i][j]表示区间i~j内A能得到的最大数 ...
- cygwin设置
解决乱码问题 # 设置为中文环境,使提示成为中文 export LANG =" zh_CN.UTF-8 " # 输出为中文编码 export OUTPUT_CHARSET =& ...