Hibernate Утечка Соединения - PullRequest
0 голосов
/ 27 апреля 2019

Я новичок в веб-разработке, я стажер в компании с прошлого года, и у меня возникла следующая проблема:

Я делаю веб-приложение с JSF2.3 и Hibernate 5.4.2.Final и c3p0 5.4.2.Final. Дело в том, что каждый раз, когда я бегу и захожу на страницу входа, мне нужно проверить, есть ли уже зарегистрированный пользователь-администратор - я делаю подсчет на таблице сотрудника на основе кода сотрудника - и если нет никакого администратора, тогда я получаю список стран и визуализация формы меню регистрации. Итак, я получаю сессию из sessionfactory.opensession () в моем HibernateUtil.class, делаю счет и очищаю / закрываю сессию как сниппет:

public Long retornaLong(String query) throws Exception{
            Session session = new HibernateUtil().getSession();
            try {
                return (Long) session.createQuery(query).getSingleResult();
            }finally {
                session.clear();
                session.close();
            }
        }

тогда я получу список стран из

@SuppressWarnings("unchecked")
    public List<T> retornaList(String query) throws Exception{
        Session session = new HibernateUtil().getSession();
        try {
            return (List<T>) session.createQuery(query).getResultList();
        }finally {
            session.clear();
            session.close();
        }
    }

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

Мой hibernate.cfg.xml

<hibernate-configuration>

    <!-- a SessionFactory instance listed as /jndi/name -->
    <session-factory>

        <!-- properties -->
        <property name="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialect</property>
        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/vetsnpets?useTimezone=true&amp;serverTimezone=UTC</property>
        <property name="hibernate.connection.username">vetsNpets</property>
        <property name="hibernate.connection.password">123</property>
        <property name="hiberante.show_sql">false</property>
        <property name="hiberante.format_sql">false</property>
        <property name="hbm2ddl.auto">validate</property>
        <property name="current_session_context_class">thread</property>

        <!-- C3P0 -->
        <property name="hibernate.c3p0.initialPoolSize">3</property>
        <property name="hibernate.c3p0.minPoolSize">3</property>
        <property name="hibernate.c3p0.maxPoolSize">20</property>
        <property name="hibernate.c3p0.maxStatements">100</property>
        <property name="hibernate.c3p0.maxStatementsPerConnection">5</property>
        <property name="hibernate.c3p0.maxIdleTime">2700</property>
        <property name="hibernate.c3p0.maxIdleTimeExcessConnections">600</property>
        <property name="hibernate.c3p0.acquireIncrement">1</property>
...