Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / CMP EJB / 25 сообщений из 28, страница 1 из 2
02.11.2005, 11:20
    #33356945
Legka
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CMP EJB
Ковыряю 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. Необходимо смотреть их через веб-интерфейс. Как реализовать разбитие на страницы, т.е. выборку определенного числа записей с определенным смещением?

Спасибо!
...
Рейтинг: 0 / 0
02.11.2005, 11:56
    #33357065
Белый
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CMP EJB
Legka
1. CMR (Relationships).
Если я достаю (findByPrimaryKey() к примеру) Product, контейнер автоматом цепляет к нему Merchant a .

не обязательно. Зависит от реализации AS.

Legka
А вот что будет если я достаю Merchant a и у этого мерчанта 100000 Product ов в базе? Будет произведена выборка всех 100000 продуктов в Collection/Set?

Все зависит от реализации AS. Некоторые сервера вычитывают сразу все бины, некоторые вычитывают только их первичные ключи, а некоторые вычитают при первом вызове метода getProducts().
В некоторых серверах (например Weblogic) этим можно управлять.
Это не специфицировано.

Legka
2. Pagination.
Все те же продукты - те же 100000. Необходимо смотреть их через веб-интерфейс. Как реализовать разбитие на страницы, т.е. выборку определенного числа записей с определенным смещением?

Какая версия спецификации и какой сервер?
...
Рейтинг: 0 / 0
02.11.2005, 12:14
    #33357145
Legka
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CMP EJB
AS - JBoss 4.0.2, EJB 2.0
На JBoss.org пишется, что начиная с версии 4.0.3 поддерживается EJB 3.0, в которой в свою очередь есть Pagination Support.
...
Рейтинг: 0 / 0
02.11.2005, 14:16
    #33357567
Белый
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CMP EJB
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
...
Рейтинг: 0 / 0
02.11.2005, 14:25
    #33357594
jdev333
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CMP EJB
честно говоря, для bulk -запросов (больше 10000 записей) EJB не принято юзать
...
Рейтинг: 0 / 0
02.11.2005, 14:36
    #33357651
Белый
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CMP EJB
jdev333честно говоря, для bulk -запросов (больше 10000 записей) EJB не принято юзать
не совсем так. BMP - однозначно не принято.
если AS простенький типа SunOne с известной проблемой N+1 запроса - то тоже не принято.
монстры типа WebLogic и WebSphere - достаточно производительно обрабатывают эти объемы.
...
Рейтинг: 0 / 0
02.11.2005, 14:43
    #33357686
jdev333
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CMP EJB
Белый
тем не менее, в том же WebLogic 8.х по умолчанию максим число бинов в кэше для CMP - 1000. То есть, по умолчанию, считается, что больше, чем 1000 бинов загружаться в запросе не будут (загрузить 1001 клиентов и пробежаться по ним не получится)
...
Рейтинг: 0 / 0
02.11.2005, 14:52
    #33357728
Белый
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CMP EJB
jdev333Белый
тем не менее, в том же WebLogic 8.х по умолчанию максим число бинов в кэше для CMP - 1000. То есть, по умолчанию, считается, что больше, чем 1000 бинов загружаться в запросе не будут (загрузить 1001 клиентов и пробежаться по ним не получится)
все верно, если finder вернет 1001 строку, то вылетит ошибка CacheFullException.

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

P.S. непонятно чем руководствовались программисты из BEA, установив этот параметр в 1000, и не дав возможность поменять это умолчание для всех бинов в проекте!!! приходится руками во многих бинах прописывать.
...
Рейтинг: 0 / 0
02.11.2005, 14:57
    #33357747
jdev333
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CMP EJB
Белый

Злые они :)

Контейнеры EJB "тяжеловесны". Тот же Hibernate противопоставляется EJB в том числе и по этому параметру.
...
Рейтинг: 0 / 0
02.11.2005, 15:08
    #33357808
Белый
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CMP EJB
jdev333
Злые они :)

