Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / RMI передача по ссылке. / 25 сообщений из 28, страница 1 из 2
02.09.2013, 17:39:31
    #38384477
GorloPavel
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RMI передача по ссылке.
Здравствуйте. Возможно ли передать вложенный объект по ссылке?

Сервер:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
public class MyObject {
   public void sayHello(String message){
	System.out.println(message);
   }
}

..............................

public interface ISharedObject extends Remote{
   public MyObject getMyObject() throws RemoteException;
   public void test() throws RemoteException;
}

public class SharedObject implements ISharedObject{
   MyObject myObject = new MyObject();
   
   public void test()  throws RemoteException {
        System.out.println("WORK!");
   }

   public MyObject getMyObject() throws RemoteException {
	return myObject;
   }
}

..................................
Registry registry = LocateRegistry.createRegistry(2099);
Remote stub = UnicastRemoteObject.exportObject(new SharedObject(), 0);
registry.bind("RMI_Server", stub);
..................................



Как на стороне клиента мне получить ссылку на myObject ? Возможно ли это? Или можно получить только ссылку на SharedObject? Заранее огромное спасибо!
...
Рейтинг: 0 / 0
03.09.2013, 11:28:45
    #38385155
GorloPavel
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RMI передача по ссылке.
Никто не поможет?
...
Рейтинг: 0 / 0
03.09.2013, 12:20:05
    #38385247
ivanra
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RMI передача по ссылке.
RMI передает объекты по значению, а для этого требуется сериализация. Добавьте в объявление класса интерфейс Serializable
Код: java
1.
2.
3.
4.
5.
public class MyObject implements Serializable{
   public void sayHello(String message){
	System.out.println(message);
   }
}
...
Рейтинг: 0 / 0
03.09.2013, 13:10:24
    #38385325
GorloPavel
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RMI передача по ссылке.
ivanraRMI передает объекты по значению, а для этого требуется сериализация. Добавьте в объявление класса интерфейс Serializable
Код: java
1.
2.
3.
4.
5.
public class MyObject implements Serializable{
   public void sayHello(String message){
	System.out.println(message);
   }
}



Спасибо. Для меня принципиально было знать. Значит RMI мне не подходит. Нужна ссылка!
...
Рейтинг: 0 / 0
03.09.2013, 13:47:14
    #38385390
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RMI передача по ссылке.
Почему MyObject extends Remote не прокатит?
...
Рейтинг: 0 / 0
03.09.2013, 13:48:23
    #38385392
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RMI передача по ссылке.
...
Рейтинг: 0 / 0
03.09.2013, 17:28:24
    #38385766
