`
8366
  • 浏览: 809298 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论
阅读更多

 

补充:发现了一个好的例子 放在附件中(RMIDemo.rar),我用这个例子做了一个 让远程 用户修改订单状态的业务(9.27)

概念:

 

Java远程方法调用,即Java RMI(Java Remote Method Invocation)是Java编程语言里,一种用于实现远程过程调用的应用程序编程接口。它使客户机上运行的程序可以调用远程服务器上的对象。远程方法调用特性使Java编程人员能够在网络环境中分布操作。RMI全部的宗旨就是尽可能简化远程接口对象的使用。

Java RMI极大地依赖于接口。在需要创建一个远程对象的时候,程序员通过传递一个接口来隐藏底层的实现细节。客户端得到的远程对象句柄正好与本地的根代码连接,由后者负责透过网络通信。这样一来,程序员只需关心如何通过自己的接口句柄发送消息。

接口的两种常见实现方式是:最初使用JRMP(Java Remote Message Protocol,Java远程消息交换协议)实现;此外还可以用与CORBA兼容的方法实现。RMI一般指的是编程接口,也有时候同时包括JRMP和API(应用程序编程接口),而RMI-IIOP则一般指RMI接口接管绝大部分的功能,以支持CORBA的实现。

最初的RMI API设计为通用地支持不同形式的接口实现。后来,CORBA增加了传值(pass by value)功能,以实现RMI接口。然而RMI-IIOP和JRMP实现的接口并不完全一致。

所使用Java包的名字是java.rmi。

 

开发第一个 RMI 程序:

1. 构造一个远程接口Hello:

package hello;


public interface Hello extends java.rmi.Remote
{ 
	//rmi应用程序必须继承自java.rmi.Remote
	String sayHello() throws java.rmi.RemoteException ; 
	//定义可以远程调用的接口
}

 

2. 完成server方程序,定义HelloImpl类实现Hello接口:

package hello;

import java.rmi.Naming;
import java.rmi.RMISecurityManager;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;



public class HelloImpl extends UnicastRemoteObject implements Hello 
{
	private static final long serialVersionUID = 1L;
	private String name;
	public HelloImpl (String s) throws java.rmi.RemoteException
   {
		super(); //调用父类的构造函数
		this.name = s;
   }
	public String sayHello() throws RemoteException 
	{
		return "你好,胡晓亮,第一个RMI程序成功了!"; 
		
	}
	public static void main(String[] args)
	{
		
		System.setSecurityManager ( new RMISecurityManager()); 
		try
		{
			HelloImpl obj = new HelloImpl("HelloServer"); 
			//生成一个HelloImpl的实例
			
			Naming.rebind("HelloServer", obj); 
			//将这个实例绑定到一个名字上
			System.out.println("HelloImpl created and bound in the registry to the name HelloServer");
		} 
		catch (Exception e)
		{
			System.out.println("HelloImpl.main: an exception occured:");
			e.printStackTrace(); //产生异常的话,打印出出错信息
		}
		
	}
}

 

server方生成一个远程对象并和一个可和客户对话的名称\"HelloServer\"绑定。Client端可以根据该名称寻找相应的远程对象,进而调用其远程方法。

3. 完成client方程序

package hello;
import java.rmi.Naming;
import java.rmi.RMISecurityManager;
public class HelloClient 
{
	public static void main(String args[])
	{
		System.setSecurityManager(new RMISecurityManager()); 
		//设置RMI需要的安全策略
		try
		{
			String remoteHost="169.254.11.186";
			String rmiServerPort="1099";
			String bindUrl = "rmi://"+remoteHost+":"+rmiServerPort+"/HelloServer"; 
			System.out.println("bindUrl:"+bindUrl);
			Hello obj = (Hello) Naming.lookup(bindUrl);
		
			//从服务端获得一个Hello的远程对象
			String message = obj.sayHello();
			//远程调用Hello的方法
			System.out.println(message);
			//将输出结果打印
		}
		catch(Exception e)
		{
			System.out.println("Hello client : an exception occured");
			e.printStackTrace();
		}
	}

}

 

  client利用java.rmi包中的Naming类的lookup()方法获得远程对象obj,然后调用其远程方法sayHello()获得字符串\"Hello World\",并输出到屏幕上。

要运行这几个程序,还有一些工作要做,这几个程序的文件名为Hello.java、HelloImpl.java、HelloClient.java,它们都被放置在的的d:\\hello目录下,在windows下,你需要在命令窗口中如此运行它们:

  1. Set CLASSPATH = %CLASSPATH%;d:\\

  2. 在d:\\hello下编译源代码:
    javac -d .. *.java

  3. 在生成端头和框架模块,首先把目录切换回d:\\
    rmic -d . hello.HelloImpl  //在这里我出错了,原因是我的path是C:\MinGW\bin开头,使用了这个rmic编译当然会出错,应该吧C:\Java\jdk1.5.0_07\bin 放在前面

  4. 在d:\\下运行RMI远程对象注册程序
    start rmiregistry

  5. 在d:\\下运行服务器程序
    java -Djava.security.policy=d:\hello\my.policy hello.HelloImpl

  6. 在d:\\下运行客户端程序
    java -Djava.security.policy=d:\hello\my.policy hello.HelloClient

  其中上面的步骤中5和6出现的my.policy是一个文件,这个文件和Java的安全机制有关,在这个程序中我们不需要安全限制,所以我们把权限设为都可以访问。my.policy如下:
  grant {
      permission java.security.AllPermission;
  };

  你一定要记得设置这个文件,否则RMI将出\"拒绝访问\"的错误。如果你想了解Java其他的安全机制,那么可以参考Java里有关security的资料。

  RMI属于Java高级技术的一种,通过本小节的学习,你应该已经对RMI有了一定的了解,分布式计算是一个很重要的技术,而Java在分布式计算方面有着很好的前景,以RMI为基础,Java将在分布式计算方面大有作为。

测试发现不能跨JVM调用,我估计是 my.policy  的问题,没有继续研究,哪个网友运行我的例子后 能解决这个问题麻烦给我留言,先谢谢了

 

 参考:

 

 http://www.zxbc.cn/html/20070419/5097.html

 

分享到:
评论

相关推荐

    分布式实验报告RMI.docx

    分布式实验报告 RMI.docx 本实验报告主要介绍了 Java RMI(Remote Method Invocation,远程方法调用)的基本概念和实现步骤。RMI 是一种分布式对象通讯机制,允许运行在一个 Java 虚拟机的对象调用运行在另一个 ...

    基于JAVA RMI的聊天室

    **基于JAVA RMI的聊天室** Java Remote Method Invocation(RMI)是Java平台提供的一种用于在分布式环境中调用远程对象的方法。在这个“基于JAVA RMI的聊天室”项目中,开发者利用RMI技术构建了一个简单的多用户...

    Rmi示例 Rmi代码示例

    RMI(Remote Method Invocation,远程方法调用)是Java平台中的一个重要特性,它允许Java对象在不同的Java虚拟机之间进行通信,实现分布式计算。RMI是Java开发分布式应用程序的基础,尤其在构建分布式服务和微服务...

    java RMI技术实现的网络聊天室

    Java RMI(Remote Method Invocation)技术是Java平台中用于分布式计算的一种机制,它允许一个Java对象调用远程计算机上的另一个Java对象的方法。在本案例中,“java RMI技术实现的网络聊天室”是一个使用RMI构建的...

    JAVA RMI 传输 SSL加密

    Java RMI (Remote Method Invocation) 是一种用于在Java应用程序之间进行远程通信的技术。为了提高RMI通信的安全性,我们可以使用SSL (Secure Sockets Layer) 或其后继者TLS (Transport Layer Security) 进行加密。...

    java_rmi.rar_RMI java_java.rmi

    Java RMI(Remote Method Invocation,远程方法调用)是Java平台提供的一种分布式计算技术,它允许Java对象在不同的网络环境中进行交互,就像它们在同一个进程内一样。RMI是Java在分布式系统领域的核心特性,极大地...

    RMI商品管理系统.zip

    《基于RMI的Java商品管理系统实现详解》 在IT领域,远程方法调用(Remote Method Invocation,简称RMI)是Java编程语言中一种强大的分布式计算技术。本项目“RMI商品管理系统”即利用了RMI特性,实现了商品信息的...

    java rmi 参考文档

    ### Java RMI (Remote Method Invocation) 概念与实践 #### 一、Java RMI简介 Java RMI(Remote Method Invocation)是一种允许调用不同Java虚拟机(JVM)上方法的机制。这些JVM可能位于不同的机器上,也可能在同一...

    RMI.rar_Java RMI_java.rmi_java.rmi.Remot_remote

    Java RMI(远程方法调用)是Java编程语言中的一项核心技术,自JDK 1.1版本起就被引入,用于构建分布式系统。RMI允许Java对象在不同的Java虚拟机(JVMs)之间进行交互,仿佛这些对象是在同一台机器上一样。这种技术的...

    分布式Java RMI实现的学生成绩管理系统

    分布式Java RMI(Remote Method Invocation)技术是一种在Java平台中实现分布式计算的重要工具,它允许一个对象调用在不同 JVM(Java Virtual Machine)上的另一个对象的方法。在这个项目中,我们利用RMI构建了一个...

    javaRMI反序列化漏洞验证工具

    Java RMI(Remote Method Invocation,远程方法调用)是一种Java技术,允许在分布式环境中执行远程对象的方法。这个技术的核心是序列化和反序列化过程,它使得对象可以在网络上进行传输。然而,这个特性也可能引入...

    synaptics s3202 寄存器手册以及RMI4手册

    《synaptics s3202 寄存器手册》与《RMI4手册》是两个重要的技术文档,它们在IT行业中,特别是嵌入式系统和触摸屏控制器领域,具有非常高的参考价值。这两个手册详细介绍了Synaptics公司的S3202芯片以及RMI4(Remote...

    使用RMI远程连接JVM.用JMX获取JVM的参数

    在Java世界中,远程方法调用(Remote Method Invocation, RMI)和Java管理扩展(Java Management Extensions, JMX)是两个强大的工具,用于管理和监控分布式系统。本文将深入探讨如何利用RMI远程连接到Java虚拟机...

    java rmi java rmi

    根据提供的文件信息,我们可以深入探讨Java RMI(Java Remote Method Invocation)的相关知识点,包括其概念、原理、体系结构以及一个具体的示例。 ### RMI的概念 RMI是一种Java技术,它允许开发者创建分布式应用...

    Synaptics_RMI3_Specification.zip_RMI3_Synaptics_rmi4_s3508 _spec

    《Synaptics RMI3 触摸芯片编程详解——基于S3508》 Synaptics公司作为全球领先的触控解决方案供应商,其RMI(Remote Input Interface)系列芯片在业界有着广泛的应用。RMI3是Synaptics推出的一种新型接口,而S3508...

    spring RMI 服务(自动把service发布为RMI服务)

    Spring RMI服务是一种在Java平台上实现远程方法调用(Remote Method Invocation, RMI)的技术,它允许分布式系统中的不同组件通过网络进行通信。在Spring框架的支持下,我们可以更方便地将服务发布为RMI服务,使得...

    RMI原理及应用详解

    **RMI原理及应用详解** 远程方法调用(Remote Method Invocation,简称RMI)是Java平台提供的一种分布式计算技术,允许在不同的Java虚拟机(JVM)之间进行对象方法的透明调用。RMI的核心思想是使Java对象能够跨越...

    JMX以RMI方式连接的场景示例

    JMX以RMI方式连接的场景示例 JMX(Java Management Extensions)是一种Java技术,用于管理和监控应用程序。JMX框架主要由三部分组成:MBean(Managed Bean)、Agent(代理)和Client(客户端)。在本场景中,我们将...

Global site tag (gtag.js) - Google Analytics