博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
服务调用RMI远程方法调用示例【基于Spring配置文件】
阅读量:5863 次
发布时间:2019-06-19

本文共 2834 字,大约阅读时间需要 9 分钟。

发一下牢骚和主题无关:

        上篇博客,分析了RMI远程方法调用示例,通过示例,可以总结到,其实,也就是被调用则宣布服务,称谓服务端,自动调用则是调用服务,称谓客户端。

         

        既然是远程调用,因此,服务器端要供给宣布的标签,让别人能够找到你这个服务对象,比如webservice,服务端要宣布成wsdl地址,客户端通过wsdl可以找到此服务对象。服务器一旦宣布服务标签,客户端只要根据此便可。

        所以无论何种方法实现分布式调用,或使用何种协议,基本步调或基本思想是想通的。

    

        上篇博客使用普通的java项目,来宣布或调用服务。我们也晓得,硬编码这种方法,一旦改动则需重新编译部署,却不及xml热部署来的快。

        这篇博客,则使用spring来管理rmi宣布或调用服务配置信息,比如宣布的地址或宣布的类。

    

        服务端:

        接口部份:【普通接口】

    

package com.rmi.server;import com.entity.Person;public interface Server {	String helloWorld(String name);	Person getPerson(String name, int age) ;}

   实现部份:【普通实现】

    

package com.rmi.server;import com.entity.Person;//继承该类, UnicastRemoteObject,暴露远程服务public class ServerImpl implements Server {	@Override	public String helloWorld(String name) {		// TODO Auto-generated method stub		return name + ",helloworld";	}	@Override	public Person getPerson(String name, int age){		// TODO Auto-generated method stub		return new Person(name, age);	}}

  若其中传递实体类,仍然需要实现序列化。

    

package com.entity;import java.io.Serializable;public class Person implements Serializable {	/**	 * 	 */	private static final long serialVersionUID = 1L;	public String getName() {		return name;	}	public void setName(String name) {		this.name = name;	}	public int getAge() {		return age;	}	public void setAge(int age) {		this.age = age;	}	private String name;	private int age;	// 无参数的构造器	public Person() {	}	// 初始化全体属性的构造器	public Person(String name, int age) {		this.name = name;		this.age = age;	}}

  服务端spring配置文件:其中有响应的注释

    

    每日一道理
“上下五千年,龙的看火不灭;古有愚公志,而今从头越…… ”站在新世纪的门槛上,我们的追求就是让祖国灿烂的喜悦飞扬在美好的明天……

  我们使用服务器启动,而不是手动加载配置文件,web.xml

    

rmiTestServerSpring
contextConfigLocation
classpath:com/config/applicationContext-*.xml
org.springframework.web.context.ContextLoaderListener

 

        ok,服务器启动后,则便可读取配置文件,然后宣布服务。

        则不用像第一篇博客中在main方法中注册端口以及宣布jndi名称以及响应的类。

        

        客户端一样使用spring文件:

    

   我们客户端使用java项目,而不是web项目,则直接加载配置文件如下:

    

package com.client;import org.springframework.context.support.ClassPathXmlApplicationContext;import com.entity.Person;import com.rmi.server.Server;public class TestSpringClient {  public static void main(String[] args) {	  ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext-beans.xml");         Server testrmiSpring = (Server) context.getBean("testrmiSpring");        System.out.println(testrmiSpring.helloWorld("测试rmi"));      Person person=testrmiSpring.getPerson("lhy", 22);      System.out.println(person.getName());}}

       这样,就可以解决改动重新编译问题了,这就是xml的优点。其中rmi方法,jdk1.5以后,不需要使用rmi命令来生成stub和skeleton类,而是动态自动生成。

       倘若服务端,不愿使用服务器,则可以向客户端如此手动加载配置文件,然后便可宣布服务。

        

文章结束给大家分享下程序员的一些笑话语录: 看新闻说中国输入法全球第一!领先了又如何?西方文字根本不需要输入法。一点可比性都没有。

转载地址:http://mxunx.baihongyu.com/

你可能感兴趣的文章
QT 获取当前线程ID
查看>>
模拟客户端登陆(基于TCP的Socket编程)
查看>>
文本处理及正则表达式
查看>>
老男孩IT教育在线3期的学习自我介绍与决心书
查看>>
Avaya话机配置文件46xxsettings.txt设置心得
查看>>
单元测试(二)-桩对象
查看>>
Rancher Labs亮相SCALE15x:三大演讲福利放送
查看>>
IIS 6.0远程代码执行漏洞(CVE-2017-7269)
查看>>
命令历史
查看>>
awk学习笔记(二)
查看>>
从运维角度看中大型网站架构的演变之路
查看>>
Js实现中国公民身份证号码有效性验证
查看>>
Spring Cloud云服务架构 - 企业分布式微服务云架构构建
查看>>
el表达式
查看>>
Linux第二周学习笔记(9)
查看>>
Angular学习心得——directive的bindToController选项
查看>>
使用Haproxy搭建Web群集(内含源码包)
查看>>
自动化运维利器之——SaltStack(一)
查看>>
Samba服务
查看>>
互融云区块链合约存证:规避风险、溯源合约!
查看>>