Korzystając z technologii RMI napisz system odzwierciedlający pracę rozwiązania monitorującego odczyty rozproszonych sensorów. Założenia: Sensor to element odpowiedzialny za generowanie odczytów. Sensor można zdalnie lub lokalnie uruchomić bądź zatrzymać oraz wskazać mu, z którym z monitorów ma być skojarzony. Sensor ma generować odczyty z zadanym interwałem oraz odpalać metodę setReadings skojarzonego monitora. Sensory nie są osobnymi aplikacjami, tylko instancjami tworzonymi wewnątrz menadżera. package lab01; public interface ISensor extends Remote{ public void start() throws RemoteException; public void stop() throws RemoteException; public int getId() throws RemoteException; public void setOutput(IMonitor o) throws RemoteException; } Menadżer to osobna aplikacja z limitem na liczbę sensorów. Umożliwia tworzenie i usuwanie sensorów (lokalnie) oraz skojarzenie sensorów z monitorami. Namiastki monitorów pobiera z rejestru. Menadżer nie udostępnia żadnych interfejsów zdalnych. Rejestr służy do rejestrowania monitorów i udostępniania ich namiastek. Wewnątrz rejestru tworzona jest instancja rejestru rmi. Do tej instancji jest bindowany Rejestr. package lab01; public interface IRejestr extends Remote{ public int register(IMonitor o) throws RemoteException; public boolean unregister(int id) throws RemoteException; public List getMonitors() throws RemoteException; } Monitor to osobna aplikacja pokazująca wartości generowane przez skojarzony sensor (sensor wywołuje setReadings monitora). Monitor rejestruje się w Rejestrze. Z poziomu monitora można zatrzymać lub uruchomić sensor. package lab01; public interface IMonitor extends Remote{ public void setReadings(String readings) throws RemoteException; public void setInput(ISensor o) throws RemoteException; public int getId() throws RemoteException; }