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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ListModel (поведение модели), модель вид контроллер 
:(
    Опции темы
cube
Дата 3.10.2010, 18:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



не знаю куда лучше было бы включить этот топик


Я использую модель вид контроллер в свинге, для создания JList, JTable, JComboBox. Мое приложение это клиент-сервер, на сервере я создаю DefaultListModel (например) и через RMI в клиенте получаю ее (модель) и запихиваю в компонент (JList). Все работает отлично, я использую шаблон RMI callback, и каждый раз при изменении модели на сервере вызываю методы на клиенте и устанавливаю модель в свою компаненту.

Как сделать чтобы модель изменяемая на сервере изменялась бы сама на клиенте без вызова дополнительный методов получения новой модели с сервера?

надеюсь я понятно объяснил ;) сорри
PM MAIL   Вверх
Skipy
Дата 4.10.2010, 10:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



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

Вам это вообще зачем? Чем не устраивает запрос модели?


--------------------
С уважением,
Евгений aka Skipy
www.skipy.ru
PM MAIL WWW ICQ   Вверх
cube
Дата 4.10.2010, 18:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Skipy @ 4.10.2010,  10:31)
В теории это делается следующим образом - сервер инициирует соединение с клиентским приложением и посылает обновление. На практике - большое количество клиентов приведет к тому, что сервер будет непрерывно рассылать уведомления, при том, что с большой вероятностью они клиенту не нужны (к тому моменту, когда понадобятся новые данные, клиент уже получит 20-30-40 обновлений вместо одного, по запросу)

Вам это вообще зачем? Чем не устраивает запрос модели?

Это самая лажовая реализация. 

Сейчас у меня приложение работает так:
Загружается сервер, загружает данные с бд в память в ввиде объектов, загружаются клиенты, находят сервер в сети. Вызывают с сервера объекты в виде модели (TableModel ListModel и т.п.), отображают на экране, после любо1 из клиентов изменяет данные. Сервер производит сохранение данных и у всех клиентов дергает метод отвечающий за обновления этого типа данных (например списка услуг, списка книг, списка городов, т.п.) все клиенты обращаются к серверу и получают новую модель и устанавливают ее в свой граф интерфейс.

Как сделать чтобы модель данных обновлялась на клиенте динамически? (не вызывая дополнительных методов на клиенте) Есть решение? 

Ведь я передаю 1 раз в самом начале модель данных графического интерфейса и по ссылке устанавливаю ее клиенту, после этого только сервер изменяет эту модель. Но на клиентах она не меняется, а по идеи должна. =)

! Я подозреваю что при передачи модели по сети происходит сериализация объекта, поэтому клиент получает как бы не ссылку на объект, а совершенно новый объект модели, естественно при таком раскладе, любые дальнейшие изменения модели на сервере не повлияют на модель которая находится у клиента.



Это сообщение отредактировал(а) cube - 4.10.2010, 19:08
PM MAIL   Вверх
COVD
Дата 4.10.2010, 19:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



"distributed cache",  "distributed memory" -  http://www.hazelcast.com/, http://www.terracotta.org/, e.t.c.
PM MAIL   Вверх
cube
Дата 4.10.2010, 19:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



представьте (если так будет понятней) вы делаете программу чат =)

Список сообщений храните на сервере, у вас 2 клиента которые ведут диалог. Каждый клиент отображает у себя список сообщений, имеет поле ввода нового сообщение и кнопку отправить.

На клиентах JList отображает сообщения, DefaultListModel модель сообщений хранящаяся на сервере, бд у вас нет (нет задачи сохранять мессаджи).

Как бы вы поступили в данной ситуации? спасибо
PM MAIL   Вверх
cube
Дата 4.10.2010, 19:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(COVD @ 4.10.2010,  19:12)
"distributed cache",  "distributed memory" -  http://www.hazelcast.com/, http://www.terracotta.org/, e.t.c.

Спасибо, но вы знаете я пока посмотрел hazlcast. Я могу вам с уверенностью сказать - да, вот это я реализовал. Уже достаточно давно в своей программе, вот этого я и добиваюсь, вот только чтобы клиент динамически реагировал на изменение модели данных они везде используют листенеры. Это не удобно, не практично. Да, это динамично, но не удобно!

У меня приложение 45 объектов. В программе мне приходится создавать 45 слушаетелей и вешать их на клиенты, 45 методов чтоб получать на клиентах модели.

Это все работает, также как и с hazlcast, тоже rmi callback. Я хоч упростить, "облегчить" свой код, упростить создание новых объектов и их связей в системе, использование hazlcast тоже самое что и сейчас у меня - проблему не решает =(((

Вторую ссылку сейчас посмотрю. Спасибо Вам еще раз.

Это сообщение отредактировал(а) cube - 4.10.2010, 19:42
PM MAIL   Вверх
COVD
Дата 4.10.2010, 19:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата

В программе мне приходится создавать 45 слушаетелей и вешать их на клиенты


Да, на каждую коллекцию ("список" или Map) нужен слушатель и у него 4 метода : entryAdded(EntryEvent ee) , entryRemoved(EntryEvent ee) , entryUpdated(EntryEvent ee), entryEvicted(EntryEvent ee) . И это правильно. Что тут неудобного.
Другое дело, что клиент, защищенный файерволом, возможно не сможет участвовать. 





Это сообщение отредактировал(а) COVD - 4.10.2010, 20:07
PM MAIL   Вверх
cube
Дата 5.10.2010, 20:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(COVD @ 4.10.2010,  19:45)
Что тут неудобного.

В том что у меня на сервере есть свои листенеры, которые отвечают за сохраноость данных в базе и изменения модели. При изменение объекта, удаление его, они и вызывают определнные методы. 

Согласитесь не удобно:

Изменился объект Город, он сообщил об этом СпискуГородов, изменил свою модель, записал в бд, СписокГородов сообщил Серверу, Сервер сообщил подключенным к нему клиентам, клиенты если работают с этим списком запросили новую модель и установили себе.

Удобно:

Изменился объект Город, он сообщил об этом СпискуГородов, изменил свою модель, записал в бд.

(СписокГородов больше никому ничего не сообщает! Клиенты уже давно получили на него ссылку и работают только с моделью данных, которая менятеся на сервере, и все листенеры там)

спасибо за помощь, покапаюсь может что-то упрощу в своем коде.


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

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

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


 




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


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

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