- 浏览: 21969 次
文章分类
最新评论
现在远程调用一般用RPC,webservice或者Rmi,而目前用的比较多的是webservice和Rmi。
webservice和rmi的最主要的区别,rmi的客户端和服务端都必须是java,webservice没有这个限制,webservice是在http协议上传递xml文本文件。与语言和平台无关,rmi是在tcp协议上传递可序列化的java对象,只能用在java虚拟机上,绑定语言。 RMI是EJB远程调用的基础,仅用RMI技术就可以实现远程调用,使用EJB是为了实现组件,事物,资源池,集群等功能.WebService是通过XML来传输数据,可用http等协议因此可在异构系统间传递,并且可以穿过防火墙,可在公网上远程调用。
以下是spring中配置Rmi的一个简单例子:
1.首先在src下建立一个接口(本人的是com.shinelife.inter):
package com.shinelife.inter;
public interface IBaseServiceRmi {
public String SayHelloRmi(String name);
}
2.然后实现接口的方法:
package com.shinelife.services;
import com.shinelife.inter.IBaseServiceRmi;
public class BaseServiceRmi implements IBaseServiceRmi {
public String SayHelloRmi(String name) {
// TODO Auto-generated method stub
return "Hello: "+name;
}
}
3.然后就是配置remote.xml:
在src下面新建一个xml文件然后复制添加以下内容(注:头文件的对象配置很重要,配置不当会报错):
<?xml version="1.0" encoding="UTF-8"?>
<!-- spring 远程服务对象配置-->
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:flex="http://www.springframework.org/schema/flex"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-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">
<!-- 远程对象暴露 开始 -->
<bean id="BaseServiceRmiExporter" class="org.springframework.remoting.rmi.RmiServiceExporter">
<!-- 调用Service -->
<property name="service">
<ref bean="BaseServiceRmi" />
</property>
<!-- 客户端调用时使用的名字 -->
<!-- value值是给用户调用 -->
<property name="serviceName">
<value>BaseServiceRmi</value>
</property>
<!-- service 接口 -->
<property name="serviceInterface">
<value>com.shinelife.inter.IBaseServiceRmi
</value>
</property>
<!-- 注册端口号 -->
<property name="registryPort">
<value>6100</value>
</property>
<property name="servicePort">
<value>7100</value>
</property>
</bean>
<!-- 远程对象暴露 结束 -->
</beans>
4.本人以上的例子是自己建立的一个remote.xml文件,而一般都是直接把这些配置到spring的配置文件applicationContext.xml里,而这种在这里就不研究了。主要说说外部配置Rmi的方式。
光是添加了一个remote.xml是不够的,还需要在spring的applicationContext.xml里面注入:
<bean id="BaseServiceRmi" class="com.shinelife.services.BaseServiceRmi"></bean>
这样spring才能找到并加载这个bean。
5.由于本人的是webservice项目,所以启动服务是用的配置web.xml,也可以用main入口函数加载,对于main加载,就不讲述了,这里讲述web.xml配置,以下是web.xml的部分内容:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
version="2.5"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/classes/applicationContext.xml,classpath:remote.xml
</param-value>
</context-param>
</web-app>
以上是服务端方面的配置,下面是客户端:
6.将com.shinelife.inter整个包拷贝到客户端下(注意服务端与客户端的包名保持一致)
7.在客户端的src下面新建一个Rmi.xml的文件,配置如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="BaseServiceRmi" class="org.springframework.remoting.rmi.RmiProxyFactoryBean">
<!-- BaseService是调用服务端serviceName的value -->
<property name="serviceUrl">
<value>rmi://127.0.0.1:6100/BaseServiceRmi</value>
</property>
<!-- service接口 -->
<property name="serviceInterface">
<value>com.shinelife.inter.IBaseServiceRmi</value>
</property>
</bean>
</beans>
8.然后建立一个main函数测试Rmi服务:
import org.apache.xbean.spring.context.ClassPathXmlApplicationContext;
import com.shinelife.inter.IBaseServiceRmi;
public class testRmi {
public static void main(String[] args) {
// TODO Auto-generated method stub
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("classpath:Rmi.xml");
IBaseServiceRmi baseService = (IBaseServiceRmi) context.getBean("BaseServiceRmi");
System.out.println( baseService.SayHelloRmi("Joker"));
}
}
9.测试结果:Hello: Joker
10.总结:Rmi是一个比较高效的远程调用方式,可以将整个函数方法作为参数进行远程调用,达到通信的目的,利用Rmi也可以减少很多的工作量。当然,在其他方面本人就不做结论,本人这也是分享一下搭建Rmi的方法。以便以后学习。
webservice和rmi的最主要的区别,rmi的客户端和服务端都必须是java,webservice没有这个限制,webservice是在http协议上传递xml文本文件。与语言和平台无关,rmi是在tcp协议上传递可序列化的java对象,只能用在java虚拟机上,绑定语言。 RMI是EJB远程调用的基础,仅用RMI技术就可以实现远程调用,使用EJB是为了实现组件,事物,资源池,集群等功能.WebService是通过XML来传输数据,可用http等协议因此可在异构系统间传递,并且可以穿过防火墙,可在公网上远程调用。
以下是spring中配置Rmi的一个简单例子:
1.首先在src下建立一个接口(本人的是com.shinelife.inter):
package com.shinelife.inter;
public interface IBaseServiceRmi {
public String SayHelloRmi(String name);
}
2.然后实现接口的方法:
package com.shinelife.services;
import com.shinelife.inter.IBaseServiceRmi;
public class BaseServiceRmi implements IBaseServiceRmi {
public String SayHelloRmi(String name) {
// TODO Auto-generated method stub
return "Hello: "+name;
}
}
3.然后就是配置remote.xml:
在src下面新建一个xml文件然后复制添加以下内容(注:头文件的对象配置很重要,配置不当会报错):
<?xml version="1.0" encoding="UTF-8"?>
<!-- spring 远程服务对象配置-->
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:flex="http://www.springframework.org/schema/flex"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-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">
<!-- 远程对象暴露 开始 -->
<bean id="BaseServiceRmiExporter" class="org.springframework.remoting.rmi.RmiServiceExporter">
<!-- 调用Service -->
<property name="service">
<ref bean="BaseServiceRmi" />
</property>
<!-- 客户端调用时使用的名字 -->
<!-- value值是给用户调用 -->
<property name="serviceName">
<value>BaseServiceRmi</value>
</property>
<!-- service 接口 -->
<property name="serviceInterface">
<value>com.shinelife.inter.IBaseServiceRmi
</value>
</property>
<!-- 注册端口号 -->
<property name="registryPort">
<value>6100</value>
</property>
<property name="servicePort">
<value>7100</value>
</property>
</bean>
<!-- 远程对象暴露 结束 -->
</beans>
4.本人以上的例子是自己建立的一个remote.xml文件,而一般都是直接把这些配置到spring的配置文件applicationContext.xml里,而这种在这里就不研究了。主要说说外部配置Rmi的方式。
光是添加了一个remote.xml是不够的,还需要在spring的applicationContext.xml里面注入:
<bean id="BaseServiceRmi" class="com.shinelife.services.BaseServiceRmi"></bean>
这样spring才能找到并加载这个bean。
5.由于本人的是webservice项目,所以启动服务是用的配置web.xml,也可以用main入口函数加载,对于main加载,就不讲述了,这里讲述web.xml配置,以下是web.xml的部分内容:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
version="2.5"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/classes/applicationContext.xml,classpath:remote.xml
</param-value>
</context-param>
</web-app>
以上是服务端方面的配置,下面是客户端:
6.将com.shinelife.inter整个包拷贝到客户端下(注意服务端与客户端的包名保持一致)
7.在客户端的src下面新建一个Rmi.xml的文件,配置如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="BaseServiceRmi" class="org.springframework.remoting.rmi.RmiProxyFactoryBean">
<!-- BaseService是调用服务端serviceName的value -->
<property name="serviceUrl">
<value>rmi://127.0.0.1:6100/BaseServiceRmi</value>
</property>
<!-- service接口 -->
<property name="serviceInterface">
<value>com.shinelife.inter.IBaseServiceRmi</value>
</property>
</bean>
</beans>
8.然后建立一个main函数测试Rmi服务:
import org.apache.xbean.spring.context.ClassPathXmlApplicationContext;
import com.shinelife.inter.IBaseServiceRmi;
public class testRmi {
public static void main(String[] args) {
// TODO Auto-generated method stub
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("classpath:Rmi.xml");
IBaseServiceRmi baseService = (IBaseServiceRmi) context.getBean("BaseServiceRmi");
System.out.println( baseService.SayHelloRmi("Joker"));
}
}
9.测试结果:Hello: Joker
10.总结:Rmi是一个比较高效的远程调用方式,可以将整个函数方法作为参数进行远程调用,达到通信的目的,利用Rmi也可以减少很多的工作量。当然,在其他方面本人就不做结论,本人这也是分享一下搭建Rmi的方法。以便以后学习。
发表评论
-
去掉Tomcat网站地址栏的小猫图标
2014-12-30 15:51 802首先,准备一张图片,在http://www.bitbug.n ... -
HTML特殊字符ASCII编码
2014-12-30 15:46 624在分析HTML字节流或者源代码的时候,需要对HTML特殊字符编 ... -
hibernate中SessionFactory.opensession()与getcurrentsession()的区别
2014-12-19 10:51 12771. getCurrentSession创建的session会 ... -
hibernate优化总结(转自一博客)
2014-09-18 16:29 5511) 在处理大数据量时, ... -
log4j发送邮件配置
2014-08-31 00:23 365log4j.rootLogger=DEBUG,FILE,MAI ... -
Spring+hibernate事务配置
2014-08-31 00:15 394<?xml version="1.0" ... -
Spring+Rmi中的客户端自动重连配置
2014-08-30 23:31 486<?xml version="1.0" ... -
Hibernate 写入数据库加入Timetamp(时间戳)配置
2014-08-30 23:25 884xxx.hbm.xml配置如下: <?xml vers ... -
hibernate连接mysql配置文件
2014-08-30 23:22 436<!-- 指定Hibernate配置文件的DTD信息 - ...
相关推荐
Spring RMI配置 在Spring中,配置RMI服务通常涉及以下步骤: - **创建远程接口**:定义一个继承自`java.rmi.Remote`的接口,声明远程方法。 - **实现远程接口**:提供接口的实现,这些方法将在服务器端执行。 - *...
二、Spring RMI配置步骤 1. 创建远程接口:首先定义一个Java接口,声明要远程调用的方法。例如: ```java public interface HelloService { String sayHello(String name); } ``` 2. 实现远程接口:创建接口的实现...
- **`<bean>`标签中的`rmi:`命名空间**:Spring配置文件中可以使用`<rmi:registry>`来定义RMI注册表,`<rmi:export>`用于导出远程服务。 - **`RmiServiceExporter`**:Spring提供的bean,负责将Spring Bean暴露为...
在这个"SpringRMI小例子"中,我们将深入探讨如何利用Spring框架来增强RMI的功能,使其更加灵活和易于管理。 首先,我们需要理解Spring框架在RMI中的角色。Spring提供了对RMI的高级抽象,通过其`org.springframework...
通过Spring的RMI支持,我们可以方便地定义服务接口和服务实现,然后通过配置文件或注解将它们暴露为RMI服务。这样做不仅提高了代码的可测试性,也使得服务的部署和管理变得更加灵活。 在原生的Spring RMI实现中,...
3. **配置Spring容器**:在Spring的XML配置文件中,你需要声明一个`<bean>`来表示远程服务,使用`<rmi:export>`或`<bean class="org.springframework.remoting.rmi.RmiServiceExporter">`标签将服务导出为RMI。...
6. **源码分析**:在提供的压缩包文件`SpringRMI`中,可能包含了上述所有步骤的代码示例。通过阅读这些源码,你可以深入理解Spring RMI的工作原理,包括服务暴露、注册、代理创建等。 7. **工具使用**:在开发过程...
3. **Spring配置(Spring Configuration)**:在Spring配置文件中,我们需要声明远程服务bean,并配置RMI服务器和客户端的设置。例如: ```xml <bean id="rmiRegistry" class="org.springframework.remoting.rmi....
下面将详细阐述Spring RMI服务的实现原理、配置过程以及如何自动化发布服务。 首先,了解RMI的基本概念是必要的。RMI是Java提供的一种标准接口,它允许一个Java对象调用远程主机上的另一个Java对象的方法,就像调用...
而 Spring RMI 大大简化了这些步骤,使得开发者可以通过简单的配置来创建 RMI 服务端和客户端。 #### 二、Spring RMI 的安装和使用 Spring 自 1.x 版本起就直接支持 RMI 功能,因此只需要包含 Spring 的 JAR 包...
3. **配置RMI服务器**:在Spring的XML配置文件(如`applicationContext.xml`)中,我们需要配置一个RmiRegistryBean来启动RMI注册表,并声明一个RmiServiceExporter来暴露我们的RMI服务: ```xml ...
Spring RMI(Remote Method Invocation)是Spring框架对Java RMI技术的一种封装,使得在Spring环境中使用RMI变得更加简便。RMI是一种Java平台上的远程对象调用机制,它允许一个Java对象在不同的Java虚拟机之间调用另...
5. **Spring配置**:在Spring的配置文件中,可以使用`<bean>`标签定义RMI服务,并使用`<lookup-method>`标签来查找并注入远程对象。 ```xml <bean id="myServiceExporter" class="org.springframework.remoting...
虽然提供的压缩包子文件名列表`jn`没有提供具体的信息,但可以假设其中可能包含了Spring RMI配置的示例代码、测试用例或其他辅助资源,帮助开发者理解和实践Spring RMI的使用。 总结来说,Spring RMI是Spring框架...
2.4 启动RMI服务器:运行包含上述配置的Spring上下文,服务将自动发布到RMI注册表。 三、创建Spring RMIClient 3.1 引入远程服务:在客户端项目中,同样需要定义远程接口,并确保客户端可以访问服务器端的接口。 ...
具体到这个压缩包“springRMI”,我们可以推测它可能包含了以下几个部分: 1. **配置文件**:如`applicationContext.xml`,其中定义了Spring容器中的Bean,可能包括RMI服务的接口和实现。 2. **远程接口**:`.java`...
配置Spring RMI的基本步骤如下: 1. 定义服务接口和服务实现。 2. 在服务器端,创建一个`RmiServiceExporter`实例,将服务接口和服务实现注入,并配置RMI注册名和端口号。 3. 在服务器端的应用上下文配置文件中,...
Spring RMI在此基础上增加了配置简化、依赖注入等特性,使得远程服务的创建和调用更加便捷。 首先,我们来理解一下Spring RMI的核心概念: 1. **远程接口(Remote Interface)**:这是定义远程方法的接口,通常...
这个技术基于Java的RMI系统,但通过Spring的抽象层,简化了配置和使用过程,提高了可维护性和可测试性。 在Spring RMI中,主要涉及以下几个关键概念和知识点: 1. **接口定义**:首先,你需要定义一个远程服务接口...