gpt4 book ai didi

java - 将元数据添加到 Java RMI

转载 作者:行者123 更新时间:2023-12-01 05:43:29 25 4
gpt4 key购买 nike

我正在尝试创建一个系统,在每次 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com