![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
Andrey1 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 621 Регистрация: 27.2.2004 Где: Moscow Репутация: 2 Всего: 5 |
Сотворил страничку, которая отображает данные одной таблицы из небольшой базы через Hibernate JPA.
Проблема в том, что страница отображается слишком медленно :( . Насколько я понял, все тормоза случаются в момент: emf = Persistence.createEntityManagerFactory("myNameOfPU"); или em = emf.createEntityManager(); Hibernate разве не должен брать entityManager из пула...? Вопрос, почему таки тормоза и что делать? Это сообщение отредактировал(а) Andrey1 - 8.12.2008, 14:45 -------------------- Созерцание и мудрость - едины. Соцерцание - это основа мудрости, а мудрость - это функция (т.е. умение использовать) созерцания. из сутры помоста шестого патриарха Хуэйнена |
|||
|
||||
MisterCleric |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1043 Регистрация: 16.2.2006 Где: Харьков, Украина Репутация: 33 Всего: 38 |
Слушай, а ты лукап Factory делаешь при каждом вызове?
Это же эквивалент SessionFactory в JPA. Его надо надо один раз создать а дальше из него брать EntityManager, как из SessionFactory Session -------------------- ПРИШЕЛ, УВИДЕЛ - ПЕРЕПИСАЛ... |
|||
|
||||
Andrey1 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 621 Регистрация: 27.2.2004 Где: Moscow Репутация: 2 Всего: 5 |
Я наивно полагал, что Hibernate JPA сам это делает... -------------------- Созерцание и мудрость - едины. Соцерцание - это основа мудрости, а мудрость - это функция (т.е. умение использовать) созерцания. из сутры помоста шестого патриарха Хуэйнена |
|||
|
||||
MisterCleric |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1043 Регистрация: 16.2.2006 Где: Харьков, Украина Репутация: 33 Всего: 38 |
Из пула берется EntityManager, а EntityManagerFactory - это класс конфигурации ну и провайдер всех JPA делов.
Каждый раз когда ты его запрашивал, происходила переконфигурация твоего JPA-окружения -------------------- ПРИШЕЛ, УВИДЕЛ - ПЕРЕПИСАЛ... |
|||
|
||||
Andrey1 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 621 Регистрация: 27.2.2004 Где: Moscow Репутация: 2 Всего: 5 |
Ага, то есть, если EntityManagerFactory запрашивать один раз в сессии или в application scope, то таких тормозов не будет и Hibernate не нужно никак дополнительно настраивать?
Это сообщение отредактировал(а) Andrey1 - 8.12.2008, 15:50 -------------------- Созерцание и мудрость - едины. Соцерцание - это основа мудрости, а мудрость - это функция (т.е. умение использовать) созерцания. из сутры помоста шестого патриарха Хуэйнена |
|||
|
||||
MisterCleric |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1043 Регистрация: 16.2.2006 Где: Харьков, Украина Репутация: 33 Всего: 38 |
А что значит дополнительно настраивать?
Лучше один раз при старте приложения все настроить, а дальше просто работать с базой через сущности -------------------- ПРИШЕЛ, УВИДЕЛ - ПЕРЕПИСАЛ... |
|||
|
||||
Andrey1 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 621 Регистрация: 27.2.2004 Где: Moscow Репутация: 2 Всего: 5 |
Вообщем, ясно, что нужно Spring заюзать и хранить фабрику в application scope.
-------------------- Созерцание и мудрость - едины. Соцерцание - это основа мудрости, а мудрость - это функция (т.е. умение использовать) созерцания. из сутры помоста шестого патриарха Хуэйнена |
|||
|
||||
MisterCleric |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1043 Регистрация: 16.2.2006 Где: Харьков, Украина Репутация: 33 Всего: 38 |
ну или как пишут в доке по JPA статический класс.
А вообще не понятно, почему ты не пользуешься возможностями сервера приложений? Я беру EntityManage как:
в EJB3 SessionBeans и мне его инджектит контейнер. А сам PersistenceUnit подымает тоже контейнер - это твой EntityManagerFactory -------------------- ПРИШЕЛ, УВИДЕЛ - ПЕРЕПИСАЛ... |
|||
|
||||
Andrey1 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 621 Регистрация: 27.2.2004 Где: Moscow Репутация: 2 Всего: 5 |
Потому что Tomcat не умеет так делать ![]() -------------------- Созерцание и мудрость - едины. Соцерцание - это основа мудрости, а мудрость - это функция (т.е. умение использовать) созерцания. из сутры помоста шестого патриарха Хуэйнена |
|||
|
||||
powerOn |
|
|||
![]() software saboteur ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4367 Регистрация: 7.10.2005 Репутация: 28 Всего: 159 |
||||
|
||||
MisterCleric |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1043 Регистрация: 16.2.2006 Где: Харьков, Украина Репутация: 33 Всего: 38 |
У EntityManager есть два метода
getTransaction(), как написано в JavaDoc, то его нужно вызывать не из JPA и есть метод flush(). по-моему достаточно дял руления транзакциями не в транзакционном контейнере. Ну а вообще, если все-таки TomCat. То надо посмотреть в сторону Spring. У них есть решения такого типа задач -------------------- ПРИШЕЛ, УВИДЕЛ - ПЕРЕПИСАЛ... |
|||
|
||||
Andrey1 |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 621 Регистрация: 27.2.2004 Где: Moscow Репутация: 2 Всего: 5 |
Решил через статическую фабрику и Listener:
Сейчас, правда, фабрика перегружается при любом, даже частичном, передеплое... Это сообщение отредактировал(а) Andrey1 - 9.12.2008, 12:29 -------------------- Созерцание и мудрость - едины. Соцерцание - это основа мудрости, а мудрость - это функция (т.е. умение использовать) созерцания. из сутры помоста шестого патриарха Хуэйнена |
||||
|
|||||
powerOn |
|
|||
![]() software saboteur ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4367 Регистрация: 7.10.2005 Репутация: 28 Всего: 159 |
это понятно, что можно писать компоненты которые будут управлять транзакциями в ручную, да вот только такой подход (как аукнится так и) откликнется при написании тестов. Да и код становится прозрачнее если содержит только бизнес логику. К тому же, если что-то за тебя уже написано не надо тратить время на изобретение велосипеда. Поэтому я думаю, что транзакциями нужно рулить декларативно. Но если с томката никуда не уйти, то лучше уж использовать spring и не извращаться. |
|||
|
||||
Andrey1 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 621 Регистрация: 27.2.2004 Где: Moscow Репутация: 2 Всего: 5 |
Да, возможно эта проблема когда-нибудь станет. И тогда я по-настоящему узнаю, зачем люди придумали Spring ![]() -------------------- Созерцание и мудрость - едины. Соцерцание - это основа мудрости, а мудрость - это функция (т.е. умение использовать) созерцания. из сутры помоста шестого патриарха Хуэйнена |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |