Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> xmlrpc vs ResultSet, Передача сложных обектов  
:(
    Опции темы
V1tal1us
  Дата 13.3.2008, 03:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 7.3.2007

Репутация: нет
Всего: нет



Подскажите как XML-RPC клиенту получить от XML-RPC сервера обьект типа ResultSet, ну а xmlrpc-серверу соотвественно как его передать. 

Просьба не писать что то типа : RTFM или пойди по-гугли.  smile 
Спецификацию Я читал, и понимаю что Extensible Markup Language Remote Procedure Call не умеет передавать такие типы данных. Но нет ничего не возможного в этой галактике! 

Может кто то все таки обошел это ограничение???
 smile 


Возможен ли такой вариант : 

Кодировать ResultSet в base64 на стороне сервера , а потом декодировать на стороне клиента обратно в ResultSet ???
 smile 


PM MAIL   Вверх
COVD
Дата 13.3.2008, 04:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 26.7.2005

Репутация: 17
Всего: 43



Цитата

Подскажите как XML-RPC клиенту получить от XML-RPC сервера обьект типа ResultSet


Никогда не имел дело с XML-RPC, зато представляю, что такое ResultSet. Поэтому рискну ответить: никак. ResultSet - не сериализуемый обьект. Это - буфер сокетного соединения с базой. И содержимое буфера может динамически изменяться. Мы вытаскиваем оттуда строки методом next(), а буфер может синхронно подгружаться из базы. 

Подозреваю, что этот вопрос вызван ситуацией, когда передаваемый xml обьект очень большой и есть идея его начать обрабатывать не дожидаясь момента, когда он полностью будет загружен. В данной ситуации можно сымитировать интерфейс ResultSet. На серверной стороне должен быть реализован метод next(), который возвращает следующую порцию данных. Но каждый вызов next - это передача запроса по сети.    

Это сообщение отредактировал(а) COVD - 13.3.2008, 15:04
PM MAIL   Вверх
tux
Дата 13.3.2008, 07:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Летатель
***


Профиль
Группа: Участник Клуба
Сообщений: 1853
Регистрация: 10.2.2005
Где: msk.ru

Репутация: 31
Всего: 132



Цитата(COVD @  13.3.2008,  04:44 Найти цитируемый пост)
Поэтому рискну ответить: никак.

Совершенно верно, никак. Но скорее не из-за того, что он не сериализуемый (ResultSet вообще по сети передать не получится никаким способом), а в данном случае из-за ограничений самого XML-RPC, который умеет только простые бины передавать.
PM MAIL Skype GTalk Jabber YIM   Вверх
mbasil
Дата 17.3.2008, 12:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 399
Регистрация: 4.5.2007
Где: Москва

Репутация: 2
Всего: 13



Постойте, а как же интерфейс RowSet (и в частности XMLRowSet), который расширяет ResultSet?

Он сериализуемый и отсоединяемый - для того и придуман. То есть RowSet  можно сериализовать и передавать в SOAP Attachment. А XMLRowSet можно, очевидно передавать и в Body.

С год назад пробовал использовать реализацию  RowSet SUN и  Oracle.  Реализация Oracle работает без особых "глюков", а с реализацией SUN были проблемы. Впрочем сейчас, наверное, дело обстоит получше.
PM MAIL   Вверх
tux
Дата 17.3.2008, 23:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Летатель
***


Профиль
Группа: Участник Клуба
Сообщений: 1853
Регистрация: 10.2.2005
Где: msk.ru

Репутация: 31
Всего: 132



Вообще говоря, с XML-RPC все посложнее выглядит за счет того, что он сам попроще. Вот все возможные типы данных: array, base64, boolean, date/time, double, integer, string, struct, nil. Никаких аттачментов нет. В принципе да, можно взять RowSet, сериализовать, закодировать в base64 и так передавать. Или XMLRowSet передавать строкой, а потом парсить. Только кажется гораздо проще перегнать данные в массив бинов и передавать структуры. 
PM MAIL Skype GTalk Jabber YIM   Вверх
VSergeyV
Дата 18.3.2008, 14:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 299
Регистрация: 9.5.2006
Где: Новосибирск

Репутация: нет
Всего: 3



Цитата(tux @  17.3.2008,  23:35 Найти цитируемый пост)
Только кажется гораздо проще перегнать данные в массив бинов и передавать структуры.

Сам так почти и делал когда стояла почти аналогичная задача - заодно получилось сэкономить траффик (клиенты подключались через GPRS)
PM MAIL ICQ   Вверх
w1nd
Дата 18.3.2008, 18:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вертилятор
***


Профиль
Группа: Завсегдатай
Сообщений: 1077
Регистрация: 22.3.2006
Где: Москва

Репутация: 20
Всего: 54



Рискну заметить, что сериализация ResultSet не обязательно должна заключаться в попытке записи этого объекта в ObjectOutputStream. Можно передавать параметры для его повторного получения, можно передавать обёртку. А передавать по XML-RPC можно объекты любой сложности - для этого нужно только написать свои сериализатор и десериализатор XML.


--------------------
user posted imageuser posted image
PM MAIL ICQ   Вверх
COVD
Дата 19.3.2008, 16:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 26.7.2005

Репутация: 17
Всего: 43



Цитата(w1nd @ 18.3.2008,  18:54)
Рискну заметить, что сериализация ResultSet не обязательно должна заключаться в попытке записи этого объекта в ObjectOutputStream. Можно передавать параметры для его повторного получения, можно передавать обёртку.

ResultSet не имеет смысла в отрыве от сокетного соединения с базой, его породившего. В момент возвращения обьекта ResultSet методом executeQuery() он не обязан иметь в своем буфере всю выборку данных. Он (обьекта ResultSet ), наверное, вообще может быть пуст в этот момент (нечего сериализовать или обертывать!). Очевидно, данные из базы могут синхронно подгружаться по мере вызова next(). Только в этом случае имеет смысл организация доступа к данным a la iterator , т.е. в виде next(). Иначе можно было бы результатом executeQuery  иметь просто ссылку на коллекцию. И отсюда следует. что "повторно" получить или воссоздать ResultSet можно лишь создав новое соединение с базой данных.
PM MAIL   Вверх
w1nd
Дата 20.3.2008, 02:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вертилятор
***


Профиль
Группа: Завсегдатай
Сообщений: 1077
Регистрация: 22.3.2006
Где: Москва

Репутация: 20
Всего: 54



Цитата(COVD @  19.3.2008,  16:24 Найти цитируемый пост)
ResultSet не имеет смысла в отрыве от сокетного соединения с базой, его породившего.

Можно создать обёртку ResultSet, которая будет самостоятельно лазить на сервер к реальному объекту ResultSet и дёргать его там. Эту обёртку и десериализовывать.


--------------------
user posted imageuser posted image
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1051 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.