и очень жадные :-)
jdev333
Контейнеры EJB "тяжеловесны". Тот же Hibernate противопоставляется EJB в том числе и по этому параметру.
вот уже сколько лет в продакшене использую EJB-сервера, но так и не нахожу подтверждения их "тяжеловесности"...
мне кажется что "тяжеловесность", "медлительность", "ресурсоемкость" - это стереотипы, которые муссируются продавцами альтернативных технологий :-)
...
Рейтинг: 0 / 0
03.11.2005, 11:25
    #33359547
Legka
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CMP EJB
Что тогда посоветуете? Использовать Stateless SessionBeans, в которых реализовать пейджинг на уровне SQL?
...
Рейтинг: 0 / 0
03.11.2005, 17:48
    #33360930
Белый
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CMP EJB
LegkaЧто тогда посоветуете? Использовать Stateless SessionBeans, в которых реализовать пейджинг на уровне SQL?
Сессии есть? Сортировка нужна или нет? Какое кол-во записей на странице и какое общее? (с точностью до порядка).
...
Рейтинг: 0 / 0
03.11.2005, 17:50
    #33360937
Белый
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CMP EJB
LegkaЧто тогда посоветуете? Использовать Stateless SessionBeans, в которых реализовать пейджинг на уровне SQL?
Сколько конкурентных пользователей?
...
Рейтинг: 0 / 0
03.11.2005, 18:35
    #33361072
KPIIS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CMP EJB
Белый
Контейнеры EJB "тяжеловесны". Тот же Hibernate противопоставляется EJB в том числе и по этому параметру.
вот уже сколько лет в продакшене использую EJB-сервера, но так и не нахожу подтверждения их "тяжеловесности"...
мне кажется что "тяжеловесность", "медлительность", "ресурсоемкость" - это стереотипы, которые муссируются продавцами альтернативных технологий :-)[/quot]
Если Вы такое говорите, то значит никогда не развертывали приложение, в котором бизнес-метод должен работать одновременно с большим количеством Entities (>1000) - это очень накладно для любого сервера - и это только один метод . Поисковыые методы и методы выборки не годятся для достаточно критичного в плане производительности приложения - кстати Вы часто используете методы выборки
Уже сама CPG по EJB признала что использование EJB 2.0/2.1 достаточно накладно в плане сетевой производительности и т.д.

Поэтому появляется EJB3, в котором CPG пытается избавиться от многих недостатков EJB3
...
Рейтинг: 0 / 0
03.11.2005, 18:38
    #33361076
funikovyuri
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CMP EJB
Legka

Что тогда посоветуете? Использовать Stateless SessionBeans, в которых реализовать пейджинг на уровне SQL?

То что пейжинг должен быть на уровне SQL - это очевидная вещь... Тащить на клиента (апп сервер) всю выборку - это идеологически неверное решение! Тут даже спорить не о чем
...
Рейтинг: 0 / 0
04.11.2005, 11:08
    #33361482
Legka
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CMP EJB
Добавлю еще одно замечание, которое может оказаться существенным. Клиентом для JBoss'а выступает удаленное веб-приложение на томкате. Насколько "удаленное" пока еще тоже вопрос.

To Белый:
Сессии есть на уровне логина юзера на томкате. Сортировка нужна. Записей на странице 10-20. Насчет общего числа - это должно быть "scalable solution" - цитата из требований:
Код: plaintext
1.
2.
3.
4.
...
 Scalability 
Millions of buyers, millions of products, millions of orders, thousands of merchants
...

Насчет конкурентных пользователей затрудняюсь ответить, может есть какая-нибудь методика расчета позволяющая хоть приблизительно оценить этот параметр?
...
Рейтинг: 0 / 0
04.11.2005, 17:31
    #33361991
Белый
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CMP EJB
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
- кстати Вы часто используете методы выборки

нет. до сих пор обходился без них.
...
Рейтинг: 0 / 0
04.11.2005, 22:12
    #33362221
funikovyuri
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CMP EJB
Белый

Привожу пример когда использование Entities более производительно нежели прямой доступ к БД....

