`
yanchengxiaotubao
  • 浏览: 41682 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

RMI - HelloWorld

阅读更多

Java RMI - Remote Method Invocation

 

Java RMI 是一种机制,能够让【A】虚拟机上对象调用【B】虚拟机上对象的方法。

 

Java RMI不是什么新技术(在Java1.1的时代都有了),但却是是非常重要的底层技术。
大名鼎鼎的EJB都是建立在RMI基础之上的,现在还有一些开源的远程调用组件,其底层技术也是RMI。

 

package RMI.hello;

import java.rmi.Remote;
import java.rmi.RemoteException;

/**
 * 定义一个远程接口,必须继承Remote接口。
 * 其中需要远程调用的方法必须抛出RemoteException
 * @author Administrator
 *
 */
public interface IHello extends Remote {
	
	public String helloWorld() throws RemoteException;
	
	public String sysHelloToSomeBody(String someBodyName) throws RemoteException;
}
package RMI.hello;

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

public class HelloImpl extends UnicastRemoteObject implements IHello {
	
	private static final long serialVersionUID = 7739737989785929846L;

	protected HelloImpl() throws RemoteException {
		super();
	}

	@Override
	public String helloWorld() throws RemoteException {
		return "Hello World!";
	}

	@Override
	public String sysHelloToSomeBody(String someBodyName) throws RemoteException {
		return "你好" + someBodyName + "!";
	}

}
 
package RMI.hello;

import java.net.MalformedURLException;
import java.rmi.AlreadyBoundException;
import java.rmi.Naming;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;

/**
 * 创建RMI注册表
 * 启动RMI服务
 * 将远程对象注册到RMI注册表中
 * 
 * @author Administrator
 *
 */
public class HelloServer {

	public static void main(String[] args) {
		try {
			// 创建RMI注册表 - 本地主机上的远程对象注册表Registry的实例,并指定端口为8888
			// java默认为1099, 缺少注册表创建,则无法绑定对象到远程注册表上
			LocateRegistry.createRegistry(8888);
			
			// 创建远程对象
			IHello rhello =  new HelloImpl();
			
			// 把远程对象注册到RMI注册服务器上,命名为RHello
			// 绑定的URL标准格式为:rmi://host:port/name
			// 协议名可以省略
			Naming.bind("rmi://localhost:8888/RHello", rhello);
			
			System.out.println(">>>>>INFO:远程IHello对象绑定成功!"); 
		} catch (RemoteException e) {
            System.out.println("创建远程对象发生异常!");
            e.printStackTrace();
        } catch (AlreadyBoundException e) {
            System.out.println("发生重复绑定对象异常!");
            e.printStackTrace();
        } catch (MalformedURLException e) {
            System.out.println("发生URL畸形异常!");
            e.printStackTrace();
        } 
	}

}
 
package RMI.hello;

import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;

/**
 * 客户端测试,在客户端调用远程对象上的方法,并返回结果
 * @author Administrator
 *
 */
public class HelloClient {

	public static void main(String[] args) {
		try {
			// 在RMI注册器中查找RHello的对象,并调用其方法
			IHello rhello = (IHello)Naming.lookup("rmi://localhost:8888/RHello");
			System.out.println(rhello.helloWorld());
			System.out.println(rhello.sysHelloToSomeBody("盐城小土包"));
		} catch (NotBoundException e) {
            e.printStackTrace();
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (RemoteException e) {
            e.printStackTrace();  
        } 
	}

}
 

 

缺点:

  • 太过于依赖服务器IP地址和端口
  • Java语言程序的调用 - 两端程序必须是java语言实现的

解决:

  1. 通过DNS来解决
  2. 通过封装将IP暴露在程序之外 - 属性文件 or 配置文件

 

 

分享到:
评论

相关推荐

    RMI测试helloWorld

    RMI-iiop版HelloWorld,dos命令行下执行。感谢http://lavasoft.blog.51cto.com/62575/240666和http://blog.csdn.net/konglong_c/article/details/4972447,希望给大家提供帮助。

    rmi 的hello world 例子

    NULL 博文链接:https://dannyhz.iteye.com/blog/2300802

    java 网络编程 代码集合

    07-RMI-HelloWorld则是一个简单的RMI入门示例,帮助初学者理解RMI的工作原理。 3. **SMTP(Simple Mail Transfer Protocol)**:12-SMTP-Example是使用JavaMail API发送邮件的示例。SMTP协议定义了电子邮件的传输...

    java rmi HelloWorld版(源码)

    这个"java rmi HelloWorld版(源码)"的压缩包文件提供了一个简单的RMI应用示例,帮助开发者了解和学习RMI的基本原理和使用。 RMI的核心概念包括: 1. **远程接口(Remote Interface)**:这是定义远程方法的接口...

    cobra-rmi-iiop:Cobra协议中的分布式对象范例和远程方法调用的示例

    眼镜蛇RMI-IIOP示例应用程序 该存储库是分布式应用程序中的和的概念证明(POC)。 例如 , , 和 api。 它是协议的替代方法。 该应用程序允许您使用spring gui和命令行管理电话簿。 关于RMI-IIOP RMI-IIOP (称为...

    JMX HelloWorld Download

    **标题解析:** "JMX HelloWorld Download" 指的是一个关于Java Management Extensions(JMX)的简单示例,可能是用于教学或演示如何在Java应用中使用JMX技术。"Download"表明这是一个可以下载的资源,可能包含了...

    elk-docker-node-hello-world

    监控 一个用于演示ELK的多节点节点应用程序的简单示例。 建造 ./build-all.sh ...docker rmi -f `docker images -qa` 加载脚本 index.js脚本可用于施加负载- node index.js <url> <delay> <randomisation>

    dwr.jar编写helloworld

    <create class="com.example.HelloWorld" javascript="HelloWorld"> ``` 这段配置表示允许JavaScript创建一个名为`HelloWorld`的对象,并可以调用其中的`getName`方法。 3. **创建Java类**:创建一个名...

    spring2.5 -3.0 hibernate3.3 jar包说明

    支持远程调用功能,例如EJB、JMS、RMI、Hessian、Burlap、HttpInvoker、JAX-RPC等。 10. **spring-support.jar** 提供了一些额外的功能支持,如缓存管理、定时任务、邮件服务等。 11. **spring-web.jar** ...

    RMI 简单示例-Java Remote Methods Invocation

    return "Hello, World!"; } } ``` - **注册远程对象**:在服务器端,实例化`HelloWorldImpl`,然后将其注册到Registry,绑定到特定的名字,如`"HelloServer"`。 ```java HelloWorldInterface hello = new ...

    DWR入门教程之HelloWorld

    **DWR(Direct Web Remoting)入门教程之HelloWorld** DWR是一款开源的Java库,它允许在浏览器和服务器之间进行实时的、双向的通信,实现了JavaScript与Java之间的直接调用,极大地简化了Web应用程序的开发。DWR的...

    JAVA RMI实现程序实例

    public class HelloWorldImpl extends UnicastRemoteObject implements HelloWorld { public HelloWorldImpl() throws RemoteException { super(); } @Override public String sayHello() { return "Hello, ...

    Dubbo入门之HelloWorld

    本文将基于"Dubbo入门之HelloWorld"的主题,深入探讨如何从零开始学习并实践Dubbo的基本用法。 首先,我们需要了解什么是RPC(Remote Procedure Call)。RPC是一种使程序可以调用另一个系统中的函数或方法的技术,...

    Hessian HelloWorld篇

    5. **"HelloWorld"示例**:具体展示了如何创建一个简单的"HelloWorld"服务,例如定义一个返回字符串的`sayHello`方法,然后在客户端调用这个方法并打印出结果。 6. **源码分析**:博主可能深入到Hessian的源码层面...

    RMI基础代码小程序

    在"rmi_helloworld"这个小程序中,可能包含了以下步骤: 1. 定义一个远程接口,声明远程方法。 2. 创建实现远程接口的类,并实现远程方法。 3. 在服务器端启动RMI注册表,将远程对象导出并注册到注册表中。 4. 在...

    Java RMI 简单示例

    客户端程序`Helloworld`通过`Naming.lookup()`方法从RMI注册表中查找并获取`HelloIn`接口的实例。`lookup`方法接受一个URL形式的字符串,指定了远程对象的名称和主机。然后,客户端可以像操作本地对象一样调用`...

    RMI相关知识及其实例

    在这个例子中,服务器创建了一个实现HelloWorld接口的远程对象,并将其绑定到RMI注册表。客户端则通过RMI注册表查找并调用了远程对象的sayHello方法。 总结,RMI是Java平台中强大的分布式计算工具,它简化了跨JVM的...

    Java RMI Tutorial.pdf

    #### 三、RMI HelloWorld 示例分析 为了更好地理解RMI的工作原理,我们可以通过一个简单的HelloWorld示例来进行分析。 ##### 1. 文件结构与目录设置 在这个示例中,所有的Java源文件都位于`example.hello`包下,...

    RMI demo

    System.out.println(remote.hello("World")); } catch (Exception e) { e.printStackTrace(); } } } ``` 以上就是RMI的基本原理和使用方法。在实际开发中,可以通过阅读"RMI 初步研究报告.doc"文档,深入了解...

Global site tag (gtag.js) - Google Analytics