java - 将元数据添加到 Java RMI

标签 java rmi

我正在尝试创建一个系统,在每次 RMI 调用时,

1)收集有关当前本地系统状态的一些数据(比如说系统时间)

2) 将其序列化并透明地将其添加到通过调用通过线路发送的数据中(即,不更改被调用的 stub 方法的签名)

3)在另一端反序列化它并采取一些操作(假设将其记录到文件中)

4) 当方法返回时反向执行相同的操作

我一开始尝试使用 AspectJ 来做到这一点,在 java.rmi.server.RemoteRef 的调用方法中添加一个切入点,这将允许我将元数据添加到 params 对象数组中,但我现在发现AspectJ 无法建议已编译的代码,这很有意义。

那么,正确的方法是什么?

最佳答案

嗯,我不确定我是否从您所说的内容中获得了足够的上下文,但我认为您可以在传递到服务器和从服务器接收的对象的序列化/反序列化时编写元数据。

例如,假设您的服务器正在返回 Jedi 实例。 Jedi 是一个可序列化的类。然后,您可以使用 writeObject() 和 readObject() 方法(如 Java 序列化规范中所述)来写入客户端/服务器端可能需要的任何特殊附加信息。

例如:

public class Jedi {
  ....
        private void writeObject(ObjectOutputStream stream) throws IOException {
        stream.writeObject(new Date());
        stream.defaultWriteObject();
    }

    private void readObject(ObjectInputStream stream) throws IOException, ClassNotFoundException {
        Date sysDate = (Date) stream.readObject();
        System.out.println(sysDate);
        stream.defaultReadObject();
    }
}

唯一的问题是,您将被迫对与服务器交换的每个可序列化对象执行此操作。

关于java - 将元数据添加到 Java RMI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6500390/

相关文章:

java - 从 Eclipse 与系统设置环境变量

Java HttpServlet 无法从客户端使用 OKHttp 发出的 POST 请求接收任何参数

java - 如何将调用 Request.callback onCompleted() 方法时从 Facebook 返回的数据传递到我在 Android 中的 fragment ?

java - RMI中的rmic是什么?

java - RMI访问始终被拒绝错误

java - Elasticsearch,嵌套 "ANDS"和 "ORS"

java - 从位置 'spring.profiles.active' 导入的属性 'class path resource [application-dev.yml]' 无效

java - 使用Java RMI,序列化对象到底什么时候通过网络传输?

java - 我应该使用哪种 Java RMI/RPC/IPC 技术?

java - Rmiregistry 与 LDAP