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客户端调用完成...
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语句需要程序员自己去编 ...
随机推荐
- 孤荷凌寒自学python第十四天python代码的书写规范与条件语句及判断条件式
孤荷凌寒自学python第十四天python代码的书写规范与条件语句及判断条件式 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 在我学习过的所有语言中,对VB系的语言比较喜欢,而对C系和J系 ...
- 剑指offer-从尾到头打印链表03
class Solution: # 返回从尾部到头部的列表值序列,例如[1,2,3] def printListFromTailToHead(self, listNode): # write code ...
- python pyinstaller 打包程序报错解决
python打包exe,各种入坑 一.安装PyInstaller 1.安装pywin32 pip命令安装:pip install pywin32(推荐) 2.安装Pyinstaller pip命令安装 ...
- idea中maven项目放到包中的mapper的xml文件不发布的问题
今天重新一下mybatis的基础,然后一直报错,提示的是 result map 找不到com.zm.model.User对象可是看 mapper的写法没问题.找了半天才发现 是mapper没扫描到 解 ...
- Thread 线程池
Thread 线程池: 当使用多个较短存活期的线程有利时,运用线程池技术可以发挥作用.运用这一技术时,不是为每个任务创建一个全新的线程,而可以从线程池中抽出线程,并分配给任务.当线程完成任务后,再把它 ...
- B - Help Jimmy
B - Help Jimmy Time Limit: 1000/1000MS (C++/Others) Memory Limit: 65536/65536KB (C++/Others) Problem ...
- 【bzoj2618】[Cqoi2006]凸多边形 半平面交
题目描述 逆时针给出n个凸多边形的顶点坐标,求它们交的面积.例如n=2时,两个凸多边形如下图: 则相交部分的面积为5.233. 输入 第一行有一个整数n,表示凸多边形的个数,以下依次描述各个多边形.第 ...
- easyui中tab页中js脚本无法加载的问题及解决方法
我发现tab页中<script src="xxx.js">方式加载的脚本没有生效,firebug看请求也没有请求相应的脚本文件. 单独在浏览器中打开tab页中的页面js ...
- 2016"百度之星" - 初赛(Astar Round2A)HDU 5695 拓扑排序+优先队列
Gym Class Time Limit: 6000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total S ...
- POST JSON fails with 415 Unsupported media type, SpringMVC
网上的解决办法非常多,但是大多不靠谱. 归结原因:SpringMVC 无法通过 httprequest headers 中的 Content-Type 和 Accept 匹配到对应的HttpMessa ...