Java RMI: Aktualisieren von clientseitigen Objekten auf dem Server

Ich versuche, eine Middleware für die Gruppenkommunikation in einem verteilten System mithilfe von Java RMI zu implementieren.
Dort muss ich ein Objekt an den Server senden und es ändern. Damit sich Änderungen auf der Client-Seite niederschlagen.

Zum Beispiel werde ich das allgemeinste Tutorial auf der Oracle-Website geben.

X.java

public class X  implements Serializable, Remote{
    public int x; // defined as public, just be simple.
}

Hello.java

import java.rmi.Remote;
import java.rmi.RemoteException;

public interface Hello extends Remote {

    String sayHello(X c) throws RemoteException;
}

Server.java

import java.rmi.registry.Registry;
import java.rmi.registry.LocateRegistry;
import java.rmi.server.UnicastRemoteObject;

public class Server implements Hello {

    public Server() {
    }

    public String sayHello(X c) {
        c.x = 10;
        return "Hello, world!";
    }

    public static void main(String args[]) {

        try {
            Server obj = new Server();
            Hello stub = (Hello) UnicastRemoteObject.exportObject(obj, 0);
            LocateRegistry.createRegistry(1099);
            // Bind the remote object's stub in the registry
            Registry registry = LocateRegistry.getRegistry();
            registry.bind("Hello", stub);

            System.err.println("Server ready");
        } catch (Exception e) {
            System.err.println("Server exception: " + e.toString());
            e.printStackTrace();
        }
    }
}

Client.java

import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;

public class Client {

    public int x = 4;

    private Client() {
    }

    public static void main(String[] args) {

        String host = (args.length < 1) ? null : args[0];
        try {
            Registry registry = LocateRegistry.getRegistry(host);
            Hello stub = (Hello) registry.lookup("Hello");
            X x = new X();
            String response = stub.sayHello(x);
            System.out.println("response: " + x.x);
        } catch (Exception e) {
            System.err.println("Client exception: " + e.toString());
            e.printStackTrace();
        }
    }
}

Mein Problem ist, auch wenn ich den Wert für aktualisierex In Objekt c auf der Serverseite wird es nicht auf der Clientseite wiedergegeben. Ich könnte das einfach gebrauchenreturn um den aktualisierten Wert zu erhalten, aber ich plane, diese Methode zu verwenden, um eine Multicast-Funktion für den Server zu implementieren.

Kann mir jemand erklären warum? Und wenn ich das tun muss, wie geht das?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage