/********************************************************************************
* 运行RMI的基本步骤以及注意事项
* 1. 最好是所有的Java文件都在一个包里面,
* 2. 在对Java文件进行编译的时候最好要把里面的包名去掉
* 3. 先生成.class文件
* 4. 对于实现服务器端的接口的文件,我们在它所在的目录中用 “rmic 文件名” 来生成stub文件
* 5. 下面的步骤我们开始正式运行: (1) .先加入Java的策略文件: 在cmd中使用如下命令:
* rmiregistry -J-Djava.security.policy=java.policy启动注册表
* (2) .在DOS下运行 rmiregistry 这个命令是开启RMI的注册服务
* (3) .运行服务端的程序 ,使用Java命令,如果这个时候出现了错误的话那就絮语奥用下面的命令来制定stub文件的位置:
* java.exe -Djava.rmi.server.codebase=file:/stub文件的目录/ 服务器端主程序
* 例如“ java.exe -Djava.rmi.server.codebase=file:/E:\MIS_Interface\momo\TestEasy\classes/ RMI_Server”
* (4). 使用Java命令启动客户端的主程序
* 这样就OK了
*
*其中客户端要有接口和stub文件的.class文件
*例如:服务器端的接口类是Product,它扩展了Remote接口
* 其中的接口的实现类是ProductImpl。它实现了Product中定义的方法
* 其中服务器端的主程序是ProductServer,它用来启动和注册上面的实现类
* 而客户端的主程序是ProductClient,
* 这个时候服务器端目录下面应该有的文件是: Product.class ProductImpl.class ProductServer.class 以及 ProductImpl_stub.class
* 而客户端目录下面应该有的文件是: Product.class ProductClient.class 以及 ProductImpl_stub.class
* 这里,上面的rmic 名利生成stub文件就是: rmic ProductImpl,这样就可以生成ProductImpl_stub.class文件了
* 下面的是四个文件的实现程序代码:
***********************************************************************************/
/**************************************************************
Product.java:
**************************************************************/
import java.rmi.*;
public interface Product extends Remote{
String getDescription() throws RemoteException;
}
/*************************************************************
ProductImpl.java
*************************************************************/
import java.rmi.*;
import java.rmi.server.*;
public class ProductImpl extends UnicastRemoteObject implements Product{
public ProductImpl(String s) throws RemoteException
{
name=s;
}
public String getDescription()
{
return "I am a "+name+" buy me";
}
private String name;
}
/**************************************************************
ProductServer.java
***************************************************************/
import java.rmi.*;
import java.rmi.server.*;
public class ProductServer {
public static void main(String[] args) {
// if(System.getSecurityManager()==null)
System.setSecurityManager(new RMISecurityManager());
System.out.println("construction server implementation...............");
try
{
ProductImpl p1=new ProductImpl("tomato");
ProductImpl p2=new ProductImpl("tudou");
System.out.println("Binding server implementations to registry.........");
// Naming.rebind("tomato1",p1);
// Naming.rebind("tudou1",p2);
/*****************************
* 在这里,我们需要先用Windows命令行的形式输入rmiregistry -J-Djava.security.policy=java.policy启动注册表
* 否则的话程序就会出现错误
*/
Naming.bind("//121.250.216.101:1099/toma",p1);
Naming.bind("//121.250.216.101:1099/tud",p2);
System.out.println("waiting for invacations from clients...............");
System.out.println("----------------------------------");
// String[] name=Naming.list("");
// for(int i=0;i<name.length;i++)
// {
// System.out.println(name[i]);
// }
}
catch(Exception e)
{
System.out.println("You have an error :"+e.getMessage());
}
}
}
/***************************************************************
ProductClient.java
****************************************************************/
import java.rmi.*;
import java.rmi.server.*;
public class ProductClient {
public static void main(String[] args) {
System.setSecurityManager(new RMISecurityManager());
String url="rmi://121.250.216.101:1099/";
try
{
Product c1=(Product)Naming.lookup(url+"toma");
Product c2=(Product)Naming.lookup(url+"tud");
System.out.println(c1.getDescription());
System.out.println(c2.getDescription());
}
catch(Exception e)
{
System.out.println("客户端程序出现了错误: "+e.getMessage());
}
}
}
分享到:
相关推荐
- **运行客户端**:在另一台机器或同一台机器的不同终端上运行客户端程序,通过RMI注册表找到并调用远程对象的方法。 4. **注意事项** - **异常处理**:RMI调用可能会抛出`RemoteException`和其他与网络通信相关...
在运行使用RMI的程序时,涉及三个主要实体: 1. **客户端(Client)**:这是您编写的程序,用于访问远程方法。 2. **服务器(Server)**:这是您编写的程序,用于实现远程方法。客户端连接到服务器,并请求执行某个方法...
- 在服务器(Server)和客户端(Client)上,我们需要创建并导出使用自定义的SSL套接字工厂的Registry实例。这可以通过在创建RMI Registry时指定`SslRMIClientSocketFactory`和`SslRMIServerSocketFactory`来实现。...
Spring Remote Method Invocation(RMI)是Java平台上的一个远程对象调用框架,它允许一个Java对象在一台机器上执行,并且被另一台机器上的客户端调用。在这个"SpringRMI小例子"中,我们将深入探讨如何利用Spring...
它允许一个Java对象调用另一个在不同JVM上运行的对象的方法,仿佛它们都在同一台机器上。RMI过程涉及两个主要步骤:导出远程对象(使得其方法可供远程调用)和注册该对象到一个远程命名服务,这样其他客户端就可以...
**远程方法调用(Remote Method Invocation...总的来说,RMI是Java实现分布式系统的重要工具,它提供了简单、直观的方式来构建跨越多台机器的应用程序。了解其工作原理和最佳实践对于任何Java开发者来说都是有价值的。
这种技术在开发跨网络的分布式应用程序时非常有用,因为它使得对象可以在一台计算机上创建并在另一台计算机上执行,就像它们在同一台机器上一样。 在“基于RMI分布计算实例”中,我们可能涉及到以下几个关键知识点...
远程对象可以在一台机器上创建,然后在其他机器上使用。 2. **远程接口(Remote Interface)**: 定义了远程对象可以被调用的方法,所有方法必须声明抛出RemoteException。 3. **注册表(Registry)**: RMI系统中的...
RMI允许Java对象在不同的Java虚拟机(JVM)之间进行通信,仿佛它们是在同一台机器上运行。这种机制使得开发者可以构建跨越网络的分布式应用程序,极大地扩展了Java应用的潜力。在本项目中,商品管理系统的服务器端和...
它允许Java对象在不同的Java虚拟机(JVM)之间进行通信,仿佛它们是在同一台机器上运行一样。RMI在企业级应用,特别是需要跨网络协同工作的系统中扮演着重要角色。东北大学的这个"RMI会议管理系统"项目,正是对这一...
RMI允许Java对象在不同的JVM之间进行通信,仿佛它们都在同一台机器上。它通过序列化和反序列化来传输对象,使得远程方法调用就像本地调用一样高效。Spring RMI在此基础上提供了更高级别的抽象,通过Spring的依赖注入...
Java Remote Method Invocation(RMI)是Java平台上的一个特性,它允许在分布式环境中进行对象间的交互,即在一台机器上的对象可以调用另一台机器上对象的方法,仿佛它们是在同一台机器上一样。这个特性使得Java成为...
通过RMI,一个Java对象可以在一台机器上执行,其方法调用可以在另一台机器上处理。这对于构建分布式应用,尤其是在处理分布式计算或服务时非常有用。RMI的核心组件包括远程接口、远程对象、注册表和客户机。在...
在Java中,RMI允许一个Java对象在一台机器上调用另一台机器上的对象的方法,使得开发者能够构建跨越多台计算机的分布式应用程序。RMI是Java企业级应用开发中的重要组成部分,尤其在构建分布式服务、服务器端组件交互...
Java RMI(Remote Method Invocation,远程方法调用)是一种在Java平台上实现分布式计算的技术,它允许对象在不同的网络节点上进行交互,仿佛它们都在同一台机器上运行。在这个"java简单RMI会议功能实现"的例子中,...
在这个"JAVA RMI实现程序实例"中,我们将会探讨如何使用RMI实现一个简单的“Hello, World”示例,并已经在两台机器上进行了成功的测试。 首先,我们需要了解RMI的基本概念。RMI的核心思想是将对象的方法调用转化为...
分布式程序设计是一种技术,允许不同计算机上的程序协同工作,仿佛它们都在同一台机器上运行。在Java世界中,RMI(Remote Method Invocation,远程方法调用)和CORBA(Common Object Request Broker Architecture,...
远程方法调用(Remote Method Invocation,RMI)是Java平台上的一个重要特性,它允许一个Java对象在一台机器上执行另一个网络中的Java对象的方法。RMI是分布式计算的基础,使得Java程序能够跨越网络边界,实现组件...
RMI允许一个Java对象在一台机器上(客户端)调用另一台机器上(服务器端)的对象的方法,仿佛它们是在同一台机器上运行。RMI系统包括了序列化、远程接口定义、远程对象实现和注册表服务等组件。在这个项目中,...
4. 它扩展了Java编程模型,使得代码能够在不同的机器和JVM之间无缝运行,无需特殊语法。 5. RMI允许在远程方法调用中同时传输数据和行为(代码),增强了功能的灵活性。 相较于CORBA(Common Object Request Broker...