- 浏览: 738447 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
lgh1992314:
a offset: 26b offset: 24c offse ...
java jvm字节占用空间分析 -
ls0609:
语音实现在线听书http://blog.csdn.net/ls ...
Android 语音输入API使用 -
wangli61289:
http://viralpatel-net-tutorials ...
Android 语音输入API使用 -
zxjlwt:
学习了素人派http://surenpi.com
velocity宏加载顺序 -
tt5753:
谢啦........
Lucene的IndexWriter初始化时的LockObtainFailedException的解决方法
spring rmi实际上是扩展了下java rmi的实现,可以使用bean的xml配置方式使用rmi。
RMI (Remote Method Invocation)是从JDK 1.1开始就出现的API功能,它让客户端在使用远端服务所提供的服务时,就如何使用本地服务一样,然而RMI在使用时必须一连串繁复的手续,像是服务介面在定义时必须继承java.rmi.Remote介面、服务Server在实作时必须继承java.rmi.UnicastRemoteObject类别、必须使用rmic指令产生stub与skeleton等,设定上手续繁杂。 您可以在Spring中透过org.springframework.remoting.rmi.RmiServiceExporter来简化使用RMI的手续,来实际看看例子,了解Spring在RMI上的使用与简化,首先来看一下RMI伺服端的撰写,首先定义一个服务接口:
package org.spring; public interface RmiService { public String doWork(); public int add(int a, int b); }
服务物件的接口不用继承java.rmi.Remote介面,而在实现RmiService时也不用继承java.rmi.UnicastRemoteObject类别,
package org.spring; public class RmiServiceImpl implements RmiService{ @Override public String doWork() { return "this message return from server"; } @Override public int add(int a, int b) { return a+b; } }这只是个简单的示例
接下来您只要在Bean定义档中定义,让Spring管理、生成Bean实例,如此即可注册、启动RMI服务,
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd" default-autowire="byName"> <bean id="rmiService" class="org.spring.RmiServiceImpl"/> <bean id="serviceExporter" class="org.springframework.remoting.rmi.RmiServiceExporter"> <property name="service"> <ref bean="rmiService"/> </property> <property name="serviceName"> <value>rmiService</value> </property> <property name="serviceInterface"> <value>org.spring.RmiService</value> </property> </bean> </beans>
只要告诉org.springframework.remoting.rmi.RmiServiceExporter服务物件、名称与要代理的介面,之后Spring读取完定义档并生成Bean实例后,RMI服务就会启动,来撰写一个简单的RMIServer类别,以启动RMI服务:
package org.spring; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import org.springframework.context.support.ClassPathXmlApplicationContext; public class RMIServer { public static void main(String[] args) throws IOException { new ClassPathXmlApplicationContext("config/rmi-server.xml"); BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); while (true) { if (reader.readLine().equals("exit")) { System.exit(0); } } } }
接下来,在客户端,只要依赖接口对应的jar包就可以了,然后再spring的配置文件中配置好需要访问的服务的地址和对应的接口名称
<span style="font-family:serif;font-size:12px;"><?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd" default-autowire="byName"> <bean id="rmiServiceProxy" class="org.springframework.remoting.rmi.RmiProxyFactoryBean"> <property name="serviceUrl"> <value>rmi://localhost/rmiService</value> </property> <property name="serviceInterface"> <value>org.spring.RmiService</value> </property> </bean> </beans></span>
注意到"serviceUrl"属性的设定,它是以"rmi://"开头,接着指定伺服器位址与服务名称,来撰写个简单的客户端程式以使用RMI伺服器上的服务
<span style="font-family:serif;font-size:12px;">package org.spring; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class RMIClient { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext( "config/rmi-client.xml"); RmiService service = (RmiService) context.getBean("rmiServiceProxy"); String result1 = service.doWork(); System.out.println(result1); int result2 = service.add(1, 2); System.out.println(result2); } } </span>
然后我们执行RMIServer.java类,在spring web应用中只要配置文件加载到spring的加载路径即可应用。
然后再执行RMIClient.java类,执行结果如下:
这样使用spring就能很方便的简化java 的rmi调用,并且由spring管理,在分布式的应用中就能做到客户端只依赖接口,不依赖实现。
发表评论
-
对字符串进行验证之前先进行规范化
2013-09-17 23:18 13876对字符串进行验证之前先进行规范化 应用系统中经常对字 ... -
使用telnet连接到基于spring的应用上执行容器中的bean的任意方法
2013-08-08 09:17 1423使用telnet连接到基于spring的应用上执行容器中 ... -
jdk7和8的一些新特性介绍
2013-07-06 16:07 10063更多ppt内容请查看:htt ... -
Lucene的IndexWriter初始化时的LockObtainFailedException的解决方法
2013-06-28 21:35 11727原文链接: http://www.javaarch.net ... -
java对于接口和抽象类的代理实现,不需要有具体实现类
2013-06-12 09:50 2902原文链接:http://www.javaarch.net/j ... -
Java EE 7中对WebSocket 1.0的支持
2013-06-05 09:27 3794原文链接:http://www.javaarch.n ... -
Spring Security Logout
2013-06-03 00:05 2317原文地址:http://www.javaarch.net/ ... -
Spring Security Basic Authentication
2013-06-03 00:04 1690原文地址:http://www.javaarch.net/ ... -
Spring Security Form Login
2013-06-02 16:16 2107原文地址:http://www.javaarch.net/j ... -
spring3 的restful API RequestMapping介绍
2013-06-02 14:53 1112原文链接:http://www.javaarch.net/j ... -
Java Web使用swfobject调用flex图表
2013-05-28 19:05 1074Java Web使用swfobject调用 ... -
spring使用PropertyPlaceholderConfigurer扩展来满足不同环境的参数配置
2013-05-21 15:57 3283spring使用PropertyPlaceholderCon ... -
java国际化
2013-05-20 20:57 4432java国际化 本文来自:http://www.j ... -
RSS feeds with Java
2013-05-20 20:52 1181RSS feeds with Java 原文来自:htt ... -
使用ibatis将数据库从oracle迁移到mysql的几个修改点
2013-04-29 10:40 1627我们项目在公司的大战略下需要从oracle ... -
线上机器jvm dump分析脚本
2013-04-19 10:48 2854#!/bin/sh DUMP_PIDS=`p ... -
spring3学习入门示例工程
2013-04-18 09:28 10831. github地址 https://github ... -
spring map使用annotation泛型注入问题分析
2013-04-15 13:30 8498今天在整一个spring的ioc学习demo,碰到 ... -
eclipse远程部署,静态文件实时同步插件
2013-04-06 20:18 5411eclipse 远程文件实时同步,eclipse远程 ... -
java价格处理的一个问题
2013-03-26 21:21 1782我们经常会处理一些价格,比如从运营上传的文件中将某 ...
相关推荐
springRMI示例,可以通过该技术实现引擎机功能,做业务处理
spring-rmi-示例 项目是从 code.google.com/p/springrmiexample 导出的,我这边稍作修改 这个项目是如何在 Spring 的帮助下设置 RMI 服务器和客户端的示例。 该项目包含2个子项目: Spring RMI 示例服务器,即 Web...
word源码java fleet-spring-boot ...RMI 远程调用框架 :Spring Boot Hessian 远程调用框架 :Spring Boot Forest Http 请求 :Spring Boot HTTP 访问控制 :Spring Boot GraphQL 构建 API :Spring Boot
2. Spring 2.0 的新特性 2.1. 简介 2.2. 控制反转(IoC)容器 2.2.1. 更简单的XML配置 2.2.2. 新的bean作用域 2.2.3. 可扩展的XML编写 2.3. 面向切面编程(AOP) 2.3.1. 更加简单的AOP XML配置 2.3.2. 对@AspectJ 切面的...
17.2. 使用RMI暴露服务 17.2.1. 使用 RmiServiceExporter 暴露服务 17.2.2. 在客户端链接服务 17.3. 使用Hessian或者Burlap通过HTTP远程调用服务 17.3.1. 为Hessian配置DispatcherServlet 17.3.2. 使用...
8.3.8. PetClinic示例 8.4. 更多资源 II. 中间层数据访问 9. 事务管理 9.1. 简介 9.2. 动机 9.3. 关键抽象 9.4. 使用资源同步的事务 9.4.1. 高层次方案 9.4.2. 低层次方案 9.4.3. ...
8.3.8. PetClinic示例 8.4. 更多资源 II. 中间层数据访问 9. 事务管理 9.1. 简介 9.2. 动机 9.3. 关键抽象 9.4. 使用资源同步的事务 9.4.1. 高层次方案 9.4.2. 低层次方案 9.4.3. ...
17.2. 使用RMI暴露服务 17.2.1. 使用 RmiServiceExporter 暴露服务 17.2.2. 在客户端链接服务 17.3. 使用Hessian或者Burlap通过HTTP远程调用服务 17.3.1. 为Hessian配置DispatcherServlet 17.3.2. 使用...
10.3 利用Spring在JSP页面输出“HelloWorld”的示例 10.3.1 建立myHelloWorld工程 10.3.2 编写JSP页面helloWorld.jsp 10.3.3 编写控制器HelloWorldController.java 10.3.4 建立Spring的配置文档dispatcherServlet-...
眼镜蛇RMI-IIOP示例应用程序 该存储库是分布式应用程序中的和的概念证明(POC)。 例如 , , 和 api。 它是协议的替代方法。 该应用程序允许您使用spring gui和命令行管理电话簿。 关于RMI-IIOP RMI-IIOP (称为...
10.3 利用Spring在JSP页面输出“HelloWorld”的示例 10.3.1 建立myHelloWorld工程 10.3.2 编写JSP页面helloWorld.jsp 10.3.3 编写控制器HelloWorldController.java 10.3.4 建立Spring的配置文档dispatcherServlet-...
10.3 利用Spring在JSP页面输出“HelloWorld”的示例 10.3.1 建立myHelloWorld工程 10.3.2 编写JSP页面helloWorld.jsp 10.3.3 编写控制器HelloWorldController.java 10.3.4 建立Spring的配置文档dispatcherServlet-...
介绍一个基于Spring Boot的示例应用程序,它使用Docker插件构建应用程序的映像。 本文档列出了构建,推送映像并使用它来启动容器内的服务器的步骤。在DockerHub上创建帐户在创建帐户初始化本地泊坞窗以连接到您的...
适用于Jersey,Jersey2,GWT,JavaScript,JQuery,Netty,Guice,Spring,RMI,RabbitMQ,Redis,Hazelcast,JGroups,jsr 356,Sockjs,Socket.IO,JMS,Vert.x,Play框架,Java的Atmosphere WebSockets示例EE,...
通过 RMI 使用信号量的 JVM 间同步本模块将说明使用运行在 RMI 中的基于信号量的传递管理器来控制多个 JVM 之间的同步。 ####1.4 基于阻塞队列的订单管理系统的发布者-主题 Borker-Subcriber 模式这个模块是为了...
dea的matlab代码包DEA代码示例 在Java讲座中使用的示例,...关于线程,异常,RMI,模型视图控制器,Spring,Java EE等,有各种各样的代码示例。此外,还有关于这些主题的练习,并且大多数练习都由PluralSight截屏支持。
10.3 利用Spring在JSP页面输出“HelloWorld”的示例 10.3.1 建立myHelloWorld工程 10.3.2 编写JSP页面helloWorld.jsp 10.3.3 编写控制器HelloWorldController.java 10.3.4 建立Spring的配置文档dispatcherServlet-...
3.1.2 Java事件模型示例 119 3.1.3 JSF事件模型 120 3.1.4 Action事件 122 3.1.5 值改变事件 125 3.1.6 生命周期事件 128 3.1.7 将监听器绑定到Bean属性 130 3.2 JSF的国际化支持 132 3.2.1 加载国际化资源文件 132 ...