`
8366
  • 浏览: 802404 次
  • 性别: 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简单实例RMI简单实例

    RMI简单实例RMI简单实例RMI简单实例

    分布式实验报告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.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特性,实现了商品信息的...

    RMI.rar_Java RMI_java.rmi_java.rmi.Remot_remote

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

    rmi的实例rmi的实例rmi的实例

    远程方法调用(Remote Method Invocation, RMI)是Java平台上的一个重要特性,它允许一个Java对象在一台机器上执行另一个网络中的Java对象的方法。RMI是分布式计算的基础,使得Java程序能够跨越网络边界,实现组件...

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

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

    RMI规范 RMI详细介绍

    **RMI规范与详解** Java Remote Method Invocation (RMI)是一种强大的技术,它允许程序员创建分布式应用程序,使得不同Java虚拟机(JVM)之间的对象能够相互通信,即使它们位于不同的计算机上。RMI的核心概念是远程...

    javaRMI反序列化漏洞验证工具

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

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

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

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

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

    RMI原理及应用详解

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

    Spring-RMI (RMI调用, HTTP调用)

    Spring通过提供RMI集成,简化了RMI服务的创建和调用。以下是一些关键点: 1. **服务接口定义**:首先,你需要定义一个远程服务接口,这个接口将包含你希望在远程进程中执行的方法。 2. **服务实现**:接着,创建该...

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

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

    JAVA RMI测试代码

    Java Remote Method Invocation (RMI) 是Java平台提供的一种分布式计算技术,它允许Java对象在不同的网络环境中进行交互,实现远程方法调用。本压缩包文件"rmi-code"包含了一个完整的RMI测试代码示例,适合在Linux和...

    RMI远程方法调用RMI远程方法调用

    RMI远程方法调用是Java平台上的一个关键特性,它允许Java对象在不同的JVM之间进行通信,从而实现分布式计算。RMI的核心理念是让开发者能够像调用本地方法一样调用远程对象的方法,简化了分布式系统的设计和实现。 *...

Global site tag (gtag.js) - Google Analytics