Si desidera realizzare un sistema client-server RMI in cui il server offre la funzione per calcolare il massimo comune divisore (MCD) di due interi dati.
Si modifichi il codice dato, che implementa l’interazione tra un client e il server localmente
public interface MCD {
public int mcd(int n, int m);
}
public class MCDimpl implements MCD{
public int mcd(int n, int m){
int r;
while(m != 0) {
r = n % m;
n = m;
m = r;
}
return n;
}
}
public class MyMain {
public static void main(String[] args) {
MCDimpl euclMCD= new MCDimpl();
int x, y;
x=18; y=3;
System.out.println("MCD("+x+","+y+")="+euclMCD.mcd(x,y));
x=18; y=6;
System.out.println("MCD("+x+","+y+")="+euclMCD.mcd(x,y));
x=18; y=7;
System.out.println("MCD("+x+","+y+")="+euclMCD.mcd(x,y));
x=18765; y=345435;
System.out.println("MCD("+x+","+y+")="+euclMCD.mcd(x,y));
}
}
Si implementi usando RMI un sistema client server in cui il server pubblica informazioni e i client le leggono.
Il server crea un’informazione (una stringa di testo) e la mette in un buffer. Ogni nuova informazione rimpiazza la precedente, indipendentemente dal fatto che sia stata letta o meno.
Ogni volta che crea una nuova informazione, il server manda una notifica ai client che si sono “abbonati” al servizio.
Inizialmente, i client — dopo aver identificato il server attraverso il registry — gli mandano la richiesta di “abbonamento” cioè gli mandano la richiesta di essere avvertiti ogni volta che risulta disponibile una nuova informazione.
In seguito, quando ricevono la notifica, i client utilizzano un metodo del server per leggere la notiizia.
Si può realizzare il sistema richiesto modificando il codice dato, che implementa un server che si limita a mettere a disposizione un metodo per leggere le notizie. I Client non sanno quando c’è una nuova notizia da leggere.
NewsClient.java
import java.rmi.registry.Registry;
import java.rmi.registry.LocateRegistry;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;
public class NewsClient {
static final int N=20;
public static void main(String[] args) throws InterruptedException, RemoteException, NotBoundException {
String st;
Registry registro = LocateRegistry.getRegistry(1099);
NewsService news = (NewsService) registro.lookup("NEWS");
for(int i=0; i<N; i++){
st=news.readNews();
System.out.println("client: "+st);
}
System.out.println("Finito");
}
}
Interfaccia remota NewsService
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface NewsService extends Remote {
public String readNews() throws RemoteException;
}
NewsServiceImpl