java rmi 入门实例

(2009-06-16 16:07:55)

标签:

java

rmi

杂谈

分类: java-基础
   java rmi即java远程接口调用,实现了2台虚拟机之间的程序调用,这样,网络上的任何两台计算机就可以相互调用对方的程序(如果允许)。

    好了,下面就以经典的 Hello world作为例子讲解。开发rmi的步骤如下。
1、编写远程接口,远程接口实现类
2、编译
3、生成接口实现类存根
4、在服务器端启动rmiregistry命令
5、在服务端注册发布远程对象
6、在客户端获取远程对象
 
实例:
以下远程接口类为HelloRemote,实现类为HelloImpl,服务器端的发布类为RMIServer,客户端的调用类为RMIClient,为简单考虑,服务器和客户端均在同一台机器(所谓服务器和客户机,是两者运行在2个虚拟机进程下)。
一、编写类
1、远程接口类,需基础java.rmi.Remote接口,且方法抛出RMIException
 
public interface HelloRemote extends Remote{
public void sayHello() throws RemoteException;   
}
2、远程接口实现类,需继承UnicastRemoteObject
 
public class HelloImpl extends UnicastRemoteObject  implements HelloRemote{
public HelloImpl() throws RemoteException {
super();
}
public void sayHello() throws RemoteException {
System.out.println("Hello World!");
}
}
3、服务端类
服务端类用于发布远程对象
public class RMIServer {
public static void main(String[] args) throws RemoteException, MalformedURLException {
 
HelloRemote hello=new HelloImpl();
Naming.rebind("hello", hello);
}
}
4、客户端类
 
public class RMIClient {
public static void main(String args[]) throws MalformedURLException, RemoteException, NotBoundException{
                           System.setSecurityManager(new   RMISecurityManager());//如果服务器和客户端不再同一台机器要加这行
HelloRemote hello=(HelloRemote) Naming.lookup("hello");
   hello.sayHello();
}
}
远程接口类需同时在服务端和客户端存在
二、编译(注意以上类都没有包,这里主要是简化操作考虑)
客户端文件夹在 E:/client(简称client),服务端在E:/server(简称server)
分别编译以上4个文件。然后将Hello.class分别放到client和server下,将Client.class放到client下,Server.class放到server下,HelloImpl.class文件放到server文件夹下
三、生成存根和骨架
进入server文件夹在命令行下输入命令 rmic HelloImpl,将生成一个HelloImpl_Stub.class文件
将此文件复制到client目录下(server与client均该文件)
 
四、运行注册程序
在命令行中进入server文件夹 输入命令 rmiregistry,用于启动注册,在此前需设置classpath为E:/server,输入rmiregistry命令后将在server文件夹下生成一个
 
五、运行服务类
java Server
六、运行客户类
java Client
你将看到执行成功。
 
当你执行不顺利时,请看看下面:
1、最终执行时要3个命令行窗口,一个运行rmiregistry,一个运行Server,一个运行Clinet,先执行rmiregistry命令,接着执行java Server,最后执行java Client
2、客户端和服务端均要有存根(HelloImpl_Stub.class)和远程接口的定义,且包名要一致。
3、当运行服务器时,提示找不到HelloImpl_Stub,那是你没指定类路径,那请你在执行rmiregistry前设置classpath
4、出现AscessableException访问非法时,需要修改此略文件,在jre/security目录下的java.policy文件中(如果你有多个jre,你无法确定是哪个。那就全部修改吧),在该文件中添加如下内容
grant {
           permission java.net.SocketPermission "*:1024-65535",
                "connect,accept";
           permission java.net.SocketPermission "*:80","connect";
        };
 
5、指定端口,默认是1099,可以在运行rmiregistry时指定 如 rmiregistry 1098,也可以在Server.java中指定,如Registry.createRegistry(1088).
 
6、绑定地址的设置
简单形式Naming.bind("hello"),本机地址时才可以
完全形式Naming.bind("rmi://117.45.220.11:1099/RMI_Hello")