GorloPavel
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RMI передача по ссылке.
BlazkowiczПочему MyObject extends Remote не прокатит?
Нет. Не катит :(
...
Рейтинг: 0 / 0
03.09.2013, 17:30:03
    #38385769
GorloPavel
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RMI передача по ссылке.
BlazkowiczПример
http://stackoverflow.com/a/11187584
Как я понял из примера(беглый английский) это невозможно? Получается по ссылке только тот объект который расшарен на сервере. И если я возвращаю в качестве параметра "сложный" объект, то он должен быть сереализуемым и передается таким образом только по значению. Я прав?
...
Рейтинг: 0 / 0
03.09.2013, 17:33:08
    #38385774
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RMI передача по ссылке.
GorloPavelКак я понял из примера(беглый английский) это невозможно?
Вы что-то не то читаете. Там выбраный ответ помечен зеленой галочкой и содержит пример того что вы хотите.
...
Рейтинг: 0 / 0
03.09.2013, 17:36:12
    #38385784
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RMI передача по ссылке.
Попробуем документацию. Например:
http://docs.oracle.com/javase/7/docs/platform/rmi/spec/rmi-objmodel7.html

2.6.2 Passing Remote ObjectsWhen passing an exported remote object as a parameter or return value in a remote method call , the stub for that remote object is passed instead. Remote objects that are not exported will not be replaced with a stub instance . A remote object passed as a parameter can only implement remote interfaces.
...
Рейтинг: 0 / 0
03.09.2013, 18:55:14
    #38385874
GorloPavel
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RMI передача по ссылке.
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
public interface ISharedObject extends Remote{
	public IMyObject getMyObject() throws RemoteException;
}

public class SharedObject implements ISharedObject{
	MyObject myObject = new MyObject();

	public IMyObject getMyObject() throws RemoteException {
		return myObject;
	}
}

..............................

public interface IMyObject extends Remote {
	public void sayHello(String message);
}

public class MyObject implements IMyObject {
	public void sayHello(String message){
		System.out.println(message);
	}
}



Использование:
Код: java
1.
2.
3.
4.
5.
6.
7.
              try {
			Registry registry = LocateRegistry.getRegistry("localhost", 2099);
			ISharedObject service = (ISharedObject) registry.lookup("RMI_Server");
			service.getMyObject().sayHello("HEY!");
		} catch (Exception e) {
			e.printStackTrace();
		}



Выдает ошибку: java.rmi.UnmarshalException: error unmarshalling return; nested exception is:
java.io.WriteAbortedException: writing aborted; java.io.NotSerializableException: MyObject
...
Рейтинг: 0 / 0
03.09.2013, 21:17:19
    #38385949
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RMI передача по ссылке.
GorloPavel, говорят-же тебе. Поддержи Serializable.
...
Рейтинг: 0 / 0
03.09.2013, 21:20:46
    #38385953
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RMI передача по ссылке.
maytonGorloPavel, говорят-же тебе. Поддержи Serializable.
Тогда будет by value. А задача - by reference.
...
Рейтинг: 0 / 0
03.09.2013, 21:23:29
    #38385955
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RMI передача по ссылке.
Хм...
...
Рейтинг: 0 / 0
03.09.2013, 21:35:59
    #38385960
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RMI передача по ссылке.
Может поле транзиентным объявить?
...
Рейтинг: 0 / 0
03.09.2013, 21:41:50
    #38385964
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RMI передача по ссылке.
Вроде здесь разделе толкуют о сабж. Не?

http://stackoverflow.com/questions/11187548/is-it-possible-to-pass-by-reference-in-rmi
...
Рейтинг: 0 / 0
03.09.2013, 21:47:25
    #38385970
ivanra
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RMI передача по ссылке.
Наверно поэтому:
Во всех методах java.rmi.Remote интерфейса должно быть явно указано исключение java.rmi.RemoteException
...
Рейтинг: 0 / 0
03.09.2013, 21:47:32
    #38385971
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RMI передача по ссылке.
maytonВроде здесь разделе толкуют о сабж. Не?

http://stackoverflow.com/questions/11187548/is-it-possible-to-pass-by-reference-in-rmi
А здесь тогда о чем?
14789266
...
Рейтинг: 0 / 0
04.09.2013, 03:31:31
    #38386084
GorloPavel
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RMI передача по ссылке.
ivanraНаверно поэтому:
Во всех методах java.rmi.Remote интерфейса должно быть явно указано исключение java.rmi.RemoteException
Та же ошибка. Короче как я понял это нереально. Жаль.
...
Рейтинг: 0 / 0
04.09.2013, 10:04:40
    #38386186
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RMI передача по ссылке.
GorloPavelivanraНаверно поэтому:
Во всех методах java.rmi.Remote интерфейса должно быть явно указано исключение java.rmi.RemoteException
Та же ошибка. Короче как я понял это нереально. Жаль.
Если поле сделать transient, то оно не будет передаваться на клиента при сериализации. Зато сервер сможет вернуть ссылку на него через удаленный метод внешнего класса.
...
Рейтинг: 0 / 0
04.09.2013, 10:20:01
    #38386203
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RMI передача по ссылке.
GorloPavel,
может постановка хромает?
Зачем разделяя объекты через протокол, пытаться с ними работать как с единиым целым по ссылкам?
...
Рейтинг: 0 / 0
04.09.2013, 13:07:24
    #38386530
GorloPavel
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RMI передача по ссылке.
Petro123GorloPavel,
может постановка хромает?
Зачем разделяя объекты через протокол, пытаться с ними работать как с единиым целым по ссылкам?
Да нет у меня другого решения. Приложение специфическое. Либо свой прокол обмена по сокетам(он уже есть) либо RMI... Видимо придется использовать второе.
...
Рейтинг: 0 / 0
04.09.2013, 13:19:08
    #38386555
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RMI передача по ссылке.
GorloPavelПриложение специфическое
угу.
Как всегда - нобелевское решение в архитектуре. Никто до тебя не делал.
ЗЫ.
Что сокеты, что RMI - не надо передавать Объекты и методы. Надо передавать ДАННЫЕ.
...
Рейтинг: 0 / 0
04.09.2013, 13:28:32
    #38386575
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RMI передача по ссылке.
Petro123GorloPavel,
может постановка хромает?
Зачем разделяя объекты через протокол, пытаться с ними работать как с единиым целым по ссылкам?
Можно попробовать сериализовывать физ. адрес объекта через RMI
но опять-же. Зачем? Для сравнения?

Может для идентичности ввести суррогатный PK который в рамках решаемой
задачи и будет уникальность обеспечивать.
...
Рейтинг: 0 / 0
04.09.2013, 13:51:34
    #38386612
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RMI передача по ссылке.
maytonМожно попробовать сериализовывать физ. адрес объекта через RMI
но опять-же. Зачем? Для сравнения?
прикольно, но очень спорно)
ЗЫ
Мы как-то в EXE, где ещё не было управляемой и перемещаемой памяти, делали такую штуку как передача адреса памяти в виде строки.
Работало)))
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / RMI передача по ссылке. / 25 сообщений из 28, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]