|
|
|
CMP EJB
|
|||
|---|---|---|---|
|
#18+
Ковыряю CMP EntityBeans. Есть два вопроса: 1. CMR (Relationships). Допустим есть связь один ко многим "Merchant - Product", и эта связь двухсторонняя, т.е. - имея Product можно получить его Merchant, - имея Merchant можно получить его Products (Collection или Set) Если я достаю (findByPrimaryKey() к примеру) Product, контейнер автоматом цепляет к нему Merchant a . А вот что будет если я достаю Merchant a и у этого мерчанта 100000 Product ов в базе? Будет произведена выборка всех 100000 продуктов в Collection/Set? 2. Pagination. Все те же продукты - те же 100000. Необходимо смотреть их через веб-интерфейс. Как реализовать разбитие на страницы, т.е. выборку определенного числа записей с определенным смещением? Спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2005, 11:20 |
|
||
|
CMP EJB
|
|||
|---|---|---|---|
|
#18+
Legka 1. CMR (Relationships). Если я достаю (findByPrimaryKey() к примеру) Product, контейнер автоматом цепляет к нему Merchant a . не обязательно. Зависит от реализации AS. Legka А вот что будет если я достаю Merchant a и у этого мерчанта 100000 Product ов в базе? Будет произведена выборка всех 100000 продуктов в Collection/Set? Все зависит от реализации AS. Некоторые сервера вычитывают сразу все бины, некоторые вычитывают только их первичные ключи, а некоторые вычитают при первом вызове метода getProducts(). В некоторых серверах (например Weblogic) этим можно управлять. Это не специфицировано. Legka 2. Pagination. Все те же продукты - те же 100000. Необходимо смотреть их через веб-интерфейс. Как реализовать разбитие на страницы, т.е. выборку определенного числа записей с определенным смещением? Какая версия спецификации и какой сервер? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2005, 11:56 |
|
||
|
CMP EJB
|
|||
|---|---|---|---|
|
#18+
AS - JBoss 4.0.2, EJB 2.0 На JBoss.org пишется, что начиная с версии 4.0.3 поддерживается EJB 3.0, в которой в свою очередь есть Pagination Support. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2005, 12:14 |
|
||
|
CMP EJB
|
|||
|---|---|---|---|
|
#18+
LegkaAS - JBoss 4.0.2, EJB 2.0 На JBoss.org пишется, что начиная с версии 4.0.3 поддерживается EJB 3.0, в которой в свою очередь есть Pagination Support. в EJB 2.0 это обычно делается через stateful session beanы, но тогда на каждую сессиию у тебя будет в памяти массив из 100000 ProductVO ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2005, 14:16 |
|
||
|
CMP EJB
|
|||
|---|---|---|---|
|
#18+
честно говоря, для bulk -запросов (больше 10000 записей) EJB не принято юзать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2005, 14:25 |
|
||
|
CMP EJB
|
|||
|---|---|---|---|
|
#18+
jdev333честно говоря, для bulk -запросов (больше 10000 записей) EJB не принято юзать не совсем так. BMP - однозначно не принято. если AS простенький типа SunOne с известной проблемой N+1 запроса - то тоже не принято. монстры типа WebLogic и WebSphere - достаточно производительно обрабатывают эти объемы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2005, 14:36 |
|
||
|
CMP EJB
|
|||
|---|---|---|---|
|
#18+
Белый тем не менее, в том же WebLogic 8.х по умолчанию максим число бинов в кэше для CMP - 1000. То есть, по умолчанию, считается, что больше, чем 1000 бинов загружаться в запросе не будут (загрузить 1001 клиентов и пробежаться по ним не получится) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2005, 14:43 |
|
||
|
CMP EJB
|
|||
|---|---|---|---|
|
#18+
jdev333Белый тем не менее, в том же WebLogic 8.х по умолчанию максим число бинов в кэше для CMP - 1000. То есть, по умолчанию, считается, что больше, чем 1000 бинов загружаться в запросе не будут (загрузить 1001 клиентов и пробежаться по ним не получится) все верно, если finder вернет 1001 строку, то вылетит ошибка CacheFullException. параметр "максимальное количество бинов в кеше" увеличивается до необходимых пределов и тогда все загружается. P.S. непонятно чем руководствовались программисты из BEA, установив этот параметр в 1000, и не дав возможность поменять это умолчание для всех бинов в проекте!!! приходится руками во многих бинах прописывать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2005, 14:52 |
|
||
|
CMP EJB
|
|||
|---|---|---|---|
|
#18+
Белый Злые они :) Контейнеры EJB "тяжеловесны". Тот же Hibernate противопоставляется EJB в том числе и по этому параметру. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2005, 14:57 |
|
||
|
CMP EJB
|
|||
|---|---|---|---|
|
#18+
jdev333 Злые они :) и очень жадные :-) jdev333 Контейнеры EJB "тяжеловесны". Тот же Hibernate противопоставляется EJB в том числе и по этому параметру. вот уже сколько лет в продакшене использую EJB-сервера, но так и не нахожу подтверждения их "тяжеловесности"... мне кажется что "тяжеловесность", "медлительность", "ресурсоемкость" - это стереотипы, которые муссируются продавцами альтернативных технологий :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2005, 15:08 |
|
||
|
CMP EJB
|
|||
|---|---|---|---|
|
#18+
Что тогда посоветуете? Использовать Stateless SessionBeans, в которых реализовать пейджинг на уровне SQL? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2005, 11:25 |
|
||
|
CMP EJB
|
|||
|---|---|---|---|
|
#18+
LegkaЧто тогда посоветуете? Использовать Stateless SessionBeans, в которых реализовать пейджинг на уровне SQL? Сессии есть? Сортировка нужна или нет? Какое кол-во записей на странице и какое общее? (с точностью до порядка). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2005, 17:48 |
|
||
|
CMP EJB
|
|||
|---|---|---|---|
|
#18+
LegkaЧто тогда посоветуете? Использовать Stateless SessionBeans, в которых реализовать пейджинг на уровне SQL? Сколько конкурентных пользователей? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2005, 17:50 |
|
||
|
CMP EJB
|
|||
|---|---|---|---|
|
#18+
Белый Контейнеры EJB "тяжеловесны". Тот же Hibernate противопоставляется EJB в том числе и по этому параметру. вот уже сколько лет в продакшене использую EJB-сервера, но так и не нахожу подтверждения их "тяжеловесности"... мне кажется что "тяжеловесность", "медлительность", "ресурсоемкость" - это стереотипы, которые муссируются продавцами альтернативных технологий :-)[/quot] Если Вы такое говорите, то значит никогда не развертывали приложение, в котором бизнес-метод должен работать одновременно с большим количеством Entities (>1000) - это очень накладно для любого сервера - и это только один метод . Поисковыые методы и методы выборки не годятся для достаточно критичного в плане производительности приложения - кстати Вы часто используете методы выборки Уже сама CPG по EJB признала что использование EJB 2.0/2.1 достаточно накладно в плане сетевой производительности и т.д. Поэтому появляется EJB3, в котором CPG пытается избавиться от многих недостатков EJB3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2005, 18:35 |
|
||
|
CMP EJB
|
|||
|---|---|---|---|
|
#18+
Legka Что тогда посоветуете? Использовать Stateless SessionBeans, в которых реализовать пейджинг на уровне SQL? То что пейжинг должен быть на уровне SQL - это очевидная вещь... Тащить на клиента (апп сервер) всю выборку - это идеологически неверное решение! Тут даже спорить не о чем ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2005, 18:38 |
|
||
|
CMP EJB
|
|||
|---|---|---|---|
|
#18+
Добавлю еще одно замечание, которое может оказаться существенным. Клиентом для JBoss'а выступает удаленное веб-приложение на томкате. Насколько "удаленное" пока еще тоже вопрос. To Белый: Сессии есть на уровне логина юзера на томкате. Сортировка нужна. Записей на странице 10-20. Насчет общего числа - это должно быть "scalable solution" - цитата из требований: Код: plaintext 1. 2. 3. 4. Насчет конкурентных пользователей затрудняюсь ответить, может есть какая-нибудь методика расчета позволяющая хоть приблизительно оценить этот параметр? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2005, 11:08 |
|
||
|
CMP EJB
|
|||
|---|---|---|---|
|
#18+
To Legka: В Вашем случае использовать Entity bean-ы я бы не стал. Entity bean-ы не задумывались для обработки больших объемов данных. Они более эффективны на небольших объемах при большом количестве конкурентных пользователей. В Вашем случае, использование прямых запросов к БД дадут бОльшую производительность. P.S. Какое количество считать большим, а какое нет - зависит от J2EE-сервера, железа, СУБД... Я, в конфигурации Weblogic-Oracle, обычно на одновременных выборках до десятков тысяч записей использую Entity bean-ы, при больших - начинаю использовать прямые запросы к БД. KPIIS ...бизнес-метод должен работать одновременно с большим количеством Entities (>1000) - это очень накладно для любого сервера - и это только один метод.Поисковыые методы и методы выборки не годятся для достаточно критичного в плане производительности приложения Привожу пример когда использование Entities более производительно нежели прямой доступ к БД. 1000 записей преобразовывеатся в массив VO через SQL из SB - например, за 1 сек. 1000 записей преобразовывеатся в массив VO через Entities - например, за 10 сек. Но если у вас одновременно 100 клиентов запрашивают эту выборку, то SQL из SB даст 100*1 сек = 100 сек, а при использование Entities будут все те же 10 сек! (выборка из БД будет выполнена ОДИН раз) (Временем на создание java-объекты можно пренебречь). Подытожу, при прямом доступе к БД сервер тратит ресурсы (на "вычитку" данных из БД) пропорционально количеству одновременных запросов, а при использовании Entity Bean-ов - вычитка происходит ОДИН раз (во время 1-й транзакции следующие клиенты берут активированные экземпляры из кеша). KPIIS - кстати Вы часто используете методы выборки нет. до сих пор обходился без них. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2005, 17:31 |
|
||
|
CMP EJB
|
|||
|---|---|---|---|
|
#18+
Белый Привожу пример когда использование Entities более производительно нежели прямой доступ к БД.... А вы entity bean'ы с кешированием не путаете? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2005, 22:12 |
|
||
|
CMP EJB
|
|||
|---|---|---|---|
|
#18+
funikovyuri Белый Привожу пример когда использование Entities более производительно нежели прямой доступ к БД.... А вы entity bean'ы с кешированием не путаете? нет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2005, 11:04 |
|
||
|
CMP EJB
|
|||
|---|---|---|---|
|
#18+
БелыйTo Legka: Подытожу, при прямом доступе к БД сервер тратит ресурсы (на "вычитку" данных из БД) пропорционально количеству одновременных запросов, а при использовании Entity Bean-ов - вычитка происходит ОДИН раз (во время 1-й транзакции следующие клиенты берут активированные экземпляры из кеша). Вы абсолютно правы. Но формально. Не учитывается то обстоятельство, что подмножество объектов, с которыми клиенты работают при вводе и обновлении данных, обычно ограничено ("сиюминутные", "актуальные" объекты). Здесь вы безусловно получаете выигрыш. Ну, например, при вводе и обработке заказов актуальным может быть определенное подмножество продуктов и поставщиков; кэширование этой информации как раз и дает выигрыш. При просмотре же данных и при составлении отчетов нужны исторические данные. То есть 1) разным клиентам - разные типы данных и 2) даже если одни и те же типы, то различно фильтрованные. То есть в этом случае каждый отдельный объект в определенном достаточно большом промежутке данных нужен только один (ну, несколько) раз. Вот в этом случае кэши и начнут тормозить. В итоге товарищу следует оставить EJB их работу - использование при вводе и обработке данных. Выборки данных следует делать средствами "явного одноразового чтения" - либо писать функции с использованием JDBC/SQL, либо (если нужна какая-то степень абстрагирования от СУБД или упрощение прикладного кода) использовать ORM средства типа Hibernate. При этом важно эти средства настроить только на ЧТЕНИЕ, например, определить Hibernate mappings как mutable="false". EJB контейнер должен быть уверен, что все обновления в данных делаются только через entity beans (и сконфигурирован соответственно), иначе он начнет перечитывать объекты при каждом обращении к ним. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2005, 11:34 |
|
||
|
CMP EJB
|
|||
|---|---|---|---|
|
#18+
Белый Да? А мне все кажется что путаете - так как приводите кэширование в качестве преимущества entity bean'ов... Должен вам сообщить, что кэшировать полученные от БД данные можно и без EB... Более того тот же Hibernate отлично умеет это делать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2005, 12:09 |
|
||
|
CMP EJB
|
|||
|---|---|---|---|
|
#18+
funikovyuri Белый Да? А мне все кажется что путаете - так как приводите кэширование в качестве преимущества entity bean'ов... Должен вам сообщить, что кэшировать полученные от БД данные можно и без EB... Более того тот же Hibernate отлично умеет это делать Спасибо... а то мы не знали... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2005, 16:43 |
|
||
|
CMP EJB
|
|||
|---|---|---|---|
|
#18+
Я хотел сказать, что с использованием только Hibernate и грамотной настройкой кэширования можно добиться того эффекта, который описал т. Белый. Но человек-то хочет EJB... или ему навязывают... вот мы про EJB и толкуем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2005, 17:15 |
|
||
|
CMP EJB
|
|||
|---|---|---|---|
|
#18+
М.Голованов Спасибо... а то мы не знали... авторПривожу пример когда использование Entities более производительно нежели прямой доступ к БД. Мой пост был ответом на это заявление и его суть сводится к тому что пример сильно натянут ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2005, 18:13 |
|
||
|
CMP EJB
|
|||
|---|---|---|---|
|
#18+
М.ГоловановЯ хотел сказать, что с использованием только Hibernate и грамотной настройкой кэширования можно добиться того эффекта, который описал т. Белый. Но человек-то хочет EJB... или ему навязывают... вот мы про EJB и толкуем. EJB3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2005, 21:37 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=33369606&tid=2151012]: |
0ms |
get settings: |
4ms |
get forum list: |
8ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
142ms |
get topic data: |
6ms |
get forum data: |
1ms |
get page messages: |
35ms |
get tp. blocked users: |
1ms |
| others: | 218ms |
| total: | 419ms |

| 0 / 0 |
