博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
类对象RMI的简单实现
阅读量:5986 次
发布时间:2019-06-20

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

发一下牢骚和主题无关:

    第一次用使RMI实现java分布式,利用一个单简的例子停止试测。

    首先要需一个实现了Remote的接口,这个接口供提近程对象的法方集

    这个接口如下:

package com.hello;import java.rmi.Remote;import java.rmi.RemoteException;import java.util.Date;public interface HelloServer extends Remote {	public String echo(String msg)throws RemoteException;	public Date getTime()throws RemoteException;}

    在客户端和务服器上都应该有这样一个接口,只是可以用使的务服。

    然后再务服端要需一个实现了HelloServer的类,并使其成为够能供提近程务服的近程对象,这里通过继承UnicastRemoteObject使其出导近程对象:

package com.hello;import java.rmi.RemoteException;import java.rmi.server.UnicastRemoteObject;import java.util.Date;public class HelloServerImpl extends UnicastRemoteObject implements HelloServer{	private String name;	protected HelloServerImpl(String name) throws RemoteException 	{		this.name=name;	}	public String echo(String msg) throws RemoteException	{		System.out.println("用调了echo()法方");		return "echo "+msg+" from "+name;	}	public Date getTime() throws RemoteException 	{		System.out.println("用调了getTime()法方");		return new Date();	}}

    接上去编写务服端程序

package com.hello;import javax.naming.Context;import javax.naming.InitialContext;public class SimpleServer {	public static void main(String[]args)	{		try		{			HelloServer service1=new HelloServerImpl("service1");			HelloServer service2=new HelloServerImpl("service2");						Context namingContext=new InitialContext();						namingContext.rebind("rmi://localhost:1099/HelloServer1",service1);			namingContext.rebind("rmi://localhost:1099/HelloServer2",service2);			System.out.println("注册了两个对象");		}		catch(Exception e)		{			e.printStackTrace();		}	}}

    接上去编写客户端程序

    每日一道理
“一年之计在于春”,十几岁的年纪,正是人生的春天,别辜负了岁月老人的厚爱与恩赐。行动起来,播种梦想吧!
package com.hello;import javax.naming.Context;import javax.naming.InitialContext;import javax.naming.NameClassPair;import javax.naming.NamingEnumeration;public class SimpleClient {	public static void main(String[]args)	{		String url="rmi://localhost:1099/";		try		{			Context namingContext=new InitialContext();			//取得近程对象的存根对象			HelloServer service1=(HelloServer)namingContext.lookup(url+"HelloServer1");			HelloServer service2=(HelloServer)namingContext.lookup(url+"HelloServer2");			Class stubClass=service1.getClass();			//试测存根类所属的类			System.out.println("service1是 "+stubClass.getName());			//试测存根类实现的接口			Class[] interfaces=stubClass.getInterfaces();			for(int i=0;i
e=namingContext.list("rmi:"); while(e.hasMore()) { System.out.println(e.next().getName()); } } catch(Exception e) { e.printStackTrace(); } }}

    在行运程序之前要需进入到HelloServer的bin目录下开启rmiregistry

    命令:start rmiregistry

    如果没有错误,就会弹出新的黑框;

    接上去客户端还要需一个存根类,为了取得它要需在务服端的bin目录下用如下命令:

    rmic com.hello.SimpleServer

    这个命令注意:SimpleServer是完全的类名,并且没有.class后缀

    如果功成的话会生产一个HelloServerImpl_Stub.class,将其与客户端class文件放在一同。

    上去就够能行运程序了。

    首先行运务服端,行运结果如下:

    类和对象

    然后行运客户端,行运结果如下:

    类和对象

    而此时的务服端态状如下:

    类和对象

    

    说明客户端对近程对象的法方用调其执行进程确实是在务服端停止的。

    

    

文章结束给大家分享下程序员的一些笑话语录: 人在天涯钻,哪儿能不挨砖?日啖板砖三百颗,不辞长做天涯人~

你可能感兴趣的文章
我的友情链接
查看>>
2.3.1.shell awk 入门
查看>>
snmp在网络中的应用
查看>>
git 使用过程中问题记录
查看>>
SDN in Action: Deploy VXLAN with MP-BGP EV_P_N
查看>>
Maven学习总结(八)——使用Maven构建多模块项目
查看>>
Docker镜像与容器命令
查看>>
Java培训-日期类
查看>>
项目范围管理论文提纲
查看>>
python给qq发邮件
查看>>
关于mysql的 qps tps
查看>>
bootstrap datetimepicker 添加清空按钮
查看>>
Json学习总结(1)——Java和JavaScript中使用Json方法大全
查看>>
Myeclipse优化配置
查看>>
四大Java EE容器之简单比较
查看>>
我的友情链接
查看>>
oracle 11gR2 RAC存储迁移
查看>>
<org manual>翻译--2.8 抽屉
查看>>
脚本部署lnmp环境
查看>>
swift--button的简单实用
查看>>