Я новичок в веб-разработке, я стажер в компании с прошлого года, и у меня возникла следующая проблема:
Я делаю веб-приложение с 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&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>