`

Java rmi小例子

    博客分类:
  • JAVA
 
阅读更多

1.创建接口,继续Remote接口

package com.rmi.server;

import java.rmi.Remote;
import java.rmi.RemoteException;
import java.util.Date;

public interface HelloService extends Remote {

	public String echo(String msg) throws RemoteException;

	public Date getDate() throws RemoteException;

}

 

2.创建服务类,继续Remote接口

package com.rmi.server;

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

public class HelloServiceImpl extends UnicastRemoteObject implements HelloService {

	private static final long serialVersionUID = 1L;

	String name;

	protected HelloServiceImpl(String name) throws RemoteException {
		this.name = name;
	}

	@Override
	public String echo(String msg) throws RemoteException {
		System.out.println(name + ":调用echo()方法");
		return "echo:" + msg + " from " + name;
	}

	@Override
	public Date getDate() throws RemoteException {
		System.out.println(name + ":调用getDate()方法");
		return new Date();
	}

}

 

3.绑定服务

package com.rmi.server;

import java.rmi.registry.LocateRegistry;

import javax.naming.Context;
import javax.naming.InitialContext;

public class SimpleServer {

	public static void main(String[] args) {
		try {
			HelloService service1 = new HelloServiceImpl("service1");
			HelloService service2 = new HelloServiceImpl("service2");

			Context namingContext = new InitialContext();
			// 之前一直报javax.naming.ServiceUnavailableException,加上此方法后才正常
			LocateRegistry.createRegistry(1099);
			namingContext.rebind("rmi://127.0.0.1:1099/HelloService1", service1);
			namingContext.rebind("rmi://127.0.0.1:1099/HelloService2", service2);
			System.out.println("服务器启动...");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

 

4.客户端调用

package com.rmi.client;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NameClassPair;
import javax.naming.NamingEnumeration;

import com.rmi.server.HelloService;

public class SimpleClient {

	public static void showRemoteObjects(Context namingContext) throws Exception {
		NamingEnumeration<NameClassPair> e = namingContext.list("rmi:");
		while (e.hasMore()) {
			System.out.println(e.next().getName());
		}
	}

	public static void main(String[] args) {
		String url = "rmi://127.0.0.1:1099/";
		try {
			Context namingContext = new InitialContext();
			HelloService service1 = (HelloService) namingContext.lookup(url + "HelloService1");
			HelloService service2 = (HelloService) namingContext.lookup(url + "HelloService2");

			Class stubClass = service1.getClass();
			System.out.println("service1 是" + stubClass.getName() + "的实例");
			Class[] interfaces = stubClass.getInterfaces();
			for (int i = 0; i < interfaces.length; i++) {
				System.out.println("存根类实现了" + interfaces[i].getName() + "接口");
			}
			System.out.println(service1.echo("测试"));
			System.out.println(service1.getDate());
			System.out.println(service2.echo("测试2"));
			System.out.println(service2.getDate());

			showRemoteObjects(namingContext);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

 

5.输出

服务端:

服务器启动...
service1:调用echo()方法
service1:调用getDate()方法
service2:调用echo()方法
service2:调用getDate()方法

 

客户端:

service1 是$Proxy0的实例
存根类实现了java.rmi.Remote接口
存根类实现了com.rmi.server.HelloService接口
echo:测试 from service1
Tue Jul 29 16:14:34 CST 2014
echo:测试2 from service2
Tue Jul 29 16:14:34 CST 2014
HelloService1
HelloService2

 

6.LocateRegistry.createRegistry(int port)

      java.rmi包中提供了类java.rmi.registry.LocateRegistry,用于获取名字服务或创建名字服务.调用LocateRegistry.createRegistry(int  port)方法可以在某一特定端口创建名字服务,从而用户无需再手工启动rmiregistry.此外,LocateRegistry.getRegistry(String  host,int  port)方法可用于获取名字服务.

 

 如果不写LocateRegistry.createRegistry(int port),也可以运行命令start rmiregistry [port]启动注册表,默认1099端口

分享到:
评论

相关推荐

    JAVA RMI简单例子

    这个"JAVA RMI简单例子"旨在帮助我们深入理解RMI的基本原理和实现步骤。 RMI的核心概念包括远程接口、远程对象和RMIC编译器。首先,我们需要定义一个远程接口,该接口声明了可以在远程服务器上执行的方法。这些方法...

    java RMI简单例子

    以下是对"java RMI简单例子"的详细解释: 1. **RMI的基本概念**: - **远程对象**:在RMI中,一个对象如果可以在不同的JVM上执行其方法,那么就被称为远程对象。 - **远程接口**:定义远程对象需要实现的接口,...

    一个完整的Java RMI通讯的例子

    通过这个完整的Java RMI通信例子,我们可以学习如何在实际项目中利用RMI来构建分布式系统,提升应用的可扩展性和灵活性。同时,理解RMI的工作原理也有助于我们更好地设计和实现其他分布式技术,如EJB、Web服务等。

    java RMI入门例子

    这个"java RMI入门例子"将带你深入理解RMI的工作原理和主要组件。 RMI的核心概念包括: 1. **远程接口**:这是定义远程方法的接口,通常继承自java.rmi.Remote。这些方法声明抛出java.rmi.RemoteException,表示...

    java RMI 例子

    通过学习和实践这个RMI例子,我们可以深入理解Java的分布式编程能力,这对于开发大型企业级应用或者分布式系统来说是非常有价值的。同时,了解RMI的工作原理也有助于我们更好地掌握其他类似技术,如JDBC、JNDI等。

    Java RMI的简单例子

    ### Java RMI基础知识与示例解析 #### 一、RMI简介 远程方法调用(Remote Method Invocation,简称RMI)是Java平台提供的一种用于实现分布式应用的技术。它允许对象在不同的JVM之间通过网络相互调用对方的方法,就...

    java rmi java rmi

    根据提供的文件信息,我们可以深入探讨Java RMI(Java Remote Method Invocation)的相关知识点,包括其概念、原理、体系结构以及一个具体的示例。...这个例子展示了如何利用RMI技术来构建分布式应用程序。

    JAVA RMI 实例

    java rmi小例子源代码 ,运行Reg.java ,再执行Client客户端代码就能看效果。如果在不同jvm下执行,注意接口定义包路径客服端和服务端必须保持一致。 客服端包含文件有服务端接口的定义文件。

    JavaRMI示例程序

    我的博客《Java中的RMI(远程方法调用)》的示例代码

    通过Java RMI实现远程调用的一个简单例子

    这个简单的例子将引导我们了解如何利用Java RMI实现远程调用。 首先,我们要创建远程接口。在Java RMI中,远程接口是一个实现了`java.rmi.Remote`接口的Java接口。接口中声明的方法将在客户端调用,实际上会在...

    JavaRMI.pdf

    Java RMI(Remote Method Invocation)是Java编程语言中用于实现远程过程调用的一种技术。它允许运行在客户机上的程序调用位于远程服务器上的对象的方法,从而实现分布式计算。RMI的核心思想是通过接口隐藏底层网络...

    Java RMI 简单示例

    Java RMI(Remote Method Invocation,远程方法调用)是Java平台提供的一种用于分布式计算的技术,它允许一个Java对象调用另一个在不同 JVM(Java虚拟机)上的对象的方法。这个简单的示例展示了如何创建一个基本的...

    spring rmi 小例子

    Spring Remote Method Invocation (RMI) 是Java平台上的一个远程对象调用框架,它允许你在分布式环境中调用对象...通过理解并实践这个小例子,你将能够更好地掌握Spring RMI的用法,为构建更复杂的分布式系统打下基础。

    Spring RMI小例子

    在这个"Spring RMI小例子"中,我们将深入理解Spring如何简化RMI的使用,以及如何通过它实现跨网络的交互。 首先,RMI允许Java对象在不同的JVM之间进行通信,仿佛它们都在同一个进程中运行。Spring通过提供自动注册...

    java rmi HelloWorld版(源码)

    Java RMI,全称为Remote Method Invocation,是Java平台上的一个标准API,用于实现分布式计算,使得在不同Java虚拟机(JVM)上的...通过这个简单的例子,你可以理解RMI的工作机制,并为更复杂的分布式系统打下基础。

    Java RMI远程方法调用详解-例子代码

    这个简单的例子展示了RMI的基本使用方式。实际应用中,可能会涉及到更复杂的网络交互、多线程、安全性控制等话题。理解RMI的工作原理和实践,对于开发分布式Java应用至关重要。同时,由于RMI依赖于Java序列化,因此...

    JAVA RMI 传输 SSL加密

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

    SpringRMI小例子

    在这个"SpringRMI小例子"中,我们将深入探讨如何利用Spring框架来增强RMI的功能,使其更加灵活和易于管理。 首先,我们需要理解Spring框架在RMI中的角色。Spring提供了对RMI的高级抽象,通过其`org.springframework...

    rmi.rar_Java RMI_RMI java_RMI policy.all_rmi

    描述中提到的"java rmi例子"表明其中可能包含了一个或多个实际的RMI应用实例,这对于学习和理解RMI的工作原理非常有帮助。 首先,让我们详细了解Java RMI的核心概念和组件: 1. **远程接口(Remote Interface)**...

    Java RMI 例子 和一些常见问题

    Java Remote Method Invocation(RMI)是Java平台中用于...通过这个简单的例子,你可以了解到如何创建一个基本的RMI应用程序。在实际项目中,RMI可以与其他技术(如EJB、Spring框架)结合,构建更复杂的分布式系统。

Global site tag (gtag.js) - Google Analytics