Связь между сервером и клиентом является чем-то вроде минного поля во всех технологиях удаленного взаимодействия, включая RMI. Вероятно, поэтому вы изо всех сил пытаетесь найти много документации по этому вопросу. Для фиктивной программы в контролируемой среде будет работать следующий подход, и это самый простой путь. Обратите внимание, что вся обработка ошибок была опущена.
import java.rmi.Remote;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
interface ClientRemote extends Remote {
public void doSomething() throws RemoteException;
}
interface ServerRemote extends Remote {
public void registerClient(ClientRemote client) throws RemoteException;
}
class Client implements ClientRemote {
public Client() throws RemoteException {
UnicastRemoteObject.exportObject(this, 0);
}
@Override
public void doSomething() throws RemoteException {
System.out.println("Server invoked doSomething()");
}
}
class Server implements ServerRemote {
private volatile ClientRemote client;
public Server() throws RemoteException {
UnicastRemoteObject.exportObject(this, 0);
}
@Override
public void registerClient(ClientRemote client) throws RemoteException {
this.client = client;
}
public void doSomethingOnClient() throws RemoteException {
client.doSomething();
}
}
Использование: Создайте объект Server на сервере, добавьте его в реестр RMI и найдите его на клиенте.
Существуют и другие технологии, упрощающие уведомления клиентов, для этого обычно используется Java Message Service (JMS).