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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> EntityContext, как получить getEnvironment() 
:(
    Опции темы
Rusico
Дата 18.7.2007, 10:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Здрасти всем.

Продолжая мучать JBoss и себя:

Есть бин, который имеет ссылку на другой бин. Из клиентской проги надо достучаться до первого бина, а через него до второго.
Клиент и JBoss в разных JVM, т.е. как я понимаю через Container Managed Relationship это не реализовать из-за 
необходимости использования локальных интерфейсов.
    Я пошёл другим путём - использую удалённые интерфейсы - всё работает, но на поиск компонента (получение домашнего интерфейса) 
уходит много времени. Компонентов может быть очень много, и каждый раз осуществлять поиск накладно. 
Отсюда вопрос:
  Можно ли как-то кэшировать ссылки на домашние интерфейсы компонент для доступа к ним из других бинов?

Добавлено через 3 минуты и 9 секунд
да, забыл про тему:

я думаю что можно хранить ссылки в EntityContext.getEnvironment()

но когда я вызываю этот метод из бина - вылетает ошибка EJBException Deprecated
PM MAIL   Вверх
AntonSaburov
Дата 18.7.2007, 13:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

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



Цитата(Rusico @  18.7.2007,  10:26 Найти цитируемый пост)
Можно ли как-то кэшировать ссылки на домашние интерфейсы компонент для доступа к ним из других бинов?

Может попробовать сделать их SessionFull ? ТОгда по идее они должны быстрее подниматься.
А по поводу хранения ссылки - надо почитать - где-то я такое смотрел. Если найду - напишу

PM MAIL WWW ICQ   Вверх
Rusico
Дата 18.7.2007, 13:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



конечно можно было бы сделать так:

 Entity Bean будут лиш отображением строк в таблице БД,
 А всю логику отношений между этими бинами реализовать в Session Bean.

Но мне как-то не нравится этот способ - некрасиво получается.

Я уж даже и не знаю: если не получится, то придётся писать используя чистый RMI, 
хотя идея EJB очень привлекательна.

PM MAIL   Вверх
ekr
Дата 18.7.2007, 14:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


...и это пройдет...
**


Профиль
Группа: Участник
Сообщений: 359
Регистрация: 6.5.2007
Где: Moscow, RU

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



Цитата(Rusico @  18.7.2007,  10:26 Найти цитируемый пост)
Я пошёл другим путём - использую удалённые интерфейсы - всё работает, но на поиск компонента (получение домашнего интерфейса) 
уходит много времени.

Т.е. в stateless или stateful-бине (клиенте) инкапсулируется логика поиска связанного с основным дочернего entity-бина? Да, так можно делать и частенько такие решения встречаются. Но это неудобно, т.к. усложняется код клиента для entity-бинов. Лучше пользоваться cmr (relations).

Цитата(Rusico @  18.7.2007,  10:26 Найти цитируемый пост)
но на поиск компонента (получение домашнего интерфейса) 
уходит много времени. 

надо кешировать домашний объект. Соответственно:
Цитата(Rusico @  18.7.2007,  10:26 Найти цитируемый пост)
Можно ли как-то кэшировать ссылки на домашние интерфейсы компонент для доступа к ним из других бинов?

в entity-бине сделать свойство типа фабрики и инициализировать его в setEntityContext

Но, в целом, могу порекомендовать другой подход. Этот же подход рекомендуют bea и ibm )))
Следует все-таки пользоваться CMP-relations, а проблема доступа к ним из удаленного клиента решается следующим образом: создается метод в удаленном интерфейсе (доступен удаленным клиентам), который локально работает с cmr-полями, а удаленному клиенту отдает Value Objects, т.е. обычные pojo, залитые свойствами связанного объекта.


--------------------
и это пройдет....

http://ekrs.blogspot.com
PM WWW   Вверх
AntonSaburov
Дата 18.7.2007, 15:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

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



Цитата(Rusico @  18.7.2007,  13:52 Найти цитируемый пост)
Entity Bean будут лиш отображением строк в таблице БД,

Цитата(ekr @  18.7.2007,  14:33 Найти цитируемый пост)
удаленному клиенту отдает Value Objects, т.е. обычные pojo, залитые свойствами связанного объекта. 

Вообщем-то этот вариант действительно считается предпочтительным. Думаю, что он может ускорить. Покопайтесь - может и правда получится ускорится
PM MAIL WWW ICQ   Вверх
Rusico
Дата 18.7.2007, 15:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата

в entity-бине сделать свойство типа фабрики и инициализировать его в setEntityContext


как я понимаю setEntityContext вызывается каждый раз при создании бина?
Если так, то я не понимаю - ну создам я свойство в бине, а как его инициализировать, ведь если
setEntityContext вызывается каждый раз при создании бина то и инициализация (получение ссылок) будет 
вызываться каждый раз? или нет? поясните плз.

Цитата

создается метод в удаленном интерфейсе (доступен удаленным клиентам), который локально работает с cmr-полями, а удаленному клиенту отдает Value Objects, т.е. обычные pojo, залитые свойствами связанного объекта.


Т.Е. создаётся Session Bean, который локально работает с Entity Beans, а возвращает "всё что угодно" (String, Collection и т.п.) кроме самого компонента (ссылки на него)?
PM MAIL   Вверх
ekr
Дата 18.7.2007, 17:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


...и это пройдет...
**


Профиль
Группа: Участник
Сообщений: 359
Регистрация: 6.5.2007
Где: Moscow, RU

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



Цитата(Rusico @  18.7.2007,  15:54 Найти цитируемый пост)
поясните плз.

Вам нужно инфы? Их есть у меня )))

У entity-бина сложный жизненный цикл. Изначально создается пул bean instances. В пуле бины - это просто пустые болваночки, несвязанные пока с конкретным значением pk. На этих болваночках отрабатывают finder- и home-методы. При создании этой болваночки вызывается setEntCtx у неё.
Затем, когда клиенту понадобятся конкретные данные, он вызывает create или find у фабрики. Фабрика выбирает произвольную болваночку из пула, ассоциирует с ней занчение pk и, возможно, заливает в неё данные из базы. Теперь этот bean instance уже не в пуле, а в кеше (состояние ready).
Перемещение объекта из пула в кеш и обратно может происходить когда угодно, это называется пассивизация/активизация.

Это сообщение отредактировал(а) ekr - 18.7.2007, 17:30

Присоединённый файл ( Кол-во скачиваний: 9 )
Присоединённый файл  entity_bean_lf.png 16,42 Kb


--------------------
и это пройдет....

http://ekrs.blogspot.com
PM WWW   Вверх
ekr
Дата 18.7.2007, 17:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


...и это пройдет...
**


Профиль
Группа: Участник
Сообщений: 359
Регистрация: 6.5.2007
Где: Moscow, RU

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



Цитата(Rusico @  18.7.2007,  15:54 Найти цитируемый пост)
Т.Е. создаётся Session Bean, который локально работает с Entity Beans, а возвращает "всё что угодно" (String, Collection и т.п.) кроме самого компонента (ссылки на него)? 

Да. Обычно "всё что угодно" - это pojo:
Цитата(ekr @  18.7.2007,  14:33 Найти цитируемый пост)
Value Objects, т.е. обычные pojo, залитые свойствами связанного объекта.



Это сообщение отредактировал(а) ekr - 18.7.2007, 17:29


--------------------
и это пройдет....

http://ekrs.blogspot.com
PM WWW   Вверх
Rusico
Дата 18.7.2007, 19:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Эх жаль smile - видимо EJB всё-таки оправдан для очень сильно распределённых приложений