java rmi 入门实例的更多相关文章

  1. java远程调用rmi入门实例

    RMI是Java的一组拥护开发分布式应用程序的API.RMI使用Java语言接口定义了远程对象,它集合了Java序列化和Java远程方法协议(Java Remote Method Protocol). ...

  2. Java WebService入门实例

    Web Services是由企业发布的完成其特定商务需求的在线应用服务,其他公司或应用软件能够通过Internet来访问并使用这项在线服务. Web Service的关键技术和规则: 1.XML:描述 ...

  3. Java RMI 入门案例

    Java Remote Method Invocation(Java RMI) 是一个 Java API, 执行远程方法的调用,相当于 Remote Procedure Calls(RPC).Java ...

  4. java RMI入门指南

    感觉这篇文章不错,直接转了 RMI全称是Remote Method Invocation-远程方法调用,Java RMI在JDK1.1中实现的,其威力就体如今它强大的开发分布式网络应用的能力上,是纯J ...

  5. Java RMI 入门指南

    开通博客也有好些天了,一直没有时间静下心来写博文,今天我就把两年前整理的一篇关于JAVA RMI入门级文章贴出来,供有这方面需要的同学们参考学习. RMI 相关知识 RMI全称是Remote Meth ...

  6. Java AIO 入门实例(转)

    Java7 AIO入门实例,首先是服务端实现: 服务端代码 SimpleServer: public class SimpleServer { public SimpleServer(int port ...

  7. Java 注解入门实例 && 注解传參

    參考 概念:java提供了一种原程序中的元素关联不论什么信息和不论什么元数据的途径和方法 JDK内置系统注解: @Override 用于修饰此方法覆盖了父类的方法; @Deprecated 用于修饰已 ...

  8. java web 入门实例servlet篇(显示后台数据库列表,删除某一条记录并显示)

    编写过程中需要注意的问题: 1.建立eclipse动态web工程时,需要改写编译后class文件的位置,通常情况下是这个位置:/WebContent/WEB-INF/classes 2.配置的页面链接 ...

  9. JAVA RMI 实例

    下面我将介绍一个完整的实例,让初学者能快速体验RMI的功用. 分为以下四个步骤 1. 创建远程接口及声明远程方法(HelloInterface.java)2. 实现远程接口及远程方法(继承Unicas ...

随机推荐

  1. DELETE语句总结

    一.基本语句 1.SQL DELETE 语法 DELETE FROM table_name WHERE condition; 请注意 删除表格中的记录时要小心!注意SQL DELETE 语句中的 WH ...

  2. Oracle EBS PO退货失败

    无法读取例程 &ROUTINE 中配置文件选项 INV_DEBUG_TRACE 的值. 系统-配置文件-地点层 INC%调试%踪 是 select *  from po_interface_e ...

  3. docker如何创建支持SSH服务的镜像

    一般情况下,Linux系统管理员通过SSH服务来管理操作系统,但Docker的很多镜像是不带SSH服务的,那么我们怎样才能管理操作系统呢?在第一部分中我们介绍了一些进入容器的办法,比如用attach. ...

  4. bug管理工具

    1..禅道 禅道项目管理软件(简称:禅道)集产品管理.项目管理.质量管理.文档管理.组织管理和事务管理于一体,是一款功能完备的项目管理软件,完美地覆盖了项目管理的核心流程. 禅道的主要管理思想基于国际 ...

  5. NodeJS做中转服务器,转发接口

    搬家后的博客地址:http://www.cnblogs.com/shihaibin821/p/7683752.html

  6. 优化tableView加载cell与model的过程

    优化tableView加载cell与model的过程 效果图 说明 1. 用多态的特性来优化tableView加载cell与model的过程 2. swift写起来果然要比Objective-C简洁了 ...

  7. [翻译] UCZProgressView

    UCZProgressView UCZProgressView is a circular progress indicator with cool animations for image load ...

  8. webform ajax 上传文件+参数

    今天维护webform项目时,有个需求需要在一个ajax中上传excel和多个参数.网上没怎么找到答案,这边做个笔记. 首先上页面大体这样 <form id= "uploadForm& ...

  9. Oracle创建Rman备份专用账户

    有时会因为信息安全需要,创建备份所需的专用账户,不适用sys等用户.可以使用如下方式:create user rman_ycr identified by oracle;grant create se ...

  10. idea插件 总结 自认用比较不错的插件的总结

    1.Background Image Plus 设置你喜欢的图片,提升你编码逼格!还可以设置以轮播图的形式变换图片 还可以设置图片的透明度等现实的方式 2.CodeGlance 类似SublimeTe ...