具体代码:
首先定义接口:
public interface IService extends Remote{
/**
* 声明服务端必须提供的服务
* 注意:这里要抛出RemoteException异常
*/
String service(String str)throws RemoteException;
}
定义实现类:
@SuppressWarnings("serial")
/**
* 必须集成UnicastRemoteObject类用于导出远程对象和获得与远程对象通信的存根
*/
public class ServiceImpl extends UnicastRemoteObject implements IService{
private String name;
public ServiceImpl(String name) throws RemoteException{
this.name=name;
}
@Override
public String service(String str) {
return name+">>"+str;
}
}
定义注册类:
public class Service {
public static void main(String[] args) {
try {
Registry registry=LocateRegistry.createRegistry(2000);
IService service02=new ServiceImpl("service02");
//将命名绑定到对象,即想命名空间注册已经实例化的远程服务对象
registry.bind("service02", service02);
} catch (AccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (AlreadyBoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("向服务端注册了一个远程对象....");
}
}
然后将IService接口导出,放在另一个工程下面。并编写客户端类Client。
public class Client {
public static void main(String[] args) {
try {
String url="rmi://localhost:2000/";
Context naming=new InitialContext();
//检索指定的对象,即找到服务器端相应的服务对象存根
IService service02=(IService)naming.lookup(url+"service02");
Class stubClass=service02.getClass();
System.out.println("service02 是 "+stubClass.getName() +"的实例");
Class[] interfaces=stubClass.getInterfaces();
for(Class c:interfaces){
System.out.println("存根类实现了:"+c.getName()+" 接口");
}
String s= service02.service("测试");
System.out.println(s);
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NamingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
运行顺序:
1.0先启动java的远程注册程序D:\Program Files\Java\jre\bin\rmiregistry.exe ;
2.0其次运行Service类,注册服务;
3.0然后运行Client类;
打印结果:
service02 是 $Proxy0的实例
存根类实现了:java.rmi.Remote 接口
存根类实现了:inf.IService 接口
service02>>测试
分享到:
相关推荐
最近在学习代理模式,用到了java rmi远程调用,包含服务端和客户端,之前一直没有接触过,学习了java rmi远程调用,一方面可以了解代理模式,一方面熟悉java低层的远程
Java RMI 远程调用实例,各个文件的作用: DISPLAYPERFECTTIME.JAVA|:向rmiregistry查找PerfectTime对象,定义调用远程对象的方法。 PERFECTTIME.JAVA:向RMI注册服务,以便客户端查找,创建提供注册服务的本地...
接下来,`getMemberAccountCount`方法实现了远程调用逻辑,通过`this.ref.invoke`方法调用了远程方法,并处理了可能抛出的异常。 #### 2. 客户端代码分析 客户端通过`Naming.lookup`方法获取远程服务的引用,然后...
实现java RMI 远程调用,包括 RMIServer RMIClient源码,测试用例。
Java RMI(Remote Method Invocation,远程方法调用)是Java平台提供的一种分布式计算技术,它允许在不同的Java虚拟机之间透明地调用对象的方法。在RMI架构中,客户端能够像调用本地对象一样调用远程服务器上的对象...
Java远程调用(Remote Method Invocation,RMI)是Java平台中一种重要的分布式计算技术,它允许在不同网络环境中的Java对象之间进行透明的交互。在本文中,我们将深入探讨三种不同的RMI实现方法:原始方式、Spring...
首先,我们需要定义一个实现了`java.rmi.Remote`接口的类,比如`MyRemoteInterface.java`,并在这个接口中声明所有需要远程调用的方法。这些方法必须抛出`java.rmi.RemoteException`,因为网络通信可能会出现异常。...
Java RMI(Remote Method Invocation,远程方法调用)是Java平台提供的一种分布式计算技术,它允许在不同的Java虚拟机之间进行方法调用,仿佛这些方法是在本地对象上执行一样。这个技术极大地简化了构建分布式应用的...
1. **创建远程接口**:定义一个继承自Remote的接口,声明需要远程调用的方法。 2. **实现远程接口**:编写一个类实现这个接口,提供具体的方法实现。 3. **注册远程对象**:在服务器端创建远程对象实例,然后将其...
### RMI远程调用代码及使用方法 #### 一、RMI简介 远程方法调用(Remote Method Invocation,简称RMI)是Java平台提供的一种分布式计算技术,它允许开发人员在不同的Java虚拟机(JVM)之间进行对象的远程调用。通过...
这个简单的例子将引导我们了解如何利用Java RMI实现远程调用。 首先,我们要创建远程接口。在Java RMI中,远程接口是一个实现了`java.rmi.Remote`接口的Java接口。接口中声明的方法将在客户端调用,实际上会在...
Java RMI(Remote Method Invocation,远程方法调用)是Java平台提供的一种分布式计算技术,它允许Java对象在不同的网络环境中进行交互,就像调用本地方法一样。RMI系统的核心概念是客户端可以调用服务器端的对象上...
总结来说,RMI远程调用是Java实现分布式计算的关键技术,它通过简化网络编程,使开发者能专注于业务逻辑,而非底层通信细节。结合Spring框架,可以进一步提升RMI应用的开发效率和可维护性。在实际项目中,合理利用...
Java 远程方法调用(Java RMI,Remote Method Invocation)是Java平台提供的一种用于构建分布式应用程序的技术。它允许一个对象在某个Java虚拟机(JVM)上执行的方法调用另一个在不同JVM上的对象的方法,仿佛它们是...
1. 远程接口(Remote Interface):定义了可以被远程调用的方法,这些方法必须声明抛出`java.rmi.RemoteException`。接口需要使用`@Remote`注解标记。 2. 远程实现类(Remote Implementation):实现了远程接口,并...
这些方法必须抛出`java.rmi.RemoteException`,因为远程调用过程中可能会出现网络通信问题。例如: ```java public interface MyRemoteInterface extends Remote { void executeCommand(String cmd) throws ...
在这个场景中,“rmi远程调用读取文件”指的是通过RMI机制,使得一个JVM中的程序能够请求另一个JVM上的程序读取并返回文件内容。这种方式在分布式系统中非常常见,可以用于数据共享、文件服务等应用。 RMI的基本...
4. ** stubs 和 skeletons**:在RMI中,远程对象的引用在客户端是通过stubs(桩)表示的,而实际的远程调用则由serverside的skeleton(骨架)处理。现代的JVM已经不再需要手动生成stubs和skeletons,它们由Java...
在提供的`动态代理与RMI远程调用.ppt`中,可能会详细解释这两个概念,通过PPT的讲解和实例,可以更直观地理解动态代理和RMI的工作原理。同时,`src`目录下的源码文件则提供了具体的实现示例,读者可以通过阅读代码,...
在Windows环境下,同样需要JRE,运行客户端程序来执行远程调用。 注意,RMI的安全性、异常处理和网络通信细节也是开发者需要考虑的问题。例如,需要处理可能的`RemoteException`,以及配置JVM的安全策略文件以允许...