Добавлено через 4 минуты и 18 секунд
У меня в БД есть 10000 записей (в таблице), они отображаются в Entity Beans, так вот поиск через findAll() работает настолько 
медленно (0,5-2 мин), что видимо придётся глядеть в сторону простого RMI.
 (Просто через RMI та же работа выполняется за 8 с., а прямая выборка из БД за1-2 с.)
PM MAIL   Вверх
ekr
Дата 18.7.2007, 20:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


...и это пройдет...
**


Профиль
Группа: Участник
Сообщений: 359
Регистрация: 6.5.2007
Где: Moscow, RU

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



Цитата(Rusico @  18.7.2007,  19:57 Найти цитируемый пост)
Эх жаль

а чего жаль-то? ))))
Цитата(Rusico @  18.7.2007,  19:57 Найти цитируемый пост)
видимо EJB всё-таки оправдан для очень сильно распределённых приложений

да нет, и локально они себя отлично чувствуют ))))

Добавлено @ 20:08
Цитата(Rusico @  18.7.2007,  19:57 Найти цитируемый пост)
У меня в БД есть 10000 записей (в таблице), они отображаются в Entity Beans, так вот поиск через findAll() работает настолько 
медленно (0,5-2 мин),

никогда не надо тянуть всю таблицу. любой фреймворк обломается. приложение очень сильно немасштабируемое получается. представь, если все клиенты кинутся смотреть? ))))
показывать следует пользователю страницами по N записей.
Цитата(Rusico @  18.7.2007,  19:57 Найти цитируемый пост)
что видимо придётся глядеть в сторону простого RMI.
 (Просто через RMI та же работа выполняется за 8 с., а прямая выборка из БД за1-2 с.) 

да, entity-бины не демонстрируют рекорды скорости, не для этого они. 

Цитата

так вот поиск через findAll() работает настолько медленно (0,5-2 мин),

к слову, если совсем уж все тормозит, то надо посмотреть в сторону оптимизации. может, неправильно установлены размеры пула и кеша, так что при загрузке большого количества бинов из базы просто своп сплошной получается (((

Это сообщение отредактировал(а) ekr - 18.7.2007, 20:17


--------------------
и это пройдет....

http://ekrs.blogspot.com
PM WWW   Вверх
Rusico
Дата 18.7.2007, 20:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



мне бы хотелось всё-таки оперировать не чем угодно, а объектами - а это накладненько :(
PM MAIL   Вверх
ekr
Дата 18.7.2007, 20:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


...и это пройдет...
**


Профиль
Группа: Участник
Сообщений: 359
Регистрация: 6.5.2007
Где: Moscow, RU

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



Цитата(Rusico @  18.7.2007,  20:08 Найти цитируемый пост)
мне бы хотелось всё-таки оперировать не чем угодно, а объектами - а это накладненько :( 

да, накладно.
лучше логику работы со связанными (cmr) сущностями переместить в локальный для них session-бин (шаблон session facade).


--------------------
и это пройдет....

http://ekrs.blogspot.com
PM WWW   Вверх
Rusico
Дата 18.7.2007, 20:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Покалупаюсь исчо, попробую как-нибуть оптимизировать работу smile

Спасибо за дискуссию.
PM MAIL   Вверх
ekr
Дата 18.7.2007, 20:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


...и это пройдет...
**


Профиль
Группа: Участник
Сообщений: 359
Регистрация: 6.5.2007
Где: Moscow, RU

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



Цитата(Rusico @  18.7.2007,  20:18 Найти цитируемый пост)
Покалупаюсь исчо

оптимизируйте, они золотые (С)золотой теленок
)))


--------------------
и это пройдет....

http://ekrs.blogspot.com
PM WWW   Вверх
AlexeyVorotnikov
Дата 19.7.2007, 08:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(ekr @  18.7.2007,  21:01 Найти цитируемый пост)
да, entity-бины не демонстрируют рекорды скорости, не для этого они.

А для чего они?


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

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

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


 




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


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

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