Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > Persistent entities на клиентской стороне GWT


Автор: ivg 28.4.2009, 17:18
Интересует best practices по сабжу. Кто как делает?
Вкратце суть вопроса: Классы сущностей имеют взаимосвязи между собой и в некоторых случаях проход по прямым ссылкам может охватывать значительный объём информации. В Hibernate, например, проблема решается просто - данные извлекаются тогда, когда понадобятся. Для этого в рантайме классы сущностей могут быть заменены на прокси-классы для перехвата вызовов методов, используемых для получения связанных сущностей и т. д.
Вопрос: Каким образом организовать передачу информации, содержащуюся в объектах классов сущностей на клиентскую сторону GWT с помощью GWT-RPC, чтобы избежать "глубокой" сериализации, и, самое главное, SerializationException при попытках сериализации Hibernate'овских проксей?

Автор: intr 28.4.2009, 18:51
Может быть стоит взглянуть на эту штуку - http://noon.gilead.free.fr/gilead/

Автор: ivg 28.4.2009, 19:00
Цитата(intr @  28.4.2009,  20:51 Найти цитируемый пост)
Может быть стоит взглянуть на эту штуку - http://noon.gilead.free.fr/gilead/ 

Ага, спасибо. Покопаю.

Автор: COVD 28.4.2009, 22:08
А если на клиенте поток, перерисовывающий экран (в свинге это EventDispatchThread) обращается к ссылке, которая не инициализирована ("lazy" инициализация), то, очевидно, должен быть запрос по сети на доставку недостающих данных. Поток ждет ответа сервера? GUI замораживается?  

Автор: ivg 28.4.2009, 22:48
Цитата(COVD @  29.4.2009,  00:08 Найти цитируемый пост)
Поток ждет ответа сервера? GUI замораживается?

Нет. GWT, как и большинство AJAX приложений для доступа к серверу использует асинхронные вызовы http://ru.wikipedia.org/wiki/XMLHttpRequest

Автор: COVD 29.4.2009, 03:40
Понятно. Спасибо. Если позволите, еще вопрос. Типичная форма представления данных - таблица. Показали первые 10 строк. Пользователь сделал покрутку. Надо загрузить и показать следующие 5 строк. Очевидно, что предпочтительнее послать один запрос (а не 5) и по получении всех данных дать одну команду (а не 5) на перерисовку. Проработаны ли в Hibernate / GWT такие ситуации?  Или это искусство программиста?  

Автор: ivg 29.4.2009, 08:03
Цитата(COVD @  29.4.2009,  05:40 Найти цитируемый пост)
Проработаны ли в Hibernate / GWT такие ситуации?

Строго говоря, Hibernate тут не к месту упомянут, разве только если иметь ввиду возможность выборки данных, ограниченной некоторым диапазоном строк. В Hibernate такая возможность имеется, однако эффективность реализации этой фичи зависит от СУБД/драйвера.
Что же касается GWT, то его основная фича - это возможность реализовать браузерный JavaScript код на языке Java. Работа с элементами UI напоминает swing, но по сути, все операции по изменению UI сводятся к добавлению/удалению/изменению кодом JavaScript узлов в DOM Tree. Никаких paint()'ов там нет.
Я не совсем понял вопрос, но думаю что если бы речь шла об удалённом awt/swing клиенте, то ответ, о том проработано или нет, был бы таким же.
В расширениях GWT есть готовые UI компоненты, позволяющие организовать постраничный просмотр, а вот с прокруткой не помню, может и есть.

Цитата(COVD @  29.4.2009,  05:40 Найти цитируемый пост)
Очевидно, что предпочтительнее послать один запрос (а не 5) и по получении всех данных дать одну команду (а не 5)

совершенно не очевидно, если не знать конкретные цифры о кол-ве строк. Поэтому, видимо, всё таки, ответ будет:
Цитата(COVD @  29.4.2009,  05:40 Найти цитируемый пост)
это искусство программиста

PS: оффтопим smile 

Автор: COVD 29.4.2009, 12:42
Спасибо

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)