0 0

java RMI 如何返回远程对象的引用15

今天Test RMI(通过spring), result 返回的是一个对象, 想问一下, 怎么想才能返回一个对象的引用, 这样就可以反复去check 远程端是否有处理完. 谢谢啦.

public static void main(String[] args) throws InterruptedException {
        
        out.println("Client Begin!");
        
        ApplicationContext ctx = new ClassPathXmlApplicationContext("ClientConfig.xml");
        
        CypherService service = (CypherService) ctx.getBean("clientInvoke");
        
        try {
            [b]Result result = service.encrypt("plain");[/b]
            System.out.println(result.getResult());
            do{
                Thread.sleep(1000);
                System.out.println(result.getResult());
            } while (!result.isProcessed());
            
        } catch (RemoteException e) {
            e.printStackTrace();
        }
        
        out.println("Client End!");
    }

问题补充:
z276356445t 写道
这是不行的,本身RMI就是将处理完成的结果返回给客户端,一次请求一次响应.



问题解决了.

要点:
1. Result extends Remote
2. ResultImpl extends UnicastRemoteObject implements Result
这里使用了spring, UnicastRemoteObject 是 implements Serializable的. 实质是ResultImpl只要implements Serializable, Result 就可以了.

如果Result implements Serializable, 那么传回到client的就是一个Object,
如果Result extends Remote, 那么传回到client的就是一个引用(RMI自动识别).

当然ResultImpl 必须要implements Serializable, 否则不可以持久化, 也就不能传输.

然后我们就可以在client端不停地检查Server 端的Result 是否执行完.

问题补充:
z276356445t 写道
服务器端的对象与客户端的对象都不属于同一虚拟机中的对象,何来引用?


http://buralin.iteye.com/admin/blogs/1389172

我上传了一个sample.
RMI 
2012年1月20日 09:54

3个答案 按时间排序 按投票排序

0 0

你写的这个sample只是不断的check服务器的数据是否完成,并没有拿到服务器对象的引用.
就好比说你在客户端上传文件,不断的去的check文件是否在服务器上传完成而已.

2012年2月02日 10:31
0 0

服务器端的对象与客户端的对象都不属于同一虚拟机中的对象,何来引用?

2012年1月30日 14:43
0 0

这是不行的,本身RMI就是将处理完成的结果返回给客户端,一次请求一次响应.

2012年1月29日 10:06

相关推荐

    java rmi远程方法调用 客户端

    - **性能优化**:RMI提供了优化选项,如缓存远程对象引用,减少网络通信次数,以及调整传输协议参数来提升性能。 - **故障恢复**:RMI系统设计时应考虑服务器崩溃或网络中断的情况,实现适当的恢复策略。 总的来说...

    Java RMI(远程方法调用)Demo

    4. **获取远程对象引用**:客户端通过Registry.lookup方法获取远程对象的引用。 5. **调用远程方法**:客户端使用获取的引用调用远程方法。 6. **处理异常**:由于网络通信的不确定性,客户端和服务器端都需要捕获...

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

    客户端需要获取远程对象的引用,这通常通过查找RMI注册表完成: ```java Registry registry = LocateRegistry.getRegistry("localhost", 1099); MyRemoteInterface remote = (MyRemoteInterface) registry.lookup(...

    Java RMI demo多对象

    - **获取远程对象引用**:客户端通过`lookup()`方法从注册表中获取远程对象的引用。 - **调用远程方法**:有了引用,客户端就可以像操作本地对象一样调用远程对象的方法。 3. **RMI生命周期**: - **启动RMI...

    Java RMI 远程方法调用

    - 通过远程对象引用调用远程方法。 RMI的源码分析可以帮助我们理解其内部工作原理,例如,如何自动生成stub和skeleton,以及它们是如何处理网络通信的。而RMI工具则可以帮助我们更方便地调试和管理RMI应用,如...

    java 远程方法调用(java rmi)

    2. `java.rmi.server.UnicastRemoteObject`:用于创建远程对象的基类,它可以导出一个远程对象以便进行RMI通信。 3. `java.rmi.registry.Registry`:代表RMI注册表,提供了查找、绑定和解绑远程对象的方法。 4. `...

    java rmi java rmi

    客户端代码主要负责获取远程对象的引用,并调用远程对象的方法。 ### 服务器回调 除了基本的远程方法调用外,RMI还支持服务器端主动向客户端发送消息的能力,这被称为服务器回调。实现服务器回调需要客户端提供一...

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

    客户端通过RMI注册表获取远程对象的引用,然后就可以像调用本地对象一样调用远程方法了。 ```java public class RMIClient { public static void main(String[] args) { try { Registry registry = ...

    java_rmi.rar_RMI java_java.rmi

    4. **获取远程对象引用**:在客户端,使用`java.rmi.Naming`类的`lookup()`方法根据服务名从注册表中查找并获取远程对象的引用。 5. **调用远程方法**:现在,客户端可以通过这个引用来调用远程对象的方法,就像...

    java RMI实现代码

    4. RMIClient:客户端程序,通过RMI注册表获取远程对象引用,然后调用远程方法。 二、RMI的工作流程 1. 客户端创建一个远程接口的引用,通过` LocateRegistry.getRegistry()` 获取RMI注册表,并使用`Registry....

    java RMI技术实现的网络聊天室

    1. **RMI概念**:RMI是一种基于对象的远程调用机制,它允许Java对象像调用本地方法一样调用远程对象的方法。RMI系统包括客户端和服务器两部分,客户端通过接口与服务器交互,服务器则提供具体实现。 2. **RMI架构**...

    Java RMI 用于远程调用 进行分布式开发

    `java.rmi.Naming`则用来绑定或查找远程对象引用。 #### 序列化与线程管理 在Java RMI中,序列化是非常重要的一个环节。序列化机制确保了对象可以在网络上传输,并能在远程端正确还原。本书详细介绍了如何处理复杂...

    RMI.rar_Java RMI_java.rmi_java.rmi.Remot_remote

    `java.rmi.Naming.lookup()`方法用于查找远程对象的引用。 5. **处理异常**:由于网络通信的不可靠性,必须妥善处理`RemoteException`和其他可能的网络相关异常。 Java RMI的实现基于Java的序列化机制,这意味着...

    JavaRMI快速入门

    Java RMI允许这些对象的引用在不同进程中传递,使得客户端可以调用远程对象的方法。 3. **注册表(Registry)**:RMI注册表是一个服务,它提供了查找远程对象的简单方式。客户端通过向注册表查询获取远程对象的引用...

    三种方式实现java远程调用(rmi),绝对可用

    JNDI主要用于Java应用中的命名和目录服务,它可以与RMI结合使用来查找和绑定远程对象: 1. **创建JNDI上下文**:在服务器端,使用`InitialContext`创建JNDI上下文并绑定远程对象。 2. **查找远程对象**:在客户端,...

    java rmi 参考文档

    远程对象的句柄标识了该对象的位置以及如何通过RMI远程接触它。当在本地使用时,它就像任何其他对象一样工作。当作为参数传递时,其句柄也会被传递(类似于普通的Java对象)。 2. **可序列化对象(Serializable ...

    java rmi HelloWorld版(源码)

    6. **获取远程对象引用**:在客户端,使用`java.rmi.Naming.lookup()`方法根据名称从RMI注册表获取远程对象的引用。 7. **调用远程方法**:通过获取的引用,客户端可以直接调用`sayHello()`方法,就像调用本地对象...

    JavaRMI.pdf

    当需要创建一个远程对象时,程序员会定义一个继承自`java.rmi.Remote`的接口,并在其中声明需要远程调用的方法。这些方法通常会抛出`java.rmi.RemoteException`,因为网络通信可能会出现异常。远程接口的所有方法都...

    java RMI简单Demo

    3. **注册表(Registry)**:类似于服务目录,用于存储远程对象的引用,使得客户端可以通过名称查找并连接到远程对象。`java.rmi.registry.Registry`是RMI提供的标准注册表实现。 4. ** Stub 和 Skeleton**:Stub是...

Global site tag (gtag.js) - Google Analytics