Форум программистов, компьютерный форум, киберфорум
Наши страницы
Java
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
oberon
0 / 0 / 0
Регистрация: 02.01.2009
Сообщений: 134
1

Почему ejbSelect так долго работает?!?

11.06.2009, 11:06. Просмотров 1393. Ответов 14
Метки нет (Все метки)

Подскажите пожалуйста, почему у меня некоторые ejbSelect так долго выполняются при ПЕРВОМ вызове - аж до 10 секунд. При повторных вызовах задержек не наблюдается, все пробегает хорошо. А другие селекты нормально и при первых вызовах работают. Меня интересует - это свойство сервера, селектов или я что не так пишу. В принципе есть варианты заменить на поиск программый - по коллекциям, с компараторами, но вот стоит ли?
Сервера пока все еще J2EE + Cloudscape.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.06.2009, 11:06
Ответы с готовыми решениями:

Магия Java или объясните, почему так
Здравствуйте, в процессе разработки, подбирая различный способы обработки...

Что-то работает не так
Написал игрушку, состоящую из мира, составленного из квадратов, и игрока,...

Почему не работает?
Программа class MyClass { int x;} public class My1 { public static...

Почему не работает?
Не понимаю почему не работает программа. Проблема вот в чем: я ввожу первое...

Почему не работает?
class MorskoyBoy { public static void main(String args) { int Sait =...

14
noir
11.06.2009, 18:28 2
Пул?
mr_dronski
3 / 3 / 1
Регистрация: 13.08.2008
Сообщений: 931
11.06.2009, 19:50 3
я бы сказал, что это первым делом от сервера зависит. в нормальных продуктах ты выставляешь минимальный размер пула для каждого бина, так что мы не сидим с 2 бинами в пуле, когда ожидается нагрузка в несколько сотен запросов в минуту.

не уверен, что в РИ такое можно делать. на то он и РИ. если сильно парит, то попробуй Sun ONE 7. само ядро было очень очень сильно переписано, но все тулзы должны более-менее оставаться схожими с предыдущим РИ. там на сайте есть версия для девелоперов.

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

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

такие пироги. если все-таки проблема не решается, так ты ее напрямую - через DAO решай
0
oberon
0 / 0 / 0
Регистрация: 02.01.2009
Сообщений: 134
11.06.2009, 21:01  [ТС] 4
Что такое DAO?
Насчет поиска по коллекциям я имел в виду именно компараторы, а то что он вернет мне не сами бины, а только ключи я знаю, но неужели будет дольше? Сейчас у меня один метод вызывает в ходе работы 5 селектов и каждый при первом вызове - 10 секунд. Караул! Страница грузится полторы минуты. А последующие вызовы пролетают мигом.
Насчет пула разьясните пожалуйста - не сталкивался еще. В дескрипторе это делается или в настройках сервера? Может на этом серваке и есть где, да найти трудно, когда не знаешь что искать. Из теории знаю общее про пулы, только Вы про какой пул говорите - бинов или сессионных методов (стейтлесс)?
0
mr_dronski
3 / 3 / 1
Регистрация: 13.08.2008
Сообщений: 931
11.06.2009, 22:25 5
про пулы. у каждого контейнера это прописывается в его дескрипторах (это vendor расширения). и выглядит это примерно так - ожидаем большую нагрузку на бин Inventory - значит, прописывает, что при старте приложения контейнер должен сходу создать, скажем 60 объектов в пуле. при повышении нагрузки не тратим время на создание классов (что в яве очень и очень узкое место). точно также и с сессионными бинами, правда их понадобится значительно меньше.

насколько я помню, в РИ такого не было, хотя давно это было уже.

даьше оптимизируем - load/fetch groups. это уже чисто про ентити бины. когда мы знаем, КАК будет использоваться бин, то можем указать, что при чтении поля ITEM_NAME (продолжаем про Inventory) сразу прочитать и поля AVAILABLE, DATE_IN, SUPPLIER. ну и т.д. То есть, мы знаем, что когда мы в проге читаем имя, мы запросим сразу и остальные поля для отображения в таблице. а они у нас уже - раз, и загружены в готовом виде, и обращений в базу данных (а попутно ejbLoad/ejbStore) не возникает. если понадобятся все остальные поля, то они читаются в обычном порядке, но мы знаем, что такое нечасто происходит, поэтому не переживаем. такое было замечено за Weblogic & JBoss, правда насчет последнего - далеко не все знакомы с этой фишкой в нем.

вот такие штуки могут оптимизировать запросы.

DAO: http://java.sun.com/blueprints/patterns/catalog.html

кликаем и на имени ДАО, и на [ACM01] под ним - один и тот же шаблон рассматривается, так что разобраться поможет.

вопрос - что такого страшного делается в бинах, что 5 селектов понадобилось в одном методе? я прекрасно знаю ограничения EJB QL, именно поэтому иногда лучше работать с базой напрямую через DAO (только не путайте это с DAO&ADO из ASP - совсем другое). пишем нормальные запросы со вложенными запросами и с joins, коли надо. поверьте, это будет работать часто лучше, чем юзать бины таким образом, как сейчас. а по поводу того, что там универсальность, переносимость - это отдельный разговор, но на практике не нужно тупо за этим гоняться, когда нужно просто нормально выполнить задачу.

если еще не встречались с DAO и другими шаблонами - вам прямая дорога на сайт выше, и сделать его заглавной страницей (а не www.anekdot.ru .

в плане РИ - может все-таки стоит попробовать перейти на нормальный сервер? а то если уже сейчас такие проблемы возникают...
0
oberon
0 / 0 / 0
Регистрация: 02.01.2009
Сообщений: 134
14.06.2009, 13:31  [ТС] 6
Да пока нет никаких запросов - мой ОДИН запрос, я еще только пишу систему - потому и сижу на J2EE - с него начинал, нехочется отвлекаться на переход на другой сервер. Вот напишу прикладные методы, тогда и займусь переездом, оформлением, оптимизацией. Да и deploytool у него удобный, у JBoss'а я вообще ничего визуального не нашел.
А писать на SQL прямые запросы не хочу по той же причине - нужно ведь знать имена таблиц (я пока использую создание таблиц самим сервером в процессе развертывания, у JBoss другие имена будут или я сам скрипт базы буду писать), да и с сервером БД пока не определился окончательно - в общем каждый раз скрипт придется заново сочинять и перекомпилировать классы.
А метод - обычный прикладной метод. Обход графа, рекурсия конечно, но это уже неважно - тормозит только первый вызов селекта. Может он вообще по умолчанию ни ОДНОГО бина не загружает?
Может действительно заморочиться все-таки на SQL? Скорость или универсальность?
0
oberon
0 / 0 / 0
Регистрация: 02.01.2009
Сообщений: 134
14.06.2009, 13:47  [ТС] 7
А стартовая страница у меня давно уже relib. А до этого всегда поисковик был. Если бы не инет, и конкретно не вы, мужики, я бы вообще наверно этим не смог заняться (писал бы что-нибудь на си и с акссесом) - то ли я плохо смотрел (и слушал), то ли нет у нас в Краснодаре по ejb людей.
Извиняюсь, что не по теме.
ДАО изучаю.
0
mr_dronski
3 / 3 / 1
Регистрация: 13.08.2008
Сообщений: 931
14.06.2009, 14:24 8
тут ответ реальный один - скорость. я сам люблю универсальность, но всему есть разумные пределы. а чтобы добавить универсальности ДАО методам, и сделали AbstractDAOFactory.

прикол в том, что если есть различия сильные в синтаксисе SQL, то делается Factory, которая и выдает нам для нашей базы различные DAO. а конкретное имя класса Factory в env-property. В бине там потом делаешь Class.forName(factoryName); а из нее уже получаешь ДАО под свою базу. интерфейсы ДАО одни и те же будут.

ну немного запутанно сначала может показаться. почитай потом на досуге этот шаблон хорошо. бины можно оставить для создания и update операций, а когда нужно прочитать просто весь список или большую выборку - юзаем ДАО.

да, скажем у JBoss и всех остальных серверов указывается и имя создаваемой таблицы, и имя колонки, и точный SQL type. ну, я думаю, тебе пока проблем хватает, а то еще возится с новыми технологиями..
0
vold
0 / 0 / 2
Регистрация: 17.08.2007
Сообщений: 222
14.06.2009, 16:01 9
2mr_dronski
>>правда насчет последнего - далеко не все знакомы с этой фишкой в нем -
можно про это чуть подробнее (у меня есть полная платная дока, но я действительно ничего такого в ней не находил) хоть где сия инфа находится,
Заранее спасибо.
0
noir
14.06.2009, 17:27 10
А что до того, что в Боссе нет ничего визуалного, так если честно и не особо надо... Я вот этот Deploytool из РИ тихо возненавидел после первого же проекта, а в Боссе все конкретно, в XML-формате...
mr_dronski
3 / 3 / 1
Регистрация: 13.08.2008
Сообщений: 931
14.06.2009, 19:49 11
а если еще и почитать доку полную (которую трудно найти, но мне разок повезло ее перехватить, когда ее выложили на полдня где-то на презентации , то вообще рулез становится

ну а если к этому добавить XDoclet, который спасает мне время и нервы вот уже около года, то задумываешься - а зачем вообще нужны эти тупые гуи?

так что работай пока с РИ, раз начал, но переходить на что-нибудь другое обязательно нужно будет.
0
mr_dronski
3 / 3 / 1
Регистрация: 13.08.2008
Сообщений: 931
14.06.2009, 19:50 12
2 vold.

возьми пдф-ку JBossCMP, Chapter 6.
0
mr_dronski
3 / 3 / 1
Регистрация: 13.08.2008
Сообщений: 931
14.06.2009, 20:10 13
предыдущий пост был про load-groups/eager/lazy-loading/read-ahead.

в плане пула бинов - основная дока - Administration & Development, page 164.

если сразу непонятно, на пару страниц вернуться можно назад. фишка вот в чем - в standardjboss.xml есть конфигурации для всех типов бинов по умолчанию. можно для каждого бина указывать свою конфигурацию. конкретно смотреть для пула xml ветку /jboss/container-configurations/container-configuration/container-pool-conf & container-cache-conf

так можно описать каждый бин, вплоть до поведения при транзакциях, точного кэширования, локинга, deadlock detection, etc. по-моему, _намного_ круче, чем у веблогика, хотя нужно понимать, что крутить.
0
mr_dronski
3 / 3 / 1
Регистрация: 13.08.2008
Сообщений: 931
14.06.2009, 20:43 14
сразу извиняюсь за оффтопик, уже закончу мыслю. сразу не написал, потому что хотел проверить наверняка.

продолжаем тему конфигов. к счастью, не нужно переписывать заново полностью конфиги. тут будет 2 способа:

1. в jboss.xml в под-дереве бина указать configuration-name и сделать ему override нужных пропертис.

или

2. (если пригодится и для других бинов) - там же, но уже в уровне /jboss/container-configurations написать новый конфиг, НО именно то, что надо - сделать extends='...' и перегрузить нужные пропертис, при этом соблюдается наследственность и обзывается конфигурация именем.

они там хороший пример конфига дают, как заставить вызовы к бинам идти через HTTP - очень полезная штука иногда.
0
vold
0 / 0 / 2
Регистрация: 17.08.2007
Сообщений: 222
15.06.2009, 11:16 15
2mr_dronski
Блин! точно, слона то я и не приметил
Слишком увлекся изучением AdminDevel а на драфты типа JBossCMP особого внимания не обращал...
Спасибо!
0
15.06.2009, 11:16
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.06.2009, 11:16

Почему не работает?
Ошибок не выдает, двигать не хочет. Помогите плз. public boolean onTouch(View...

Почему 0-ой адрес не работает
Думаю глупый вопрос но :negative: String names = new String; for(int i=0;...

Почему не работает конструкция?
Данная конструкция почему-то не работает, цикл бесконечно повторяется, даже при...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru