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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> виснет приложение после N запросов 
:(
    Опции темы
4epT
Дата 19.4.2011, 10:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Доброе утро! Столкнулся с проблемой ... почему то приложение виснет после выполнения N операций подряд. Приведу пример:

Есть страница с comboBox, в который грузятся страны:
Код

<p:selectOneMenu effect="drop" style="width: 200px;" value="#{countryController.selectedCountryString}">
                <f:selectItems value="#{countryController.allCountry}" />
</p:selectOneMenu>
<p:commandButton value="Удалить" action="#{countryController.deleteCountry}" update="message" ajax="false" style="width: 200px;" />


По нажатию на кнопку удаляется выбранная страна:
Код

public String deleteCountry(){

        WebApplicationContext wac = WebApplicationContextUtils.getWebApplicationContext(
                                        (ServletContext) FacesUtil.getExternalContext().getContext());
        countryDao = wac.getBean(CountryDao.class);
        
        if( selectedCountryString == null || countryDao == null){
            return "countryDelete";
        }
        
        Country country = countryDao.getCountryByName(selectedCountryString);
        
        if(country != null) {
            countryDao.delete(country);
            
            FacesUtil.getFacesContext().addMessage(null, new FacesMessage("Страна " + country.getCountry() + " успешно удалена."));
            
            reloadCountry();
            
            return "countryDelete";
        }
        else {
            FacesUtil.getFacesContext().addMessage(null, new FacesMessage("Извините но произошла ошибка, попробуйте еще раз."));
            return "countryDelete";
        }
    }


Managedbean - countryController имеет область жизни Request.

CountryDao - это спринг бин, который прописан в applicationContext:
Код

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="configLocation" value="classpath:/hibernate.cfg.xml" />
        <property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration" />
        <property name="hibernateProperties">
            <props>
                    <prop key="hibernate.dialect">${hibernate.dialect}</prop>
            </props>
        </property>
    </bean>

<tx:annotation-driven transaction-manager="txManager" />

<bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory" />
    </bean>

    <bean id="baseDaoImpl" class="olly.dao.BaseDaoImpl">
        <property name="sessionFactory" ref="sessionFactory" />
    </bean>

<bean id="countryDaoImpl" class="olly.dao.CountryDaoImpl" parent="baseDaoImpl">
        <property name="sessionFactory" ref="sessionFactory" />
    </bean>



BaseDaoImpl - это дженерик dao.

И на последок, метод как я вытягиваю страну по имени:
Код

public Country getCountryByName(String name) {
        List<Country> lst = getSession().createCriteria(Country.class).add( Restrictions.eq("country", name) ).list();

        if( lst != null && lst.size() > 0 ){
            return lst.get(0);
        } else {
            return null;
        }
    }



Извиняюсь что описание получилось большое, попытался как можно понятнее описать структуру проекта.

Подскажите где я мог ошибиться ? или подскажите как хоть это отлаживать ? Через дебагер все объекты не null, то есть все вроде нормально. Виснет примерно после 4 - 5 транзакциях.

Заранее спасибо! 

PM MAIL   Вверх
Vasay
Дата 19.4.2011, 12:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2097
Регистрация: 8.3.2006

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



А что в логе?

Памяти в системе достаточно для работы АПП сервера? 


--------------------
Придумать идеальную защиту от дурака невозможно, дураки, наудивление, изобретательны.
PM MAIL   Вверх
4epT
Дата 19.4.2011, 12:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Vasay @ 19.4.2011,  12:50)
А что в логе?

Памяти в системе достаточно для работы АПП сервера?

В логах пусто, там видны только запросы к БД.

Вот насчет памяти не знаю. Но ведь глупо когда приложение ложится при попытки удалить 4 страны ? К слову в таблице country всего 10-15 стран.

Как можно увеличить объем доступной памяти ? может и вправду в этом дело.

Очисткой памяти ведь должен заниматься GC ... и countryController должен полностью выгружаться из памяти так как у него время жизни Request ...

Поправьте если не прав.

Это сообщение отредактировал(а) 4epT - 19.4.2011, 12:59
PM MAIL   Вверх
COVD
Дата 19.4.2011, 13:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 26.7.2005

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



Цитата

запросы к БД

закрываете?
PM MAIL   Вверх
4epT
Дата 19.4.2011, 13:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(COVD @ 19.4.2011,  13:14)
Цитата

запросы к БД

закрываете?

В hibernate конфиге указано:
Код

<property name="hibernate.transaction.flush_before_completion">true</property>
    <property name="hibernate.transaction.auto_close_session">true</property>


или я не про то закрытие понял ?

p.s. метод удаления из BaseDaoImpl:
Код

@Transactional(readOnly = false)
    public void delete(T entity) {
        getSession().delete(entity);
        getSession().flush();
    }



Это сообщение отредактировал(а) 4epT - 19.4.2011, 14:00
PM MAIL   Вверх
MisterCleric
Дата 19.4.2011, 14:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1043
Регистрация: 16.2.2006
Где: Харьков, Украина

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



Hibernate тут не причем. Запускай профайлер и смотри, кто у тебя кушает память


--------------------
ПРИШЕЛ, УВИДЕЛ - ПЕРЕПИСАЛ...
PM MAIL ICQ   Вверх
4epT
Дата 19.4.2011, 14:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(MisterCleric @ 19.4.2011,  14:01)
Hibernate тут не причем. Запускай профайлер и смотри, кто у тебя кушает память

Слышал что в нетбинсе встроен профайлер ... где его там можно найти ?
PM MAIL   Вверх
Vasay
Дата 19.4.2011, 14:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2097
Регистрация: 8.3.2006

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



4epT
Цитата

В логах пусто, там видны только запросы к БД.


А в логе APP сервера? Если с памятью проблема - должен на это выругаться.



Цитата

Как можно увеличить объем доступной памяти ? может и вправду в этом дело.


в настройках апп сервера. Где-нибудь должны стоять ключи: Xmx/Xms .  




--------------------
Придумать идеальную защиту от дурака невозможно, дураки, наудивление, изобретательны.
PM MAIL   Вверх
4epT
Дата 19.4.2011, 14:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата

А в логе APP сервера? Если с памятью проблема - должен на это выругаться.


под логами я имею ввиду вкладка netbeans - Apache Tomcat Logs (или как то так ...).

Цитата

в настройках апп сервера. Где-нибудь должны стоять ключи: Xmx/Xms .  


можно пример для томкета ?) где эти параметры прописать =) 
PM MAIL   Вверх
Vasay
Дата 19.4.2011, 15:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2097
Регистрация: 8.3.2006

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



Если под виндой - смотрите Catalina.bat, на предмет "set JAVA_OPTS = Xmx****m"

Но я не уверен, что если Вы запускаете томкэт из нетбинса, то он не обходит Catalina.bat, запуская его со своими опциями.

П.с. я не знаю насколько хорошо NetBeans дружит с TomCat, но если Вы запускаете приложение из NetBeans - попробуйте запустить его на GlassFish - там очень хорошо все отображается в IDE вплане ошибок. Будет сразу видно в чем проблема - памяти не хватает, или эксепшен в вашей программе какой...  (хотя в логах томкэта это все тоже должно быть...)


--------------------
Придумать идеальную защиту от дурака невозможно, дураки, наудивление, изобретательны.
PM MAIL   Вверх
4epT
Дата 19.4.2011, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Vasay @ 19.4.2011,  15:10)
Если под виндой - смотрите Catalina.bat, на предмет "set JAVA_OPTS = Xmx****m"

Но я не уверен, что если Вы запускаете томкэт из нетбинса, то он не обходит Catalina.bat, запуская его со своими опциями.

П.с. я не знаю насколько хорошо NetBeans дружит с TomCat, но если Вы запускаете приложение из NetBeans - попробуйте запустить его на GlassFish - там очень хорошо все отображается в IDE вплане ошибок. Будет сразу видно в чем проблема - памяти не хватает, или эксепшен в вашей программе какой...  (хотя в логах томкэта это все тоже должно быть...)

Как буду дома попробую ... ) всем спасибо за помощь!

Как что то будет известно отпишусь )
PM MAIL   Вверх
4epT
Дата 19.4.2011, 20:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Попробовал поднять приложение на GlassFish. При старте сервера ошибок не было кроме WARNING:
Код


INFO: schema update complete
INFO: Using DataSource [org.apache.commons.dbcp.BasicDataSource@58824bce] of Hibernate SessionFactory for HibernateTransactionManager

WARNING: Unable to proxy method [public final org.hibernate.SessionFactory org.springframework.orm.hibernate3.support.HibernateDaoSupport.getSessionFactory()] because it is final: All calls to this method via a proxy will be routed directly to the proxy.

WARNING: Unable to proxy method [public final void org.springframework.orm.hibernate3.support.HibernateDaoSupport.setSessionFactory(org.hibernate.SessionFactory)] because it is final: All calls to this method via a proxy will be routed directly to the proxy.



К слову выше указанные ворнинги, не единственные. их там порядка 10-15, между собой похожи ...

Может я не правильно настроил dataSource ? в спринг контексте ...

Ну и вот такой эксепшен:
Код

INFO: olly was successfully deployed in 17 847 milliseconds.
SEVERE: java.io.IOException: Error creating temporary file transfer folder
    at org.glassfish.admin.payload.PayloadFilesManager.createTempFolder(PayloadFilesManager.java:718)


Profile запустить не получилось, вылетает ошибка и все ... (

сори, за такое форматирование ... не пойму почему так получается.


Это сообщение отредактировал(а) 4epT - 19.4.2011, 20:04
PM MAIL   Вверх
Vasay
Дата 19.4.2011, 20:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2097
Регистрация: 8.3.2006

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



4epT, 

А заработало несмотря на эксепшен или нет?

Пс - система какая? Где установлен GlassFish (в какой папке)? Не баг ли это из-за того, что ему не дают создать файлы в програмс файл?


--------------------
Придумать идеальную защиту от дурака невозможно, дураки, наудивление, изобретательны.
PM MAIL   Вверх
4epT
Дата 19.4.2011, 23:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Vasay @ 19.4.2011,  20:32)
4epT, 

А заработало несмотря на эксепшен или нет?

Пс - система какая? Где установлен GlassFish (в какой папке)? Не баг ли это из-за того, что ему не дают создать файлы в програмс файл?

Под GlassFish заработало, но не полностью ... из базы country вытянул, но не удаляет ...

Система Windows 7=) GlassFish установлен в C:\Program files\glassfish 

И все таки хотелось бы на томкете подымать приложение .. )

Это сообщение отредактировал(а) 4epT - 19.4.2011, 23:18
PM MAIL   Вверх
Vasay
Дата 20.4.2011, 01:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2097
Регистрация: 8.3.2006

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



Цитата

Под GlassFish заработало, но не полностью ... из базы country вытянул, но не удаляет ...


При попытки удаления должен тогда сыпать эксепшенами....

Цитата

Система Windows 7=) GlassFish установлен в C:\Program files\glassfish 


Наверно, с этим и связана ругань насчет невозможности создания папки.


--------------------
Придумать идеальную защиту от дурака невозможно, дураки, наудивление, изобретательны.
PM MAIL   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.0655 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


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

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