![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| cube |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 291 Регистрация: 11.4.2007 Репутация: 2 Всего: 3 |
не знаю куда лучше было бы включить этот топик
Я использую модель вид контроллер в свинге, для создания JList, JTable, JComboBox. Мое приложение это клиент-сервер, на сервере я создаю DefaultListModel (например) и через RMI в клиенте получаю ее (модель) и запихиваю в компонент (JList). Все работает отлично, я использую шаблон RMI callback, и каждый раз при изменении модели на сервере вызываю методы на клиенте и устанавливаю модель в свою компаненту. Как сделать чтобы модель изменяемая на сервере изменялась бы сама на клиенте без вызова дополнительный методов получения новой модели с сервера? надеюсь я понятно объяснил ;) сорри |
|||
|
||||
| Skipy |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 487 Регистрация: 24.8.2006 Где: Москва, Россия Репутация: 6 Всего: 16 |
В теории это делается следующим образом - сервер инициирует соединение с клиентским приложением и посылает обновление. На практике - большое количество клиентов приведет к тому, что сервер будет непрерывно рассылать уведомления, при том, что с большой вероятностью они клиенту не нужны (к тому моменту, когда понадобятся новые данные, клиент уже получит 20-30-40 обновлений вместо одного, по запросу)
Вам это вообще зачем? Чем не устраивает запрос модели? |
|||
|
||||
| cube |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 291 Регистрация: 11.4.2007 Репутация: 2 Всего: 3 |
Это самая лажовая реализация. Сейчас у меня приложение работает так: Загружается сервер, загружает данные с бд в память в ввиде объектов, загружаются клиенты, находят сервер в сети. Вызывают с сервера объекты в виде модели (TableModel ListModel и т.п.), отображают на экране, после любо1 из клиентов изменяет данные. Сервер производит сохранение данных и у всех клиентов дергает метод отвечающий за обновления этого типа данных (например списка услуг, списка книг, списка городов, т.п.) все клиенты обращаются к серверу и получают новую модель и устанавливают ее в свой граф интерфейс. Как сделать чтобы модель данных обновлялась на клиенте динамически? (не вызывая дополнительных методов на клиенте) Есть решение? Ведь я передаю 1 раз в самом начале модель данных графического интерфейса и по ссылке устанавливаю ее клиенту, после этого только сервер изменяет эту модель. Но на клиентах она не меняется, а по идеи должна. =) ! Я подозреваю что при передачи модели по сети происходит сериализация объекта, поэтому клиент получает как бы не ссылку на объект, а совершенно новый объект модели, естественно при таком раскладе, любые дальнейшие изменения модели на сервере не повлияют на модель которая находится у клиента. Это сообщение отредактировал(а) cube - 4.10.2010, 19:08 |
|||
|
||||
| COVD |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 26.7.2005 Репутация: 17 Всего: 43 |
"distributed cache", "distributed memory" - http://www.hazelcast.com/, http://www.terracotta.org/, e.t.c.
|
|||
|
||||
| cube |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 291 Регистрация: 11.4.2007 Репутация: 2 Всего: 3 |
представьте (если так будет понятней) вы делаете программу чат =)
Список сообщений храните на сервере, у вас 2 клиента которые ведут диалог. Каждый клиент отображает у себя список сообщений, имеет поле ввода нового сообщение и кнопку отправить. На клиентах JList отображает сообщения, DefaultListModel модель сообщений хранящаяся на сервере, бд у вас нет (нет задачи сохранять мессаджи). Как бы вы поступили в данной ситуации? спасибо |
|||
|
||||
| cube |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 291 Регистрация: 11.4.2007 Репутация: 2 Всего: 3 |
Спасибо, но вы знаете я пока посмотрел hazlcast. Я могу вам с уверенностью сказать - да, вот это я реализовал. Уже достаточно давно в своей программе, вот этого я и добиваюсь, вот только чтобы клиент динамически реагировал на изменение модели данных они везде используют листенеры. Это не удобно, не практично. Да, это динамично, но не удобно! У меня приложение 45 объектов. В программе мне приходится создавать 45 слушаетелей и вешать их на клиенты, 45 методов чтоб получать на клиентах модели. Это все работает, также как и с hazlcast, тоже rmi callback. Я хоч упростить, "облегчить" свой код, упростить создание новых объектов и их связей в системе, использование hazlcast тоже самое что и сейчас у меня - проблему не решает =((( Вторую ссылку сейчас посмотрю. Спасибо Вам еще раз. Это сообщение отредактировал(а) cube - 4.10.2010, 19:42 |
|||
|
||||
| COVD |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 26.7.2005 Репутация: 17 Всего: 43 |
Да, на каждую коллекцию ("список" или Map) нужен слушатель и у него 4 метода : entryAdded(EntryEvent ee) , entryRemoved(EntryEvent ee) , entryUpdated(EntryEvent ee), entryEvicted(EntryEvent ee) . И это правильно. Что тут неудобного. Другое дело, что клиент, защищенный файерволом, возможно не сможет участвовать. Это сообщение отредактировал(а) COVD - 4.10.2010, 20:07 |
|||
|
||||
| cube |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 291 Регистрация: 11.4.2007 Репутация: 2 Всего: 3 |
В том что у меня на сервере есть свои листенеры, которые отвечают за сохраноость данных в базе и изменения модели. При изменение объекта, удаление его, они и вызывают определнные методы. Согласитесь не удобно: Изменился объект Город, он сообщил об этом СпискуГородов, изменил свою модель, записал в бд, СписокГородов сообщил Серверу, Сервер сообщил подключенным к нему клиентам, клиенты если работают с этим списком запросили новую модель и установили себе. Удобно: Изменился объект Город, он сообщил об этом СпискуГородов, изменил свою модель, записал в бд. (СписокГородов больше никому ничего не сообщает! Клиенты уже давно получили на него ссылку и работают только с моделью данных, которая менятеся на сервере, и все листенеры там) спасибо за помощь, покапаюсь может что-то упрощу в своем коде. |
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |