Как правильно закрыть и открыть сеанс Hibernate?
У меня есть следующий метод, который вставляет большой пакет записей каждые несколько секунд. После некоторого времени работы я получаю ошибки, подобные следующим:
ОШИБКА: сбой линии связи
Последний пакет, успешно полученный от сервера, был 523 миллисекунды назад. Последний пакет, успешно отправленный на сервер, был 8 миллисекунд назад.
16 мая 2013 г. 9:48:30 com.mchange.v2.c3p0.stmt.GooGooStatementCache checkinStatement ИНФОРМАЦИЯ: Проблема с проверенным оператором, удаление.
com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Операции не допускаются после закрытия оператора.
Код, который я использую для открытия и закрытия соединений, выглядит следующим образом:
public DataControllerImp() {
session = HibernateUtil.getSessionFactory().openSession();
}
@Override
public void saveMessage(ArrayList messages) {
Transaction tx = session.beginTransaction();
for (int i = 0; i < mesages.size(); i++) {
Message message = messages.get(i);
try {
session.save(message);
if (i % 75 == 0) {
// flush a batch of inserts and release memory:
session.flush();
session.clear();
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
session.close();
}
}
tx.commit();
}
Я также использую пул соединений c3p0. Моя конфигурация выглядит так:
org.hibernate.connection.C3P0ConnectionProvider
1
300
3
20
50
300
1
250
Я неправильно открываю и закрываю соединения? Пожалуйста, дайте мне знать, что я могу изменить, чтобы прекратить получать эту ошибку и остановить мою программу.