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语句需要程序员自己去编 ...
随机推荐
- Python网络编程(socket模块、缓冲区、http协议)
网络的概念:主机 端口 IP 协议 服务器: localhost/127.0.0.1 客户端: 只是在本机启动客户端,用127.0.0.1访问 服务器: 0.0.0.0 客户端: ...
- heat应用
作为OpenStack中的编排引擎,Heat能够出色的完成编排任务,井井有条地管理编排出来的资源.但同时,Heat也是一个出色的应用部署引擎,它提供了一套内置的框架去完成一系列复杂的应用部署任务. 使 ...
- 剑指offer-从尾到头打印链表03
class Solution: # 返回从尾部到头部的列表值序列,例如[1,2,3] def printListFromTailToHead(self, listNode): # write code ...
- ocrosoft Contest1316 - 信奥编程之路~~~~~第三关 问题 M: 当总统
http://acm.ocrosoft.com/problem.php?cid=1316&pid=12 题目描述 小明想当丑国的总统,丑国大选是按各州的投票结果来确定最终的结果的,如果得到超过 ...
- spring security注解(1)
Chapter 15. 基于表达式的权限控制 Spring Security 3.0介绍了使用Spring EL表达式的能力,作为一种验证机制 添加简单的配置属性的使用和访问决策投票,就像以前一样. ...
- CSS使用示例
CSS的存在就是将网页的内容与内容展示的方式进行了分离. 使用CSS的方式有好几种,最常用的是通过引入外部CSS文件进行使用 HTML <!DOCTYPE html> <html&g ...
- 【bzoj2694】Lcm 莫比乌斯反演+线性筛
题目描述 求$\sum\limits_{i=1}^n\sum\limits_{j=1}^m|\mu(gcd(i,j))|lcm(i,j)$,即$gcd(i,j)$不存在平方因子的$lcm(i,j)$之 ...
- Codeforces755D PolandBall and Polygan
题目戳这里 我们只需要计算每增加一条线后穿过了几条已有的线即可.为了方便,我们令\(K \le N/2\),并且给每条线一个方向,即\(x\)到\((x+K) \; mod \; N\).然后我们假设 ...
- 虚拟机——mnt_hgfs下无目录情况解决
/mnt/hgfs下无目录情况解决: VMware8虚拟机安装Ubuntu 11.10使用share folders共享目录将虚拟机掉电关闭(不能暂停),设置share folders目录,重启虚拟机 ...
- 刷题总结——Throw nails(hdu4393)
题目: Problem Description The annual school bicycle contest started. ZL is a student in this school. H ...