А вы entity bean'ы с кешированием не путаете?
...
Рейтинг: 0 / 0
09.11.2005, 11:04
    #33368356
Белый
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CMP EJB
funikovyuri Белый

Привожу пример когда использование Entities более производительно нежели прямой доступ к БД....

А вы entity bean'ы с кешированием не путаете?

нет
...
Рейтинг: 0 / 0
09.11.2005, 11:34
    #33368443
М.Голованов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CMP EJB
БелыйTo Legka:
Подытожу, при прямом доступе к БД сервер тратит ресурсы (на "вычитку" данных из БД) пропорционально количеству одновременных запросов, а при использовании Entity Bean-ов - вычитка происходит ОДИН раз (во время 1-й транзакции следующие клиенты берут активированные экземпляры из кеша).


Вы абсолютно правы. Но формально.

Не учитывается то обстоятельство, что подмножество объектов, с которыми клиенты работают при вводе и обновлении данных, обычно ограничено ("сиюминутные", "актуальные" объекты). Здесь вы безусловно получаете выигрыш. Ну, например, при вводе и обработке заказов актуальным может быть определенное подмножество продуктов и поставщиков; кэширование этой информации как раз и дает выигрыш.

При просмотре же данных и при составлении отчетов нужны исторические данные. То есть 1) разным клиентам - разные типы данных и 2) даже если одни и те же типы, то различно фильтрованные. То есть в этом случае каждый отдельный объект в определенном достаточно большом промежутке данных нужен только один (ну, несколько) раз. Вот в этом случае кэши и начнут тормозить.

В итоге товарищу следует оставить EJB их работу - использование при вводе и обработке данных. Выборки данных следует делать средствами "явного одноразового чтения" - либо писать функции с использованием JDBC/SQL, либо (если нужна какая-то степень абстрагирования от СУБД или упрощение прикладного кода) использовать ORM средства типа Hibernate. При этом важно эти средства настроить только на ЧТЕНИЕ, например, определить Hibernate mappings как mutable="false". EJB контейнер должен быть уверен, что все обновления в данных делаются только через entity beans (и сконфигурирован соответственно), иначе он начнет перечитывать объекты при каждом обращении к ним.
...
Рейтинг: 0 / 0
09.11.2005, 12:09
    #33368569
funikovyuri
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CMP EJB
Белый

Да? А мне все кажется что путаете - так как приводите кэширование в качестве преимущества entity bean'ов... Должен вам сообщить, что кэшировать полученные от БД данные можно и без EB... Более того тот же Hibernate отлично умеет это делать
...
Рейтинг: 0 / 0
09.11.2005, 16:43
    #33369511
М.Голованов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CMP EJB
funikovyuri Белый

Да? А мне все кажется что путаете - так как приводите кэширование в качестве преимущества entity bean'ов... Должен вам сообщить, что кэшировать полученные от БД данные можно и без EB... Более того тот же Hibernate отлично умеет это делать

Спасибо... а то мы не знали...
...
Рейтинг: 0 / 0
09.11.2005, 17:15
    #33369606
М.Голованов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CMP EJB
Я хотел сказать, что с использованием только Hibernate и грамотной настройкой кэширования можно добиться того эффекта, который описал т. Белый. Но человек-то хочет EJB... или ему навязывают... вот мы про EJB и толкуем.
...
Рейтинг: 0 / 0
09.11.2005, 18:13
    #33369760
funikovyuri
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CMP EJB
М.Голованов
Спасибо... а то мы не знали...

авторПривожу пример когда использование Entities более производительно нежели прямой доступ к БД.

Мой пост был ответом на это заявление и его суть сводится к тому что пример сильно натянут
...
Рейтинг: 0 / 0
09.11.2005, 21:37
    #33370003
коты
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CMP EJB
М.ГоловановЯ хотел сказать, что с использованием только Hibernate и грамотной настройкой кэширования можно добиться того эффекта, который описал т. Белый. Но человек-то хочет EJB... или ему навязывают... вот мы про EJB и толкуем.

EJB3.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / CMP EJB / 25 сообщений из 28, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]