Я успешно создал службу RMI и клиент. Я могу назвать методы и так далее. Но теперь я хотел попробовать следующее: мне нужен стандартный Java-объект, например LinkedList, который будет размещен на службе. Кроме того, я хотел «притвориться», что у меня уже есть код, который использует LinkedList. Я хочу, чтобы получить LinkedList, который фактически управляется службой, но я могу получить доступ локально, как если бы это был обычный LinkedList. Кроме того, я хочу выполнить минимальное ведение журнала, например, если .add() называется его записью на сервере: «Add called».Java RMI: Как передать POJO
Это не предназначено для производства, просто чтобы помочь мне понять, как это работает!
До сих пор я много пробовал. Наиболее перспективным является то, что я создал класс, который расширяет LinkedList и реализует Remote. Этот класс пытается зарегистрировать себя в реестре в конструкторе вроде этого:
try {
UnicastRemoteObject.exportObject((Remote)this); Naming.rebind("theList", (Remote)this); } catch (Exception e) { System.out.println("fail"); System.out.println(e.getMessage()); }
Я должен сделать это, потому что мне нужно продлить LinkedList, таким образом, я не могу продлить UnicastRemoteObject.
выход я получаю, когда я пытаюсь запустить это на стороне сервера:
fail Connection refused to host: 192.168.178.27; nested exception is: java.net.ConnectException: Connection refused
А на стороне клиента:
java.lang.ClassCastException: MyList_Stub cannot be cast to java.util.LinkedList at $Proxy0.createList(Unknown Source) at RemoteProgram.main(RemoteProgram.java:27)
Заранее спасибо!
Эй, Майкл, спасибо за ответ. Но я только пытаюсь понять понятия. То, как я это задал - как бы вы это сделали, чтобы каждый раз что-то менялось, он передавался на сервер, хотя и был очень неэффективным? – partel